From 0e6ff7e292554b8584ee44894cca99818621fb2a Mon Sep 17 00:00:00 2001 From: expressgy Date: Thu, 20 Jun 2024 17:29:02 +0800 Subject: [PATCH] INIT --- .eslintrc.js | 89 + .gitignore | 56 + .prettierrc.js | 14 + README.md | 131 + ...关于若依数据权限的一些问题.md | 110 + docs/RBAC/对RBAC的理解.md | 56 + docs/RBAC/对RBAC的理解.png | Bin 0 -> 601909 bytes docs/drizzle条件查询.md | 241 + docs/nestcli.md | 50 + docs/pacAuth_database_0.2.ndm2 | 6315 ++++++++++++++ docs/swaggerApi.md | 337 + docs/生命周期.md | 58 + drizzle.config.js | 36 + nest-cli.json | 8 + package.json | 98 + pnpm-lock.yaml | 7558 +++++++++++++++++ pnpm-lock.yamlss | 7523 ++++++++++++++++ src/application/app.controller.spec.ts | 22 + src/application/app.controller.ts | 30 + src/application/app.module.ts | 62 + src/application/app.service.ts | 15 + .../core-dict/core-dict.controller.ts | 74 + src/application/core-dict/core-dict.module.ts | 9 + .../core-dict/core-dict.service.ts | 414 + .../core-dict/dto/create-core-dict.dto.ts | 146 + .../core-dict/dto/get-core-dict.dto.ts | 151 + .../core-dict/dto/update-core-dict.dto.ts | 25 + .../core-dict/entities/core-dict.entity.ts | 1 + .../core-env/core-env.controller.ts | 74 + src/application/core-env/core-env.module.ts | 9 + src/application/core-env/core-env.service.ts | 438 + .../core-env/dto/create-core-env.dto.ts | 133 + .../core-env/dto/get-core-env.dto.ts | 142 + .../core-env/dto/update-core-env.dto.ts | 25 + .../core-env/entities/core-env.entity.ts | 1 + .../core-service.controller.spec.ts | 20 + .../core-service/core-service.controller.ts | 65 + .../core-service/core-service.module.ts | 9 + .../core-service/core-service.service.spec.ts | 18 + .../core-service/core-service.service.ts | 234 + .../dto/create-core-service.dto.ts | 62 + .../core-service/dto/get-core-service.dto.ts | 33 + .../core-service/dto/serviceKey.dto.ts | 36 + .../dto/update-core-service.dto.ts | 5 + .../entities/core-service.entity.ts | 1 + src/application/global.module.ts | 26 + src/application/test/dto/create-test.dto.ts | 1 + src/application/test/dto/update-test.dto.ts | 4 + src/application/test/entities/test.entity.ts | 1 + src/application/test/test.controller.spec.ts | 20 + src/application/test/test.controller.ts | 42 + src/application/test/test.module.ts | 9 + src/application/test/test.service.spec.ts | 18 + src/application/test/test.service.ts | 26 + .../change-case/change-case.decorator.ts | 109 + .../decorator/pac-info/pac-info.decorator.ts | 15 + src/common/decorator/trim/trim.decorator.ts | 13 + .../http-except/http-except.filter.spec.ts | 7 + src/common/http-except/http-except.filter.ts | 48 + .../format-response.interceptor.spec.ts | 7 + .../format-response.interceptor.ts | 15 + .../log-request-info.interceptor.spec.ts | 7 + .../log-request-info.interceptor.ts | 58 + .../user-operation-log.interceptor.spec.ts | 7 + .../user-operation-log.interceptor.ts | 54 + .../lifecycle/lifecycle.service.spec.ts | 18 + src/common/lifecycle/lifecycle.service.ts | 39 + .../log-request-info.middleware.spec.ts | 7 + .../log-request-info.middleware.ts | 24 + .../useragent/useragent.middleware.spec.ts | 7 + .../useragent/useragent.middleware.ts | 30 + src/common/pipe/trim/trim.pipe.spec.ts | 7 + src/common/pipe/trim/trim.pipe.ts | 14 + .../service/mysql/mysql.service.spec.ts | 18 + src/common/service/mysql/mysql.service.ts | 54 + .../service/redis/redis.service.spec.ts | 18 + src/common/service/redis/redis.service.ts | 89 + src/config/configuration.ts | 48 + src/dto/get.dto.ts | 89 + src/entities/0000_productive_zarda.sql | 180 + src/entities/customType.ts | 24 + src/entities/meta/0000_snapshot.json | 1127 +++ src/entities/meta/_journal.json | 13 + src/entities/relations.ts | 3 + src/entities/schema.ts | 342 + src/main.ts | 87 + src/service/logger/logger.service.spec.ts | 18 + src/service/logger/logger.service.ts | 145 + .../snowflake/snowflake.service.spec.ts | 18 + src/service/snowflake/snowflake.service.ts | 74 + src/utils/boolean.enum.ts | 40 + src/utils/customDrizzleRowWithRecursive.ts | 32 + src/utils/extractBits.ts | 25 + src/utils/formatBytes.ts | 35 + src/utils/generateMachineId.ts | 64 + src/utils/likeQuery.ts | 16 + src/utils/mathodColor.ts | 69 + src/utils/myType.d.ts | 17 + src/utils/random.ts | 36 + src/utils/sleep.ts | 20 + test/app.e2e-spec.ts | 21 + test/index.html | 10 + test/jest-e2e.json | 9 + test/testsend.js | 45 + test/测试奇怪的函数调用.js | 18 + tsconfig.build.json | 4 + tsconfig.json | 31 + 107 files changed, 28406 insertions(+) create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .prettierrc.js create mode 100644 README.md create mode 100644 docs/RBAC/关于若依数据权限的一些问题.md create mode 100644 docs/RBAC/对RBAC的理解.md create mode 100644 docs/RBAC/对RBAC的理解.png create mode 100644 docs/drizzle条件查询.md create mode 100644 docs/nestcli.md create mode 100644 docs/pacAuth_database_0.2.ndm2 create mode 100644 docs/swaggerApi.md create mode 100644 docs/生命周期.md create mode 100644 drizzle.config.js create mode 100644 nest-cli.json create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-lock.yamlss create mode 100644 src/application/app.controller.spec.ts create mode 100644 src/application/app.controller.ts create mode 100644 src/application/app.module.ts create mode 100644 src/application/app.service.ts create mode 100644 src/application/core-dict/core-dict.controller.ts create mode 100644 src/application/core-dict/core-dict.module.ts create mode 100644 src/application/core-dict/core-dict.service.ts create mode 100644 src/application/core-dict/dto/create-core-dict.dto.ts create mode 100644 src/application/core-dict/dto/get-core-dict.dto.ts create mode 100644 src/application/core-dict/dto/update-core-dict.dto.ts create mode 100644 src/application/core-dict/entities/core-dict.entity.ts create mode 100644 src/application/core-env/core-env.controller.ts create mode 100644 src/application/core-env/core-env.module.ts create mode 100644 src/application/core-env/core-env.service.ts create mode 100644 src/application/core-env/dto/create-core-env.dto.ts create mode 100644 src/application/core-env/dto/get-core-env.dto.ts create mode 100644 src/application/core-env/dto/update-core-env.dto.ts create mode 100644 src/application/core-env/entities/core-env.entity.ts create mode 100644 src/application/core-service/core-service.controller.spec.ts create mode 100644 src/application/core-service/core-service.controller.ts create mode 100644 src/application/core-service/core-service.module.ts create mode 100644 src/application/core-service/core-service.service.spec.ts create mode 100644 src/application/core-service/core-service.service.ts create mode 100644 src/application/core-service/dto/create-core-service.dto.ts create mode 100644 src/application/core-service/dto/get-core-service.dto.ts create mode 100644 src/application/core-service/dto/serviceKey.dto.ts create mode 100644 src/application/core-service/dto/update-core-service.dto.ts create mode 100644 src/application/core-service/entities/core-service.entity.ts create mode 100644 src/application/global.module.ts create mode 100644 src/application/test/dto/create-test.dto.ts create mode 100644 src/application/test/dto/update-test.dto.ts create mode 100644 src/application/test/entities/test.entity.ts create mode 100644 src/application/test/test.controller.spec.ts create mode 100644 src/application/test/test.controller.ts create mode 100644 src/application/test/test.module.ts create mode 100644 src/application/test/test.service.spec.ts create mode 100644 src/application/test/test.service.ts create mode 100644 src/common/decorator/change-case/change-case.decorator.ts create mode 100644 src/common/decorator/pac-info/pac-info.decorator.ts create mode 100644 src/common/decorator/trim/trim.decorator.ts create mode 100644 src/common/http-except/http-except.filter.spec.ts create mode 100644 src/common/http-except/http-except.filter.ts create mode 100644 src/common/interceptor/format-response/format-response.interceptor.spec.ts create mode 100644 src/common/interceptor/format-response/format-response.interceptor.ts create mode 100644 src/common/interceptor/log-request-info/log-request-info.interceptor.spec.ts create mode 100644 src/common/interceptor/log-request-info/log-request-info.interceptor.ts create mode 100644 src/common/interceptor/user-operation-log/user-operation-log.interceptor.spec.ts create mode 100644 src/common/interceptor/user-operation-log/user-operation-log.interceptor.ts create mode 100644 src/common/lifecycle/lifecycle.service.spec.ts create mode 100644 src/common/lifecycle/lifecycle.service.ts create mode 100644 src/common/middleware/log-request-info/log-request-info.middleware.spec.ts create mode 100644 src/common/middleware/log-request-info/log-request-info.middleware.ts create mode 100644 src/common/middleware/useragent/useragent.middleware.spec.ts create mode 100644 src/common/middleware/useragent/useragent.middleware.ts create mode 100644 src/common/pipe/trim/trim.pipe.spec.ts create mode 100644 src/common/pipe/trim/trim.pipe.ts create mode 100644 src/common/service/mysql/mysql.service.spec.ts create mode 100644 src/common/service/mysql/mysql.service.ts create mode 100644 src/common/service/redis/redis.service.spec.ts create mode 100644 src/common/service/redis/redis.service.ts create mode 100644 src/config/configuration.ts create mode 100644 src/dto/get.dto.ts create mode 100644 src/entities/0000_productive_zarda.sql create mode 100644 src/entities/customType.ts create mode 100644 src/entities/meta/0000_snapshot.json create mode 100644 src/entities/meta/_journal.json create mode 100644 src/entities/relations.ts create mode 100644 src/entities/schema.ts create mode 100644 src/main.ts create mode 100644 src/service/logger/logger.service.spec.ts create mode 100644 src/service/logger/logger.service.ts create mode 100644 src/service/snowflake/snowflake.service.spec.ts create mode 100644 src/service/snowflake/snowflake.service.ts create mode 100644 src/utils/boolean.enum.ts create mode 100644 src/utils/customDrizzleRowWithRecursive.ts create mode 100644 src/utils/extractBits.ts create mode 100644 src/utils/formatBytes.ts create mode 100644 src/utils/generateMachineId.ts create mode 100644 src/utils/likeQuery.ts create mode 100644 src/utils/mathodColor.ts create mode 100644 src/utils/myType.d.ts create mode 100644 src/utils/random.ts create mode 100644 src/utils/sleep.ts create mode 100644 test/app.e2e-spec.ts create mode 100644 test/index.html create mode 100644 test/jest-e2e.json create mode 100644 test/testsend.js create mode 100644 test/测试奇怪的函数调用.js create mode 100644 tsconfig.build.json create mode 100644 tsconfig.json diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..609bf9e --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,89 @@ +module.exports = { + parser: "@typescript-eslint/parser", + parserOptions: { + project: "tsconfig.json", + tsconfigRootDir: __dirname, + sourceType: "module" + }, + plugins: ["@typescript-eslint/eslint-plugin", "prettier"], + extends: [ + "plugin:@typescript-eslint/recommended", + "plugin:prettier/recommended", + "prettier" + ], + root: true, + env: { + node: true, + jest: true + }, + ignorePatterns: [".eslintrc.js"], + rules: { + "max-len": ["error", { + "code": 160, // 指定最大代码长度 + "ignoreStrings": true, // 忽略字符串中的字符长度 + "ignoreUrls": true, // 忽略URL的长度 + "ignoreComments": false, // 注释中的字符会计入长度限制 + "ignoreTemplateLiterals": true, // 忽略模板字符串的长度 + "tabWidth": 4 // 设置制表符的宽度 + }], + "@typescript-eslint/interface-name-prefix": "off", + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/no-explicit-any": "off", + "indent": [ + "error", + 4, + { + SwitchCase: 1 + } + ], // 1 表示在 switch 语句中,case 和 default 语句需要与 switch 的起始位置对齐,并且缩进一个级别(即 4 个空格) + // "curly": "error", // 所有的控制语句(if, for, while 等)使用大括号括起来,即使它们只包含单个语句。 + "quotes": ["error", "single"], // 强制使用一致的引号风格 + "no-unused-expressions": "error", // 禁止使用未使用的表达式 + "no-console": "error", // 禁止使用console + "semi": ["error", "always"], // 启用 semi 规则,要求语句后总是使用分号,并将其设置为错误 + // "new-cap": "error", //要求使用 new 关键字创建的实例的构造函数名必须大写。 + "no-const-assign": "error", //禁止给 const 声明的变量赋值 + "no-duplicate-case": "error", // 禁止 switch 语句中出现重复的 case + "no-extra-parens": "error", // 限制不必要的括号 + "no-fallthrough": "error", //:禁止 switch 语句中的穿透行为 + "no-multi-spaces": "error", //禁止使用多个空格。 + "no-trailing-spaces": "error", //:禁止行尾有空格。 + "no-undef": "error", //:禁止使用未声明的变量。 + "no-undef-init": "error", //禁止初始化变量时使用 undefined。 + "no-empty": 2, //块语句中的内容不能为空 + "no-extra-semi": 2, //禁止多余的冒号 + "no-func-assign": 2, //禁止重复的函数声明 + "no-inline-comments": 2, //禁止行内备注 + "space-before-function-paren": [ + "error", + { + // "always" - 要求在函数名和参数列表之间总是有空白。 + // "never" - 禁止在函数名和参数列表之间有空格。 + anonymous: "always", // "anonymous" - 指定匿名函数表达式前的空格要求("always" 或 "never")。 + named: "never", // "named" - 指定具名函数表达式前的空格要求("always" 或 "never")。 + asyncArrow: "always" // "asyncArrow" - 指定异步箭头函数前的空格要求("always" 或 "never") + } + ], + "no-multiple-empty-lines": [1, { max: 2 }], //空行最多不能超过2行 + "no-nested-ternary": 0, //禁止使用嵌套的三目运算 + "no-redeclare": 2, //禁止重复声明变量 + "no-shadow": 2, //外部作用域中的变量不能与它所包含的作用域中的变量或参数同名 + // 'no-unused-vars': [2, { vars: 'all', args: 'after-used' }], //不能有声明后未被使用的变量或参数 + "no-use-before-define": 2, //未定义前不能使用 + "no-mixed-spaces-and-tabs": "error", // 禁止在代码中混用空格和制表符 + "lines-around-comment": [ + "error", + { + beforeBlockComment: true, // beforeBlockComment: 在块级注释(以 /* 开头)之前需要有空行。 + afterBlockComment: false, // afterBlockComment: 在块级注释之后需要有空行。 + beforeLineComment: true, // beforeLineComment: 在行注释(以 // 开头)之前需要有空行。 + afterLineComment: false, // afterLineComment: 在行注释之后需要有空行。 + allowBlockStart: true, // allowBlockStart: 允许块级注释紧跟在函数或块的开始。 + allowClassStart: true, // allowClassStart: 允许块级注释紧跟在类定义的开始。 + allowObjectStart: true, // allowObjectStart: 允许块级注释紧跟在对象字面量的开始。 + allowArrayStart: true // allowArrayStart: 允许块级注释紧跟在数组字面量的开始。 + } + ] + } +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4b56acf --- /dev/null +++ b/.gitignore @@ -0,0 +1,56 @@ +# compiled output +/dist +/node_modules +/build + +# Logs +logs +*.log +npm-debug.log* +pnpm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# OS +.DS_Store + +# Tests +/coverage +/.nyc_output + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# temp directory +.temp +.tmp + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..9857461 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,14 @@ +module.exports = { + printWidth: 160, // 每行代码的最大长度 + tabWidth: 4, // 每个缩进级别的空格数,用来覆盖默认的2个空格 + useTabs: false, // 使用空格而不是制表符进行缩进 + semi: true, // 语句末尾使用分号 + singleQuote: true, // 使用单引号 + quoteProps: 'consistent', // 对象字面量属性名的引号风格 + trailingComma: 'all', // 行尾逗号 + bracketSpacing: true, // 对象字面量属性后使用空格 + jsxBracketSameLine: false, // JSX 标签的闭括号放在下一行 + arrowParens: 'always', // 箭头函数参数括号 + proseWrap: 'preserve', // 保持文本换行 + endOfLine: 'auto', // 换行符自动处理 +}; diff --git a/README.md b/README.md new file mode 100644 index 0000000..14e987c --- /dev/null +++ b/README.md @@ -0,0 +1,131 @@ +

+ Nest Logo +

+ +[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 +[circleci-url]: https://circleci.com/gh/nestjs/nest + +

A progressive Node.js framework for building efficient and scalable server-side applications.

+

+NPM Version +Package License +NPM Downloads +CircleCI +Coverage +Discord +Backers on Open Collective +Sponsors on Open Collective + + Support us + +

+ + +## Description + +[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. + +## Installation + +```bash +$ pnpm install +``` + +## Running the app + +```bash +# development +$ pnpm run start + +# watch mode +$ pnpm run start:dev + +# production mode +$ pnpm run start:prod +``` + +## Test + +```bash +# unit tests +$ pnpm run test + +# e2e tests +$ pnpm run test:e2e + +# test coverage +$ pnpm run test:cov +``` + +## Support + +Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). + +## Stay in touch + +- Author - [Kamil Myśliwiec](https://kamilmysliwiec.com) +- Website - [https://nestjs.com](https://nestjs.com/) +- Twitter - [@nestframework](https://twitter.com/nestframework) + +## License + +Nest is [MIT licensed](LICENSE). + + +## dirTree + +``` +/src +│ app.module.ts # 主模块 +│ main.ts # 应用入口文件 +│ +├──/common # 公共服务目录 +│ ├──/filters # 异常过滤器等 +│ │ ├──/http-exception.filter.ts +│ │ ├──/validation-filter.ts +│ │ └──/... # 更多过滤器 +│ ├──/guards # 守卫 +│ │ ├──/auth.guard.ts +│ │ ├──/roles.guard.ts +│ │ └──/... # 更多守卫 +│ ├──/interceptors # 拦截器 +│ │ ├──/logging.interceptor.ts +│ │ ├──/timeout.interceptor.ts +│ │ └──/... # 更多拦截器 +│ ├──/pipes # 管道 +│ │ ├──/validation.pipe.ts +│ │ ├──/transform.pipe.ts +│ │ └──/... # 更多管道 +│ └──/decorators # 装饰器 +│ ├──/auth.decorator.ts +│ ├──/log.decorator.ts +│ └──/... # 更多装饰器 +│ +├──/config # 配置文件 +│ ├──/database.config.ts +│ ├──/app.config.ts +│ └──/... # 更多配置 +│ +├──/modules # 模块目录 +│ ├──/user # 用户模块 +│ │ ├──/user.module.ts +│ │ ├──/controllers # 模块控制器 +│ │ ├──/services # 模块服务 +│ │ ├──/dtos # 模块 DTOs +│ │ ├──/entities # 模块实体 +│ │ └──/... # 模块其他文件 +│ └──/... # 更多模块 +│ +├──/providers # 服务提供者 +│ ├──/app.provider.ts +│ └──/... # 更多提供者 +│ +├──/entities # 数据实体定义 +│ ├──/user.entity.ts +│ └──/... # 更多实体 +│ +└──/utils # 工具类和实用函数 + ├──/logger.ts + └──/... # 更多工具 +``` diff --git a/docs/RBAC/关于若依数据权限的一些问题.md b/docs/RBAC/关于若依数据权限的一些问题.md new file mode 100644 index 0000000..63f9897 --- /dev/null +++ b/docs/RBAC/关于若依数据权限的一些问题.md @@ -0,0 +1,110 @@ +# 关于标准化系统的用户系统与若依用户系统的研讨会 + +> 参会人:全体研发(选择性),产品(选择性) +> +> 一次会议 + + + +# 若依系统的优点 + +1. 较完善,且稳定,能满足大多单个系统的需求 +2. 成体系,插件丰富,生态,一直在更新 +3. 双token +4. 不用费工夫自己写 +5. 通用 +6. 用的人多 + +补充。。。 + + + +# 若依系统的缺陷 + +1. 可复制系统的批量移植问题 +2. 针对用户系统的二开造成的版本维护困难 +3. UI问题,和一些操作的优化 + + + +# 关于若依系统(权限)的一些问题 + +## 关于功能权限 + +1. 功能权限用的什么工具 + spring security +2. 实现原理 + 注解加拦截 +3. 是否必须按照`:`规则添加 + +## 关于数据权限 + +1. 数据权限用的什么工具 +2. 实现原理 +3. 是否只局限于查询操作(只能作用于查询) +4. 其它系统如何调用,调用原理是什么,【档案 运维 其他】,连表查询,采用数据库 + +## 其他 + +1. 岗位标识的作用 + + + + + +# 标准化系统的核心需求 + +1. 公司信息可配 +2. 菜单编辑提到更高层次,增加系统参数 +3. 系统变量提到更高层次 +4. 建立个人用户操作习惯变量 +5. 双tocken验证 +6. 请求限制(ip、请求数量) +7. 账户封禁、试错配置 +8. 验证配置 +9. 系统发件配置 +10. 多组织多部门 +11. 多岗位 +12. 多角色 +13. 组织架构增加参数 +14. 角色结构化 + +### 其他基础子系统/功能 + +- 文件系统 +- 消息提醒(控制中心) +- + + + + + +# 实施计划 + +## 普通可复制系统 + +## 细粒度数据权限系统 + +## 特殊角色互斥系统 + + + +# 管理维护计划 + + + + + + + +其他问题 + +普通业务记录,如果要加装流程管理怎么办 + +流程管理要触发其他系统操作怎么办,还有数据传递 + + + + + +- 跨部门:选更高一级,数据权限可以分配多个组织的权限 \ No newline at end of file diff --git a/docs/RBAC/对RBAC的理解.md b/docs/RBAC/对RBAC的理解.md new file mode 100644 index 0000000..86cfc05 --- /dev/null +++ b/docs/RBAC/对RBAC的理解.md @@ -0,0 +1,56 @@ +# RBAC<92> + +> 1992 , **RBAC0** + +- 组织架构 +- 岗位:账户上的属性标签 +- 角色:权限的集合 +- 权限:功能权限+数据权限 + + + +# RBAC<96> + +> 96年对RBAC的优化 + + + +# RBAC1 + +> 角色结构化,角色继承 + +- 一般继承:无规则,从最底层开始向上继承,不利于管理(结构化),存在多个多个上级,【最末端的可以用具体权限条目来代替了】 +- 受限继承:向下有限继承,方便建立 + +将角色结构化,解决扁平化角色的管理复杂度 + + + +# RBAC2 + +> 角色限制 + +- SSD:静态职责分离 + - 互斥角色:不能同时将两个角色分给同一个人 + - 基数约束:账户能被分配的角色数量,角色能容纳的最大账户数量 + - ~~先决条件角色:用户想要成为上级角色,必须先成为下一级角色,比如游戏中的转职~~【此情况应该不存在于受限继承中】 +- DSD:动态职责分离 + - 用户可以有两个互斥的角色,但是在运行时只能选择一个(BOOS直聘,老板和员工) + + + +# RBAC3 + +> RBAC3=RBAC1+RBAC2 + + + +# 完善的RBAC + +> 新用户的权限,可以来源于所在部门的**角色**或权限 + +方便新用户进来不用手动配角色 + + + +问题:用户和账户的定义,一个用户存在多账户,如腾讯云的子账户 \ No newline at end of file diff --git a/docs/RBAC/对RBAC的理解.png b/docs/RBAC/对RBAC的理解.png new file mode 100644 index 0000000000000000000000000000000000000000..8dfc3702463061c1e56ce96dbcecb4f39dde2038 GIT binary patch literal 601909 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

Zk&Tc;0EiZEC+2gaxClHy<*d4uNV^pyZq zAheVpI1(Bye0^ya=OrfNv|v9Gl^#Soh9n-K6hh|FyGJ0KL`}$tf4gCtJ=9*MrHKCU zZ8-1}lfgmQ7(KCycI(l{%c5FnACVxC*?KJpY+(&vKc!&Ub$=VR6=((xX2qRgD`6_6 z+v)$niRsl_`Qm|tsBBR9kfHRFJ+`w(voM=I@eKsSe4L>)(Y9SdY&{T?(L&Iy>U;8A zIE@c{lNA)C#Z9gv#}yp!FZwb@|G~q`Kq-+IjStY*SMJ0=3V^3ar3j+Lh`UIML0Fgx z;K{{xVfjJ!{P*7h+;LNob@&lnZrqkBwL`(Dq(=B-CHcxLbg52n0{bRmNwk4%1qOOP zU-8{}^c5-*nyXNAedLQ#`{82XJ`#i{-6uI71haRDrgX=<38NC$VvB+P=#i7Ut)Oo6 ztZ`bfT7Os#RYZ%xC+-rO1`NK7Mft9e)1o z)wSXhtXLmq{%V#uWAqAU^>~;uem0Y@nM(VNNlNrF@I_8CA}C<&2=L{fW4K>U7&KJA zXU+^{dj#=iU-Fw+doFN2f3}tu9c|I*;%*r~1%a2LTL890M^39tB&v8sf zi*HPGlGeG2-5xbU5}r2e_0D-!tEU9vq3#MD&@&U^gt(*`B<9WG-W+xcgE(bEt-Wxzh`m!7I-{Dl$h`Sa8`qJ;+jL zPIYK2HUF_8ihHgNdxidky8N{m>g#zboh)xQiUFE1fopWhVj z#a zBInK8o1ISnoR!+W+jQ~Vg3~)%JgZZ$OQ*Vrc!!A=Oc`q*i9B&+ssEgrYi^yKzr`;5 zhM4>rE;U|rW9y}oi4G$h-P*43_T)sYXi2=%zU#*6PCH!V0*kRcX1>j$3A412)xDc@F(eU0YDO-7e;-^lL$h%M>vh zX};1pS3lD#q+jg?>cckJ1EAh#KTwB=^d<#Z2 z20!x-zFJu9VlR8%&w_nU;O(XRMt|OB)w#bt)i82f)4Fp*zQpIJ0S?W{jfcKp+Tc6$ zjn1T{Qnm5X$pLHGiIppwCe84_e^qa$WZ^juLXPN{wMWNGi6_ec%5AGZcSF3k>qLyZ=4w{;RU!$l4z^#=koquB}eH@}_Lo(t+;*qZjg=8gpjF zW(+2!8Z35VPiK$*sXIL+>FB2!?G)+G-+NfBv|4cD;oeVHb@s)j8ZTNJ(~>hHG~J7X zTCCW!^@jH_x*N5_s^DbaO%6L0K9je~hx?7%#vRX-Q+KRnH){?~tV#{|THc^`p=8da zo#JuH@J?=pO)>r`d@OYLsi;<3pEra*2cA7+O&Pc(&1y zpOUuq>=8ceWdhfa*a>eh7n0bpr}53g#*CmL4~6x6U0?mm5qBw&?fFtalg;|bJXe6d zv0doOH@{3X^ohKE;R8Jmp1Di4oi4AIoZMX!+|_GW)mW5bU(h`oka^QWc}#ujBG);+ zkC~oc=k6~`4;iad3mf!sTi2!bmHYCnH{8drv+Gigb6K9avPLxbz`7Gt z*IvKHT>0XUKD?H@%z!C23#GTqo3PUdbroZG3GvOd*vOnYclO#K-bjUznHD}Lk1T#X zzcKH1#MFoLp1$Zhy5~v#E0I>ee8I^Qy5`(of0HzRwZE@0){n^D?7f9X!k2 zmmT&eqxHn@`?5A#d~0?}CjMhRl2|)1x^{cuX_myy{v9b|B@vA$7gVO#a{IIM#aBEt zEjr8lyUy%h^xth|YiyS!-<~D^ve|Y~+sxl6*nK&FrL4KSds$}uOaD1qEK5&I(bV4e zkF2}d!lLS@75#(WdCGGaOuakFyWBtl1snsm}(Z;tVGTNeB zlVKd@rQog5_M%zn=&|-0Plj8|FWXF+J>~0Lar0F|%#AEe4JCKZ`Dj<`sc>jmd)qqe zMZArt7OrS{-O&&qZK}~Lsk=yhQQqZ+Ig)zsoz@jJxr&*`TM0yco#6Luqf71GaEFgO zV&_PeM7+)%RF~Cp+ND#drTKV|#>S1pw-wmG*e=5r2g+N2Eq6b8$#_AY5v-xMwdMY%l+k44R5Y(|W%BeWj zzx7V+(~D8t*S@;7b*0ed1cpvwV$PTpH~*Kh_-SIl91W*@@*eB@G!$BEcZT=Qjyo5Z zb6?P#GbL!p4&fQ*8|9n##h?9AZQn6(sif~3fla=Cl7^uTTns+`5I(I>1}8)69Q#bV zoVLesbG>1OG+rw@6a8x9RA0U0TV_19(ec-7@`&ERHJ|xS#1cx^^VQU#$O;R!Li0QN zT!*4x7N(y*D=^(l{#NcO){)oz{M@odfq$>7IL&ES7AlzDobPWn?5N(uN?7P6e_!!8 zpHuk(JyQXRa|%-#Nrx+bmKYuSv?Rz==vro%f@sRd`Jq!bk#0px{-MIjx;1J)q`76o zd%drYXe;{W^MzQKnD0J*M}Df%5~+HndrB!u7j@=55M1hVWN`D;l^f9^C5@ zJ%>guFI#CFU9x2IHLVc7@afw(z6%?tET3^=f`~}GLZIQX79*YN_~_Gl;ya_l_RmN@ zgFe9qLDsC?bK*CyO-bB*wM6=CR{Oqy2kQLu3PTfo3_>i;SIrg{X{#^Dy}e{t{pO_Y8|6XRcqP9o34DDp*s8L)&_UMgUYpC>n{AQ zUn=})N?4tPSb(T<#P@nt?Le=CiEg7B%7;~Ltn|a25^Fma#vAMw=f#{a?AUV>=c=9^ zE`2MmFu}@i&cV|?TfGz~@uUWrX+PCDq4~ypUvgr&=cNaGy<*1sNs6HASQ~lnMatrn zg(SKsr$|iZs^1#1E_n3#e8sWb^E%XQCDWwz#DgYfId~MTcGy$#DRHgYjdUG9^Y`Bt zI5j$mc&u?$Nr^i@#eAQMg!S6&j4wKijOGigE{`qZZwg?_OXMU>`0Dk_d*ILN)OV(0 zuWg5ZZitY&$aQ_@l8OvE&P$kdt&T$`$NM?BO+{nU9mT_qb91J zXUB^2xLkbkTgH80q+KE6Vy4dVE&fZTs)t+(dLr9I3t#XhY~WY6yrwHyX8o$^Ps>%o zM1R|RU8}AisZ>6$taQMxrSs*2nn$iLtiCL`SH9@NN^SwE<5hjZa%S_rm|V@eBHWWP zx{@QVu$9km))J|UvxI`?Ce9RQ+?FjoaJ1;807gju{vDFtEI$8Vit%)lnTWWL4Ah7D z-0l{JgvjGJeM4fo{vTEwk5ne5wX|NG8OCS9nEhL^%~#C+uZPL2^tT&M_{=eT)a+#0 zf6(b(VuwzdTJz$%q)f2_J>e~X#jY3US-V{@txF63=lCltAK}9*BaF0^{iUTP&Av=I-#p(Ac%U>v}3v>QC5ot01M3z-H%~ zAoU%7b41t{JhifMl@&Gm@D!t>7J@{Z3%Jx325ZV&79}o<;nF*2&;5_BS@(thc=?nV zAtBYH%1H%nXagNM9N*YsFEA^lYU+!&zQI)!cv$PTrtiz=*OHyYBOl0?F<0`Oa{X3< z`y`A^bA={sb9J3Dk7uS}VbBrW6BfgIMe%==F+{_2!X*ED4jCZ#JXw)Lz3nf4M6R&U z3-CG@_~FPxg|MvI>!LgFYJM$Hv1~D#puJmtNOLUjcV9$%=Zk1Nk01LPo{Gm@bPAqK z8fcSxZ2YIa_?z_NX$+}LHQezA-&qY5`8|@FBf*kp3z}Ih zd49U8$atqVpY({I;OsS>+9qe-I`VCa;qs6i)yqv_u&x&+IoA4bT`zjex<*lOg;B|) zS+hQle%Vu|ZXvODaaM$dBl9kcPf;npPogu;mB%G(ipVD&r-Z&Q-bOZa85+kVZQQR( z?iP0b++Wv_q&ehQk~3ALmfO>BUJg@oQj-reM#Ap6booi<+*Nv}jp7$2CRwi6;!i~D zjhVyI2Pw*`MRWIQom*KUysO`J;+Wd;y|(Gyv%~%VbRdekS|Au^pogxZ;7XohNH(&Q#DwtqdG{K_pTH)o7q7T{JHQHBv)WvexQM{k+ zHF6Ga*|V~`@Y*^Xb;T=xf8=CFKdds+G~N1a8^T#K`Ri|g!>tbn;RF~N%4 zIOc7s?NDdYDYN}&Cz)!rE%;mLJm6nE__f4H)Z??ImV5%20Z@(crP?fBw#bSpH6{IC zN1jr?ajxB>XS;asB^>7ARVjIHd~KG-iDHeZk3IK92+cCO8WyRUL<1!2H@)(8wLSbH zDZqj;M{cG4JM9-=-FFws`s!X&iSs_&FSbcuYC6|e)>IyS?%Uj*qOZPf_S(^ebLr9vZuae*%bl~2&65&Q9~VAPb;MmHc@#?Wr!qug{-P=BcUxkr z_kwf#PIq;sIW-^Yt3EV6YV`>oEuld1{NNZ_S>N-wQRZiCY~0zp%sKGo5Ba{DyEBUQ z@)Pce2OgD59T{f6bgKBtQg4};`PJ)!u#wW;i|mya7mg|_2Uv(GmB?_)bgaT_CUbP^ z1+Rs|qVlp=^s1ieo@Cov$co%s+tu7^YWybBaFUmJe9)j0plJ7lufj%QA#L+8)+K8E z`o=8D8To>59$8*r`OmZTD-nWyJ7!JPEv&8mzMw*X@7~2x2cu3oo_@DFF(M^J@Wh>9 z-H%Tq%NNd=%FXX+#%4ubkDRwEG$?#yN%ohMg1_M`>uF7gG0M*s<2S2i?lr|2f7yq- zx$v(t9BRJx&z@L*c22POH={=Hla;c%D-Ri~EaUgj23km3t+> zY;mFDIKkM{i}fTCo{A(=PdVcV&8C-NYz1Gdm%_LZkc7aAnIj(OF#TF@Y7S-vr&A zKh|ihdFx-*|I2%*wc=XZG$Y~f*W#BB{j{Ig*7#|QwXUDv7TeZojdISTy|b;3S(nN9 z3rxx?$?g>tysG}|okv5sU~2s9&X9+7sr-8n9I7ZacB$MNolzi=cv7{>_^ilM<-_lf zZJg!)7fQ`GvrqkXS@%gb7ig1hrgbtBy;7l@_IHDYOd3UGg2V4L0|T9)CcI+QiM zFtewovReLraIXMs8Do)^2&3h^Re$5F+^bV!@BPdv@sTQADI?y!io534x!59|verS} zx>qV?*^`n}-@5k4z4&%1$~kYt+;|B+=Hbx2vhz(!!?T@NM{qBgv~f+#`^WQ)e=GeX zT(GYEliwbZH@Yu=HdqNLEWUqprIlck&gmeliHgce_{S#hZ$0$pPIsM$=?WVo%^8Aq z1u=gzlwz0dY?Z2Rzii=R_KNp~#lZ{yVGBmK*tSK+HEjL3^FIGAg;ncgC#YMzF;ObC zWC~?eIXJhT?*H{zdWzKk(x>yIiY8?*)U}HDzS_R!(|!l#KILln@~rAZCub-K%C?Nl z={?fcB9FSmjZ77j=~38?{w5~N!i#GwV0 zl1`;Vx}|04mJ$#_5h($cu3>0V6p(Heq&uHAey{5}?)!M(Kj3|T;lMrPFng`F_deJ8 zDZMc+kBNBm4y!v)EnkK%Fs{D;RWxW48(cjz_y+ZuT#_c6EY2#r^P_O|Uvxr|_b`cd zOXq1%yz$46F*!}B?z?Jdk(15G-YKX4w7X|_TOL%1Iac1Nj^kMN&zIr-z2zo2!Cg%t z1lx;aJP{DEo;0R)Kl;jQ@~Faj!#FWRcVH-bmi(#w64E?qx%KH(`Y@zpLg~LneN$=* zt|rQ}{Gj5-E*yXrpoAbxGj6lSk+=xKarw@eHY)CVhr+LKYQn9NUi0RRBDaP$1fQM( zdjGKI*X7iwqXoscinjIQ=#if>6vYr%HhEw|L=;sQg;4mN-LrP@=-vu@jL%Hk^#1LOO~-!*ZY<86N(MzH zZ|=WQ$y>uGM&M7RBquGkvlk3C-{ZF@Fne%DyOYaX!ogIKwd($xSaljfc-#;w ze^l67wC->sH`sm)y}y&+t%`V{PBR=Ddl{bBU@&T^ZM!<=@qtj8=Q_SMH4mF%c72x* z>hlGT!HvqN-FAa!AG7fagq|M`b_;)%wG%M+**%om3zwSqTXz|>nC`OV!%1;?D6I-? z|28H!_E7od7&u(jk@|4ul|I^Y;9%TyiD}Px#&Gdk{h=CACCTr+o4g}bECwyKOIgH6dDS&b*VK`-S&h{fY<$T zy)5V#YCR{YJ>Ku{0OjivK6eZR(p};l5h+;1$3tGM7Rd(%;6-~F!g})M2T1l~h<}vk zYd-Zs{WM%-nu%^I>SRshOi5f}&SbmrFu^X{$aYKmQQLkt7`a}zt*x;FE`2fJ9cnT1 z^kZyzY;6^t?NP}ID!ebvTMpfWMI}`_B_Q4+;{~CqvQVaHULYKQab95~VQm{~n$I#32Nzcf$#_8fYYg z0t8koq;nSu>X3i4ftHa1up$f>D>OMDhxAP-S&K06UK{viH|+VRTcK-iG>O~`~Jz%)DtND99AssM4{gfrl;POQEmwi*-^ z(S+EbhNzLa40!+ORH>D^!{SK5J@?~NlTlY9ON0I!7chWIG5~Ol1MuOF1s8%@8K3^w zB4+%GA!htDeLe%D0vfX8mpY+|l;Od?s~``0bwkNIJK0YU`$+&=>?4l5r?%)u4NGF} zwqRxbx4l` zDNrpX#aQ`NDE2@q0{TC=UIWkn;Ci;Xse6<>m11IcL5>{1XBNQK!C8h)ptU~ z9`}0qQ2bB*EfT%Y?mM6xr_%MN7m8}ll_T07SGzYb$zs1pq=fcoE8Nxdq_ z3l#+H=wzs&#Qj{nE^`~TfTm%iCUWZ6TS|4y-wh89`SF8;btQq@}2 zK09G(ZUk*j-SmoE1I)H#nVF13ABB>s&QXMgN)XrND5-L6bE}=V z0F;|Rc!wLyS`neDMRAH~{)70`cH3?zpA*#1%hiMJK_IHB1PPFaPKo?p(C`PP8Jj+V}WE7xL#m6<5(5~^gq*b?15*I*QPLN!U4F@ z5$)CRfW?&+|7UN4RCjt^h^@bNfgSe88X#BwA3y#bv%@Ebra~Bvk%B?^O=c!KuV z+pH_YjiCQHd)RZYp|^KV`?r0}OiPoA1{JA-=;jqc;o0xX>t}Ll!|(Hq$b^jy%45v= z&lby0HtoFV-r9Ey@7mUyl2JVM*!FN+3ohG;ze)9$o|7$-aBC^G&dq9&xwm=>r7J0Z zKeKLGLVi)CP&S5x$y@Y+b-^=SG4+5lnKb>mJ>~)tsr%_{BPy14=yv#0nU399tj~*D znQbm{B!?5r2_7kJRg|U*18X}SmEea&+n=Z>PsdT@sgFHvWGVRrVlyJZg^vl-A`8Fw zUM_3EplYEyW$7`FI+4=6n%a3v^1o}3KON)qWfzw*+>Ma^T>sHo8^7&whwZ~8bIngPbdHHC3{ar3 z8|UMg`s>$vUaC{;TltEQ6%C70Koy%;q<(q@D0b;7rexH{L9tgdXPnYpf4eHoTP4JB z{LvOR5w_0%5j+r&RJCh?aLJvDb%5T)PsrgiK(3DBLR8?z%=7RYjpxsEf1s9fMqX&v z7mWTmP-;C$OA^i~6ZDhi`nw}nE2A97;ZD39+1ey|@oxR`%!#{s;654Km#^k!JXHir z*?oP0F`wr1c6a>zFfGu1x?apN=Ngr*$}2`;q4<3lBdvSExGu)pLib;qpg;Rdcnm!p zcoO`B;TkI;7`qJW*+W-~Jfjjm;A}&~CJ}UYaPFrZ-Yp0=zHo=M_Xg_9m0pMpb?ws5 z>Qv;*qf?FJgHC2^Uen8b0Z*6E2yWKPXSmEi6?$DqmMjuylim;h53-=vfXb`Hy7e(k z$z=ZH!OGkQqDHu{q2c=6s`PZIOb7_X{R5;3;BLhYYB zp0VL!TfK=$oFDHUxL@1?4W52I+Z!TRT=I)=2^O=fTGDcEN3S&Qe)n>-iRntTQ^ml= zCnlOQYw6-#lKpV+itlGl5aMUo+6mulJ6LBNvd?N>*ONQ`Qqa8TRaT=PrDb5Y^YC(I zT)wEX>4qT5YrcEcXO}VV^RH07Keyvibz5SwR@OZ&hF-JvM_=_Sbmh(i-zqbFJnMAZ zZfSDd&#GRk(^=l8m(2@Ys4}V@M*aSnTbSp~uFHlz2aNS=xa-UTVLV)#iyzmv?q#uY zvj2OA-sW=P1w>(zOkO0z=%kjd!X5t$!R<9O` zO!q)PwaSk?(AV(TxGVBn>=1rz83K-ub$n>#!EPaY=J0@0E<=Jv=J{8=>443nAr@zqc8c`2fP^Bx#2ZnOrRXBv78!VHCnpqboW0cKXQ#l&6GyHbN<53z+F*o zuPjf_mgsCv`sP)e8{XZ~Xq!kVXho8<6X#l4f4?x?=@G~q!Mr!DD^2s@%>8s z{9d6q6@;MvV;k@UjBDUb14$vMPIxRVk{BS+$hhybYr^Z~cFY(PdTwIAd+D~DqO4kD zU*4a6YN8!FC6O)h$1Z5&MvTZ4&6kXPkb1@)gyR4)1JUDk=b~Hf|2?v9^8!Kys0#s| zj{oC4E|zAF)ds)tne}(T%9PA^Q?sB-FV$e6=)GNgZNRlHvTh__qgT!>XxGAm$X{E- zwBxp~J>ykWk=pe&}YB{7kYDdiZvPKT*jU0@hl^K!V# zjEiZG%V=v#kGGECXuBdd6rk&>X!T|jAs|&}C*Il5;bhHHfscr9e`CoTc>Z3ud6yti zH-Y^0dU?|;AyLfzd!*kT2>}Zy1*<6`=(!)smt65mmqZOoCgNY2L3Lp8g4skStC;Fd z5}k5sOGJ(6$KO+13nH{Pnok+3Y^sDhSES!do{5I|?TN|-{EX9Fe`gs@f4v)hW5DRr zQq`P*%;0@x)s77=iR2YI3 zYht=IgmHY-16xTST(hhqZpU&&;eN{UJb6f|Tb|J|>wSL=o-}svZ}-mCAzz}rqr={ELjy;p|vPJP=-x()BUUK5tG864QyEEG}iPHs~H0Xd?0xM z^0%?CU!Ng>f2IsJqYIn!g-QXG&k6)S*&MtpAi#qP=OoiY*dN@!(HoBovNcVEVFvbPDqA!5jPi;g(39pp6QdF^_A7 zA!`G_Ohb4rt_~YNIk*sgFS0wo+`W@?(P=2?WvbeKpRBrwwt?YJ0WlN39lc^WpTb-O zgVC6T!V`A-d(^wA4*zlYzhA$9K&Q@yEQmG#DrP_aQZ_qKAaEHPH zM6114ITy@+hN=wLU;`l76dh~iW8wcQ+}f38=et-@1RC(lv7R2ly8NF$8C0z1Rdv9x z9ZQM^CTl>YVMiaD5rt2PNMnsO-rdvLadY5biKPsQT>CqrWaAFi2&+yQ8~#YVMAxfd zo>cVEGJ=kVy{I&v{%k|-+gFQ%UV@{CQl~R+3*}5x+@}l=OoXc;R!x z+IWg--5%K5e%p9G@8ra{ZYz>z_v_=wz=-TH0~I)2A?4bpD! z3(G2@pOkxXv#S`M{I5EtNw3SO!DeCrdp+c$fErec33Ol1dmk`#thsa=c`KrsX2bX7 zyg6rxS|SDA^_JBm_;|M$6m8pBNv0~iUw(J?$(=c$yTi-8|DPV8sT zzqatiD_WOZD)V`n++hYnmq58f3kis#WkGvC{p9G~GuLor8uv|d>DP?yPC6k1ZZc1A z-5piZK2P}VC4rhb#AKC+8QgF)l|4{I&)X-RqL3Y`EJuD1H+dk(>|`9FK|SV9sC-~U>z z-wMUM(=fF5-7Sb(<1mO;{^Y0HQ{Ar*$XsplDmCBzpz8W>|2$a>E=ur(1Nt?3`4AbP zc>uzmCnT(ZD zHc|aPtz_;>o1*ZCwoN$#e}_94`7-tHs_8LnYi%tK%u@C5zKq;O#M(}Ivy%Q9X7oeS zvXJzzO=d+P8MP;)W*zWTXJscP{TfBEY{t0IA3B;(IPf|6k9cNKd_v+*jLGB z6STaAU%7V55}YFv@+sZS!Us3OX=L%6m+O2YQRbH^Uwn&C%S<1VZgw0t4X?)1UXTjB z&|Rs@X+D*C-yDoPV@!XK&h0*=mjxx)HsyaopeNc`hZe(#ew7Q*)Nrj}oVL5pEB=#_Fu_-{?hw zI~I2I-WXJ1)p}SRE>?g69Q41A0Y3?>Z9NcdsMnhSLj_29nT}+|sI)6hoey8OZ$WUhQ{{Wu1{#~s4f_wGETaX&fH z$dPejtFJ9A5{5pzR+n?1dt%~Fin0WS=hng8a`Qpp-T^IBf9yFUp#~0{ZTMwJYNlgE z)OcRcIDd0Ela6%6nhxX3D*0!)teR^dsVU~)edAx?8fWYZOq$IhQ5`Nf6vnm0`>$!$ z@G`G57RbrK3Iq-z|FZjlF$vbpQ45SDFVVn(SR zO-(0=OUpeMqc3+T{W=Eu1S@qwN}2dl7Xm+eZgN~x)iI%rE{h$Xn`b|AJ}qf)2)mHz zJGhLz+7uVBsbL+dsNSTJ^VyA?mR&c?+v!WoHjP(c@ilk9=_Y+4XMRxQw!0buBqN+t zA6$F|Sz3Rw^#fK8ur?U`{Fv!Q*ZAy}N5~TY+k^w>r};ZJcuaR#M#|&@aBWVdMrf!p*(%{D-w~ci)M=55W+slx7N5|B?t==$f$w#GNiT{ zG^$#U7y9<)kDcUBJ4QTb-pU@I`&tZrcMB%Uis?E&E-UCT)VajpI{9*~@OUiOPnAJu zSnx88+V5)k_0($w7sjZV$K?LjOD7dl|7;as*|J%=7dbX}Jbv^~q_F=EP-Bqw;$LF0 zxS&}xzp~aYKdgC>@(x9pO!i+_AMpq|Y@h-hNdWqfRWoY+lfr|BnofKIff3T#`ku9M z^=1*lwCA4p`KE8%N@f%DYnz|zCzp){ly-=(mP-l|s=$R@C5;90fMVqqLbm9Y~@w1tJ*Q;}Lxuy^T zw~J%{p!0|+kw5EO4qKZ@UDaB+wK2@4Rz0e{x;Tb+Dlesr0o}LgT=SRbNu{@NeDcFLkz{XQyUnokSxk*6jIa+jEpfj8c&_*Ulb6r~>0gXOFMJsfDNfhS zx?|+M2`Q6gQ6s^NS{p_Zc9DDo?tDDf=-H}E=vJtuP+7=UV9@ST+HrrGdC#kNaI`|^ znr+ybp~zLD)5%W7UH}?m3@7=LtHDU|Dr? zlYZ_+5yY|OzaFgcvz2E8`?Uha2B>pxLoFqFL zcr-&l{D;*(^OFz4PtI~S4pC-Of9{Uh|9O`$HE%p(mz0@%ynRQ0@P?Da&eq(yWbfcRs7>7U zc2!pP?$lo?jAw2v^M@yHOZ$5|YkN&H5hE==EW$6_)ztyiU$<)B z6LDKP5SY%oNsu7SJ|b*u69Jv_NIJYJoo-TrLTING02;A$<@Fz z)AON)!m=?gAHOCJKqatF$(x|7OsAx3K7={Za5}kg3%M7(&;Qh?!J1wJ|6d1uGSw4S zos6rMF&gOEpEbN%&+cQ{L?sn!zj-k_xU;5H$XlKIQV(Ga^TaO9*u8O-qi< zi=|THFKAi63H(>=Y4(3B>U&ub9=N;=UI{#Vl~q}6i_|B~nH!??(8nJmV@>ucv8{Et}tVD~m;2p>9e0|P7PWTRnA zWIb~IGt1Jp+jMVM(&umjGx{MsRYChM@^Y&I!0F>&wnaGBtE_K(Yu@NQuvZlz>XG&$`8ha`EeJ%9jppt)kZgL)J_U+!359YxK1>k>yU-69G1KU4k!u zapIs!mUEC`j#aC0*t0**Kr(Amx(CLDleN(Ad#fArKErFCvD)Hl&S}Z@Ju%d@)GgIi zMR2k!ej11WppyRw>`)1Te8hb2AOIGL8(GY&6$8!+JM8lLjs!S zLugp>@I+XoAP>D75|=DC1Dghh7DvWPv+g9;k;6JCl#0RZlSFlf>S`}&O~Q95s8Val z0TK!iCkLPlFY|PiBV#_Y8$FMI}I@ z2AFkZ_f;+!{&sNzkbjU2bxQ)T`Tt8KYaE#Xj*91L;I&jEDKsIl5XeAOE5d;Cjz0GW zm=(42Ijp78s$D8pICulFof-CE#FIu!%>^!q@C5(3NO0&<87TU!!27XMK5xK{5nts1 zE92jaxok_<_XEZ-Ag~$yaYT4zIrZWVFj?5b$ec5rJoOrT+)8A(F!-Y2`k=#0Z3jBS z_ORnQ8)u;6HONGmtHFR~Fw!M6B{_i#<~FDb^A-nCICjaXHOnexk5kQ{5C$)zz#0K7 z7#D^3!^isB7}@+BF$?}fXSOdezG07(R%=d0nBP-+ng*?cv(9FNH3Ge|CEh8li!2v` zBMbzU7CFEtt0Lc766=Dcadp+t13uypb}+nCjnHU_m9=^p#8^Q*6AF*BLsX}zjVO@1&%r;Icxd#?(5sU)f&ARm9EBhQXC+k`p+(*8xvKG9|SJygq4!%cX}x zkj6<^IRk{24>AQ2^d^iO`>uFbYDF*cTJE@DYPo^at88wubf~4d4tCD5XI}Acqulkn z0r)!ASmiYs7ilN>8NUQ#kI^H-Qz5*OlhTLWyyuFCGua^=o+AP~m5hh-x9F#e~UM z>Gz=;mxqriPQMy{)M5~M5)qCe#(~XrPl3@SSdf!EL}{kK4zrYy`FQ$V|yZ52+ro zs#4d6UBhb9HOZ+~=Y|xCn9)^Nc_P1+OP)MOE5=H25}!lordIBUv_0ldlVDOW=fL0s z7Y+7-|1StM;Ml;CVBQIBAmRRvg&p^}LJOK+{IJ?Zvt#r#(%S(X49IW=mrR8x-LB`$ zhvIU(qX#_WY@=boE6yiAW6f-Jaxo+N*h?LS`X~`rF@s+4>+4F9AR7F3~X+d=nm!;#F*cH?u21ja$UV( zYcz~E<%UwCBNN%gao0xUoP)7!c9hO^pH!P)I(g#-KJ~pY7w7NCI^@D3qL z{~7dg=pXT68PCwoxn)sKw@=Jk!s5t93viDTZVt&><+ z@zn(EH7mS+c`rxao>*!=J&a7Cpw9xB+)rxc@;DIZhAMKaeE#{!$hXt)2h$HcXDFoT zCtpa&>B-=vJD2v%1^a&g@65dbCR5)NyFtJA2^ZRP377t1d7(pS$iL~f!%jDk66SZF zH?{oL?-Nbt7Wt{Fxo1?cmkJ883g)+f$DpDTD-?A2BUF0R8a-z3`U-911&V|~5XyuT zow%$8f%_Eio7x0eP7crLL|)>Q-ZY3t2y^N2i5yZBxsRn$?hbhkuQJ3Ot&J@m+C8mM z>x+bg@!yiMs?!|L$*bJ;+T~tCWl}MM1 zSWn3~dTqAriGC}(PsCtt|7f#2F#5TXNPi@h)%KjXOJXj!PRA6}dw9l^b+Icg*V?!F zA>-r-(cQ*|&@FqX;+0hJK`bNr7boIUmROey!ginb)7IzsPj1VI;b|X+)AUGvRS2$T zErx1Ds}N1?E8oR=med{qo|@3F!AHT9q<^OzRb|5H3|0ZRv!d{bnJd=vlsyNtNT z{LCjSedp(iclRyMJou#-ko-FND!8~R#U-~?H$%8B{si8ky*%~Fbj1HQaz&#bivZO; z>-{Gd{q}*3X#QL>9Kes;FwxiLXYR4#UciQg&myrz0w++Cp0sj&y4tO@!R)pr>e9U-ru2cFt}W17cu9XeY8kpHV)QIk!XY`4K(+r z(LSbL^8`JUjyD5N&lv7apo*F+7}*k!Yk0uU!xbyBl8&@r0atg9Q6)4DLh8CU-WHq~ zm%D|D6sqhtV&zsD8A5u7)J>;W8Y^c0@SX7h2e4E@> z9FqKUdeD(te%QRpZFs7|T~LDM2wuc!q{=3>_@Vc1FV&b*zGpS! zRNnz`-UX|;+Ld6&XwRa!Y3MFtE%aq+j@^%QI)_Uik=F(q_&K2(oCX^E^rFx{qqyX? z2bUpYy?MU3pG*sv-$(+fa-$+i{)VUKxK8fRivOcI!s9c7&7b}a#)kA z56M1u9L$zKllmnVD>vklemzbo+^9pm*5hqawD6M!QSFJXYavf9EVrmf7L#4Zak*0O z-e=>4izLlG#cOK{r3sFvEHf5^RoUapMw792pPXNWJH*l8q7=gw?&!$ZhLP7MOt?tE z>4_B14OQR{LgRVC+(d;Mh@Q~c$Drh%L(Mt*;WBM7d*cGsC zP#x+R7ss2Wzz6o>6;E&Y?@-+L3Qyk%bJ zv$>Dr&Bw^iFPc?cXu6Ipy)(PZf zox(>N8k4DnsyGNKZ$=@zO}d*+Fd82W3sx5VN#Cegp&@*`Kqh#=!^>re?)tnnY(Bx6VK7*=;Yt%Kk)T*t))d{unlAv0w~ zdS@Ydsg%;QbL}un;5?Svmm$ig8z#<+WTU_C>8LZ;Uqi$+7U=L@^?_v2J?Q)~Qy5uovXEh9jqu41iyr-CsWRxMKbRHX7MV>R;@ zW=w6nb8d6~y|EqokW_TdY%pk^bF&F#wjEs&#JGs%^-xX^Erp&D6>WVsy}U^Ks4BHG z%#|}o^&2GtqLcQXY?h}!OUBRe`Dr+p>K5cEOnGU`A}+r{c-kNaQx@sEw_kRc8$suL z3HzCaP)(4}Tz5OUb#Y6~nupznBil|>^&qPElKqq$K)uX68JC=8 zwBPnNh?^x|G^a15BS+x|)mr(8 z_GGay*@|KYZyst*g~=hGQd`2>S}22fv%XvQPg-b<14#+D_(j z%M;w6)Y**+o#LQ|unTWjM-rA;rgo73XRiUXN&;&eBhsNR@b4S^a@Gbrf(d_UuL0 zdVFq?vXtsfnTnf*LcIIgea+-DbY`TZbCXOWv=5f?3a4^I8kt9o=Pr4gt`^)2^5hck zI2^qSJqdY#dSHh5HiS_!JM#Q~_sA*&CkpjNF6o5&#bj{VZDZdU9@Ee00?|xQnIr8) zxsw1@E$QSXUz3}_?8Hdqc`iRY4P2y=v?{YD=e&c@o9dmPQ zE~#bCmupVSkMflKQ({#j>GW=zjpTXLnnjb5jTckL^NyCIQcjX z;oxve!8mqJ&v})asig4k1-Mkp61~ffRndfFx*yjvGPfMUE>Dk5mDb^U_0j3y+1(s7f9 zI+Gz6UDA@tAyL;BInZHhW7detu#V#C1IbVeNt9c@H*=uYP0h-$cOmrZ#Da?Sis&(V z;J@e;m+sh|o<=a6o}Y|6#?}W9_ak*q&p_6dfsD_LUy5w>z;un|bp^Yi^FBUj(j%sO zaN5*l#}5L=D)m2cwT*CyX}q7Z!AB~l&nmV&CkHQ`1G~$N8cj<}*kQE_)p5~K;1?Vp zhf`e>h7YNRbJlv&j%c6V=w%EM*AY7^Wi=>QWmhr7cnWiT{w)1wOfwncuUhHF^Vdww zljD|CYvHIapT05Xn}AGTKyJ|UqDoGFGvuEZVvr%rV94wzv}Rh*Bm4fG++#psyQM^K zmDrD%jjHj0meV?#~+ZpeivksYY zAg|AatG+o0q$U;d%;@#pgqh@C))HOq3Bu%h9PWWhge--8O2d(_pw&DhzudwUqxbON zcV{(Sk~Lc`c^;=(lLE{m#6+7aS8^45aa|)X4RSg^tkRf>Pz%x^!|f0%pmX-_r>6lc zHY47S9veUmEa1685O9aMHwb500!e%Jf5zT8gQbHt&4q(Di1jm>+>wkqxmap}wzSe` zCYqot*xhEO2bvqWN(JnV!V60=p1U=7zBL-KuGn>U5@9b{zt<(<=mL8wWnoh0&o3@~ zE@AnF^7(rdlQ{)%t#DJ@!`g+4;LPV;zZnl_h_XNSdgS>mAMSfT<0E2#rW)-|v!DB; z=dum`qhkuqB1Iun6Y!nF6hARm(n)U8Mgk9EcbEYjf;-<#ygJ?W zuyOd++$qcIKw+T*^?iM9=14VLU@{~_ioxN5f9}h6#kB>jZFA-5n$=Sqx=$T6??y$E zQ*rc5x=ozO)(%Nq`}_qo7pHj&?G*Im~f1N+N+P z{Au=G|K5Ry#3F=mMr+$n5g%=r*c{FijSE=DwoyK@) zh19wEC*0@GrHtH)0@M=QTfMp?RRIN|6Cm$?893G2f%q#xi;78yd9&i%1D9sNIp_zj zhFZW)4%89qH8ptN_3A_!f86DcKOKF&!;!uQWgq24HWvudYYlOH&U`u#g_3?e=*)e* z^%e(ho1T&F^LOOa<&RJMOkcabw6mpk(|$==lPz&I?B=htEcdm@qg5}|C2?Sigqma= zO5$08SLe8I972E0S&N+77MqYRb&d`BL zVh20XEo0YD7pkvk4)I$$l`eOu;xP{UFMmEPxk(Ky9y8NaD!=w%Za3IX$C~qTfv#XC zkrFr6Gb5>RyImB#x}%u@_WogCvD*0|2V?Q`1Jf}a&ar+!?d^Tco|iYWhYYa`O7e1XC_vB_O-55zz%da`G6EmI_rz* z<3|)yb|MA-#~}q~(*%kb=$puedr}t;fgc3KWo(=}1 zdM|7Em&TdZyiR!Z`Z0P$6zd|bS9qFI>q--ki5mRp9_KlZITEi)`8!0}EZ>d9|jWZ8as$I=N!5(d>S?-6+^%NcqB=O_xi_e5uEw zV6A5idDU_8_&%a0Pf2xcF={`rS)##1olcP6pV_i6ZTjhV0gwmk&T{zQpfr+d$QvgBVco}hYty-Vw?959}eF_ zl&Tc0VGTn;Ci|BPLjjOQ!iPpynYREBO+t{);IO;g2O`XrAfU*JbH#~GzbU?!%${V+ zJ#*_Jcb1=sj@-7W6N(<~StoUxI^}l_N6CM9vCMU$cg?hOn!L4rT>O;RVQxaLwp>Gu z+9X;iyTg^>NL1?6YBwTdMZCcm~r-jJ1!yuQuJrOkfaIo%>x4R}b zE4XTz1}0S%fi>MB{UbPNtJ`hFYTS-2+ggZ?I9x60>7r{g$>DAD<(B_juIuPn3aprn ze=3R&a1T7T5KIy<7tHr?+6NCe-eha=@NUCA>(`UEQKj+IZ_wo~@+bWzh*WJRpy4qf z?&7K$r#laUPjt{Ik$%KtX~Q#BLE7(HN;d$YXayW{>Zkr$P{Lknkt%-zIC?|P-O zF0z@%T>&H*C(V7T#f znf0c`%p!Tlkc4*hu7x9unJGbgL|Hq(52BzW(_Xxd6pR>Gr-R<_{EjeHOZ|$cDbdb@ zuWF`5Jlu0k>eV4^dJdON#F24A$r;_K^-D~Iqh)15i_z}Bh2-X)@w%5TI>RzHIy|2 zTF>thEJXn?M;W-O_ zCh{i5kMug^?RK*;dX;|lc5+H2uZHpcH(&1oc&PdLHPR@s*(KvnvCcuS#zFR^C#tqZH{x&@khEt~U?!Y=mU}J#%sGwcQLOxt^jb$M6GR{OaT$&ZuM~s&#9;mSlAk&V0vbH9r@<3nnWzixgw>BKH0tGiM!60p;1fr|hFGEf;q4Vts(P6zw}Vj@ zSC`_1ZWqMSmm4NDhlLo{riR^&mL!KcygQO>C_JO4L8tvv-^`+SL|xHUXu(+{b=9}q zV@z3Ie{$O96Q5All+T?yUlvvNO|dNY?BfgMyKoc?8Q4S|?Z3WQ z;Fa1L&i%Mt#%}CZN4ed{B-f92qI~^HcLE?h*zMQbe&Z^9|=NDQA%b;$hX`G&V}O?d5O2l{JEBR`n^kY z0{C6bT8Wl=CMxB?b-Dg{MknTBD5fY^zfD!%9q7?0Po;tm;Fsgbj!(ww+MqpqSH|71 zI#{f}G2?Qnut{@$gKf4Rc+lMb(?Qfwh%CAL0FHr#1AQAZJUIjM&%)GK38QKHIhnRl zOja2;60sc1@QCj7DYDr_=ks*?OEFa;YZdC19h;o1+?;N6b|Wux^ARdi_u@>)`}`u# zE#!0$60zWu9STw|owojZ#I|Em8#d!S*bnt4q4$5Iq6U`JxrTVGD>{~MeZDV-g^e;f z^$jV>s}HfsAXXZLSI_c;+4QCrRdhR4p=^W*Qt;gY=~(a?yP+!>g&D?E}Jp-hxYkk<@N zcMA37HM9U`2nGJkXKqsX&dL8CkH*8dKujGr+X3V%a3;wf(#ZzwgXki&f;B$#=4_A> zkqd(RfCX~1nI8Ph?R5H!qKlKB(_GI(9@8D?QbSGq>?wy3;#cX5q^GCXVl#u(zHTWpn)>A&Fp{zvt6v}ts)hl_e=qGUU>Ryv5A^+C8Pf$=A{<;};ZOUkVm||5D79h&b zU|M9eS*LktD|F)MXTg{?t_uIR$x*e80ZGfMIqF!t`xs=ry~sD^Cso-1k`u?Kn2;mk z`n2lwW_7L(f3g5A$++cL4i}p@E`iCT7sT-bwp&U0I<+_{D=BxqUK}rbtOX)aRbK-0qga+pA>r>3wvEOt`p;Mv37k@n*>&o+W;-`xKI@B4kPti2qnULr6s%V!J z<^VGv-q25{0w3J!nG$$X_=Mx`iZCzt{l2nHU`n))5NBr~qflz@Mg#Q~9~agyV3y4$ zUiwaobtjLmQ{hN4+I;`-x9B%iHf*mWsaPRuVOU-7OaCuM=+H0c^8&tm2|BJSS2A4? zHHfk>%@?_>m?k#=uFoGNVNP+c6rj91?2~KDOGd2t-J!Y3n(B6^hb+iBIjv^Bw%OaS zY;ASRpb&(fzodoaKJT>8S=Oh+aoXB}MCzO`v?$j4uXUd?7?Fgw`<-<%y1&`BrYP0! zo9F5iM1L%;U%O(cZVE!y01fwRbN~oLj7%Vw&>|0 zI7mW#gmW@VOF}oxnr*8|?kqomr|E(Evak=^Ep`i;e49ks!qUnn&(219O%1WsS_RH> z1IzXo>v|12J54OxT`@$S+g2>azFqN8f1s{IISn*Fb-be8T$KoI&KagET&T_;zefxy z)@Ehr{3YZna5#5p(i(hG^>Kb=%42>xRf zIBHsgpqeC8Uuhz(mi%D;GwLQ31d$sSN0Pqi%rCblV=u00TNT`3wbjL?=K%KSfL(ya zG9G4twi5`@ONW7I(%TnjM{C9L{EHw-u+;VIE47W*vrTNWO*#mIKt(m-kBU<}oSzx!%MZB1x+{$)GSeHvvA}*cmje2HQ2bPq9QO!YS z{}9@;i!i74Jc}^gX8XN`? zOMqo;+=iy&6ea6BI=+nSJ}$ZZK85x{{-+0w-Q&6vd*6+X~`rn z_-B|5KG_&0(o6XHtV!x)}ybjD;jy)D?ZSuZysshAn> zPdSUWbI9*k&J9hHZKHc5Wi7nRSE4Np|F=>y>qr2{;E%J&e^J{yrFup0P5Jdf{~FnO zDZkM{^fJ?~<7#JX>+{x{=Arqmm$+;nJ?7Ot3|t3N>Nd0nOjm|AhaNDhISvaSX%5|Z zzB;VgbDfs>8RU8Ys{4<<>G7@50xuPn(ZN3#ZQcJ5aep2N)f@hg!`V&5G$czh7;E-r zB>Q9;yX+*}Si;DbEwT=gv5kG-DJi>>EZKKSWnUsxLY6Gqo?GwF_w#(8f1W>oKYw7( zndQtm*SYWOy6)F%HDyo0|4yQ%tARPW9mb&omv2Q9k-!_6BbyA$8<{*rL#rk(Y_ zGC$+UtZ?|FFA&qwf)GknNkmU{hur6cL@3^XY>C1+@+n`L<+wiaUD%-D@!X`_tQj>4 zC@}o6D<2%-BT)O~aY`lik5KzU6~#bh6jBvU6wL)-TGUa&s%TQ=4L2{|*V;Fud}f{f zx8s8gYVHcU$)56*?$2a)RI-k+o1xgF#70#MjYKt>8kTt*%ukGk-hI>YIsFs*@L?nu zF?UP?dN5;;c}Uy)p=rQ{b+Qb2lyE1KAi{xwuvG&PP4E*OB0&*FJgQokh$G@#FnzzU zzULqkldr7gKH z@`7iv^F;2ohMnbWLHjqa`#tidne^l`?2pQDN26ujI$yU)rn}wqA=%$(xI*DJ!;+$* zto-@6wpr_m_wnHzMTSSO$X{Cx_51~Y*}W%g{^f5ZF>w<)8|rXXb5f`vP~7rtw0O{% zT5}Dw!U3M`oX)||&u=R5Kb}m1Obq}hrvc+f*=^@-E^hDWtiD~1!Fqpy9PjoVi5EZS zoTib97awkk#L%X9y6~`$6a>T<`jY7Z!@CeO0$wP$F;zLQ^(MC#a2 zM#u?I4)l6@qXPUgcRl$-i`q*#%_4fxk!NtM_Mst*U&FaKj)LC~Yb!P_RfX%J3a>M-=jWC;iY z*cAe2_YARVbe#xLUb)nuRM==Ev@sRubI--eh_B9_BRJ!j*du0$$^3!}Ct2p&)dc&* z63Gvrs4XRuqQ@M?S98+*7aBy57t~CCFA^uE{JejEkP?Qp=1g^nLH-{HudMsE>Hi6& z0N5Tm@OUMK0F5V$!&a6+h&pL~AwROL4NeLnd<-AImAL4Hn*PScysgkl&@UnS?}wAt_V>s`Y?F3 z8KLoUV(^#$A443hgpzO|5SOSo7V4A2?QrE& zU2v!u?R1Xl^Qa6yO;rA;WBGOGw*(afZcujMI(Y^cKd+W07``IY;C(@9`&T@E>l0nf z#MZ~ey4O{)*lfe3``4v%{CQhXyi~`hLRd2t0=TOWgLDqwTRqb&o|p-pdj8sD`QFj* zffMqCQjV!QLYsh!n7ukX*Kc5Vr4*CNPk^KJm9!~wPZbx$8I`FZHdyHI?R#mzdomtR z{=hw+tTK5Tf?BwZdYWuz4bh1F8HAs55>}0q$y@7|8yFv-&7DfnW8i&ZxASsu<;@a> zh^-$RqM$CUCP*f`tAmsI$5gX8?A_VK6}&(4_s~*M@0XJoe3}NSA^r=#GmpqwxpEEi?q}KnPWOZEel0mlr#Di?z zNI`n#FLhD<>+wseMGa-`fYh+Dw%&E+b?k!NTT%CA9qVw?C@^q@xT0Xs0(RJSPJd*` z&fZMVV?82?XuwnWl3JYU(Eezmk!>V5OfWli5EY7~k)AOIC% z_0FS_)5w!ne;Nas`XUbI9VZ`EWB!Gn;boUBi;#oBi;zD%jXVgx~D|V=B;<=pU^`mJ+gZk%quGn~M zNAv6X-cF(>ueqoeQ>Y;I1k*Ft#}pOnmA)*K?k__h-XD)mF4Nc%&y(*AU|ZV zvodO7p!8lf3VMNuddA(id!|>y5t0ez3X6_X6iOQqoY(i% z6nC}l9Omu9S+d}59s9NL`3M!_Y04z&1jG(gz{=#z)>MF@_qz7{Fl##U)Mw*vdd*qB zH4R$u^ubTh&x^hI*1Vs3{X}p`-FDfeE^>;_VT%;b=uF!{DB}ZR-2{5QH*9^;9%^CGysnyN#R) zcd(gVcir|@fA&0By3uUf-$cu*mgmY=TEM5D%Fdr*LEWcB7PcjK_Qt z3Nry#k-jCLS!gYLrC*OYy!P_3NAL6ZgDJ3>J~@uTrYYyT-;Zb}4_})K z6et?EhWvaiY?(Ill1t2-lQvJ z7;ETjP$}e()AUr2s@{I4O-=qU1@=!R+->hJOmUtXedQ&Yfp@i)02R17fc@Pmy`TNC zV5ZhC0C zPDfFsE27i3I|Pk(vSAO^royB`t^0AES2;u9BMm=)aQt3+?cHSj!IsX8#1t`l;)@~L zQ!aEm2cNm?%3l;s^S`Ju-%rdA+$F-csM5kYV>o!>YPQrB^*zxRJKke0HH68{OV%f> zub0;X)|KP?(Wy$5C?q6-S0-|R+Rje0=*w`by&jxi>sW2OQ&5VbpF&v{eA;UerAX>5$^7U8M0J-5*Cp_#D3?x$s^xLYA{b8FT z686jK!ozXEn5G)n#$@PSs+q5%$dNX%oEqRs<>?ACMlpuL(~!eUWN-J^HB!K$^Z`8! z2`X75Rw9i99tQ8mWoBM%1H_;#231(BSE-1-kLv2&$q%C}+t7p7KA>UAdxeEJ!nvHj z8VGh8cX!^my9`VG9NdQWEmIS;>*CPRM?tL>t&_|U#2Ccr8*7^CdsoXv(P*GQSt$bl zg&yPpL45(nIm@<}#IJ9>er0;2ogu5tIGS|cJQ!z9G?9uiFs6Dr!VIqU+Q;aGi zf%Kg8!u#T$?1&fzd~qlb1SpCflJL#ib-qZk;jNV5Jg8cU3i8RexM zMb+thn?zFo?6-|$GLx{%BvywdDBmy|^)6`H1bSG zANZ^R%HRJZev?iT#N^rpeRNc)Cr?F`q`dsqVpmg(e4?tQDlI#KJX z^nXWrYC`InH=+ug=&VqFo_zVda}t~Z*kjRV(E!dm1(<(lS0}rZGb#*=4g0H{Y_O>$ z-AH>M#Eq2R!s<(m=WP)u8(ZT-(8mEEbf^YCL=AYqg91@0gtMdq?O@=*v?KiQNvQyF zW`<8^KqCL0s6@h%R)Z2TivXcc5%tfhdjOb~Xhzus!s>)|Vlf$P3ZPvZ4kg%`?xK$? zlayJ&wp5^qeE1PjMMPqoL7E;MM~Xy)e&|auhm*_OCfv6HsCfoK;kavk)EB)N14gB@ zMOT1)Tp+QX1c2%Dogl@UydUH_XC%9$b9tJ+mij;8Qh+tHJ`Jvl<-6PI z3hn<>R-em+5}{xh|99*E7To81&b36rYHdFPqt@1`vbnW; zBK7-Vt+o#LgN)=W3!d11EzZKtloe!$fyoRrMh~@P*702>Uen2{N+N3H+94ZWuf-ir^fD zXPt+`%L#qYJO>O!nvlZb#BTpL@0IPYN^7B0Oy1TkCm800&b43V-vi3ie^2P{FcJHk zhIuysjlN~PNfAma9}n(XS}Mg+PJenFH#mMGEO!TLJ8=h9M>N1xpI=!?o|WT-BTkmz)U z6GzW2=Pvyu=ak2%`P(g;`3l-jYE;-f+Xz=#j?NO2>16m;f>Am94RRDzvl?`7h+wu( zfD|2PSAs9rvwlzY+M|DKb!YI`gI__PCbJtIf@^G}6X@X~z}WWu?!IE6v0)$pRIoTj zwWBwWGpM>}+CSA%$h@-bs`Z`IdF-WJm~uglj^Dtd!n#ChP1JT)9ygdkD&Gg2xT$J^ z<{S3Q9=$r-F7w&N{loZp$=BsHzXIvouo!9PYkeP?A6>ep+!`0ks7<*ToQ0So{n+nZ z&QFC7xnU~dFHrXQ2y3}M7Bj3~{NO$6X`;PBXn8;SNNL)0rdmy`!i$t6iS0m8Eq9Ni z#^|lV4{AC%Qp_<(oMi9hiZ9z_^o`+T_SRsokFULekvlcz9S1y0!&oXNQYT#cYvJ8P zU}&X63F#ClO3y$DiX3J%y{YuL@Z=H`N(PX=Qr*$&W2Dp(%AcCIq~of3=d%w2tlrB5Jx3K#+1mX@n8 zV!!uZwF&Qhf(H=bS{T3Khu>drX9rFl9(((!{WWPFm>stm>|VRq`O4+XM~gx96-pSn z^1qQ*8O$A6YT&bDsPUf7z2m!hH_|fn_lE}Wy%f5!;G)) zmI)_|T~odRnPh}QT?_R;{*`Jx*cE?s6mjd;zJyfvTLqIVv7NBU;=-^x(-D~~kEOrA zlern(be$ffYL7mMuN6fR%fNv0uky9nA`g5gw4m_n?QyFlr%LUG`qy2zrt!sY^}H&a z@~WY2#HV{tj{GF=C3W*6NKggQk#AEbSDz?2*yUZ+y25sRcv00#JWlAb3DF9`jVZ3J z5B!*CRd-j#=fnH2i4#zgZgak{tFohtb-YQ`Q3%0=;=1&{lh?AU^RBcGXOG7VGHZxq zQpDJ=_%Ba7`kj7m`E?XC``zHqLhVEdsi-X%VrcAe{czQ5wKy)&JNyve^n?7VcPv07 zek|u-oS~_xb(Wd)|9bsZ-Ulr&dP?OCy(kGm4W@U8NNkI-TUacF64Otb&M2O2{NZ@7 z2xRWnGdBw|i+U{jgXD4-gK1773UY^bZ!H3mcXwYDC#wKPi59S?Kc6YP5(zFC430F8 z$rx3Bc_cL`4V?~&?Era?+$@|?mb!2@cYRTQ&uOGdPwcyZH zuByiI(!p*zydRh zKI<#%WhQk>km1;2*+B*dRNBW>&+TZpBGjXh`f&9Fy-N|+X#MgV#G#5kDdWotR+d_? zllGQ&pBr6!^kouj(czfh$%pCLHgyf1;t%IUqZ0+z2F+Pq`+8d-30uF55^YbIf4yDT z(96E0ObF_j3`|N4OwA46RNS`XBoHN;6-$T&%?!;P_tM`=o?Dsg`~2|w!NpdYB?hH<7=<3xNqFB1?YHXl2(A0BVbNE8qr>)cG^Y?a6DRSa`EwvPDf zzQb|S#AkbdG5hsKRZtYWhr5oy0^3+zAAcyrU6m z0$tEPZ0+&U)ohPXxw{p1lML_LGp@?@-R&}xUc}K&zS0e~<-4tzOc~vVDvXUq^k0j; z4YvlC11Mq^L<=LRAJTXB)f(5g`V5U264n?MUWAn%(l!3^l^TsWl)!CZTYBOiK7XLA z|0q{#&e`_lGaZ%=(f=z7u~-L@9XD0k)Oj&hWUNPgv7JF*6>~ydQ$aH5pG(oLaC=r& zt=dVqLzdJ0=C;2W2{|Vm#u~ys=jS8P+VV@?_{UiI-aY5%0sHnr!LwdKO8oii>}%t~ zlSk9FL$~Do-HyX&q*|gabJqN~s*es__&`2NPrT#U(&aEKWnWqOKrz~I{mM&P!S z272Ko&#PreN4&$Y>70XZ4@Zw-Ut~$CVX?CHpPabmiwhqNf`&%t^LmcT&az36R!l@@ z&v67C+y+Q^oF_L&!f7?xpsWHANrd{r8%9o`2N8=ny$sTE7A}aoMK1{^ZuygDPa@6n zt$_7++?y>Tx#}uOq<0+DILON7vZ|%B2P!vmhIQ0(y8ot#A57QAxI>jVZa92;xYkqt zVy`$s1w}xO9nFaTy*d0gNR}nYQ6la5p~=)16GQX+h@QuJ^Y1?8&{e+6+sLoc^{|0Sv6Clxp%_Wob^;=;%uBZJ)KoP}Cwa((Ap zhGQ)bH-_JSwP?6*s#(nk`=mVU61fjv9fdid-msvtw{K~tubOl6P%d7yX5EKw@8 z18Pad*0{&Q10MacSDDtmnGC;=*@jmS#vT+(_-X&u$rzGxlYjrxcbNOROSk$3d~*KH zSiXY9zkIsxJ2|xw@1dKJC?v;6#v5jjJB{(zW+Kv6l1ZbOx_B=-UHr4TRkk*~^ogp{ z(R^8tMrQe1+-$&Oe$7~kL}>EpCxr3Yl!t}UouNBrmYtCKLxvHypldz9WS*YRI>S?W z9XPaM2vEyKpC@=HX&Pp6=V>)q^y1b^Z~OGzfNyQSRiWbvZP_3Y>yAap$GeI!R$EW` zJ$QS76>9#&#ecMqs=dC%a}>{&B+4cR#c>D{JK0~63o!cq?K98Lg1rhpK^e{AU2D_P zth@A7biS}@s6t)WV<~;~`0sEl?2+3b^T|_L_oY~gWGzZiKXU7tK{s0-DwxclG2C#i zr?BZ?nh|TvEmYBKGgI|W`#ibr!ZLaVLj|d-);8OjQJ?XjG?JZ{jS3I?Eg0$Zq7w;C zIIu-1XQfD;(7c|lqg5{;tc(Ybv^>dC`TTa;tJ{gE##t<{+cY2JYcN`Q)oA_VJ6R|4 zsaGs7JD-sDryu{C=k=~A-i$KhGnIhoPxV5L+W5Eo#p8FfTZg}{RpKv;@v3i43yW{O z-}gwhksrp@5#Iiws(xFAyAY}=Ar&(fmveu-g?VZx(Ptf&$&!Tzoi>p}W}$%m+}OS8 zP}lJdopNd(h;1|?s=~A|IYZ<9@oI37Xpe=)PH)lSXFkq18v$j%XYP)8&dVi1Vz~rD zW9bvt(lZ>A=Yrw_HgmP^^V>j1x%F(7e)T?kuvXQVKRls0=#J(kP5*oRc;>ii-t(ln za?JNz3tsxP?AKdkHFG1wJAEI?9|Y6;zN)5K&GBZJvfRC$8yx7^va?PyVgKaP_soy& zK&Jg)2>5E6#i2RCvN(f)X&ZprGfF+UChjnpU*R_2f^AxFxaR*YvCeHi_k0EYR1{;5 z3(0c$eK1y8I~BC*p*QkE`fKF=iMa93CBdBtC)V7kjzAz+vgN)(V0q-(D`>C)ZVm#P{6~pZDmE)>Ea#rFSXo zB}Py&>lvv%qBUck^UD?$mJQ)jL=^O9@2`xx#=41r2T}3)@{JGu-BHT6QwCD*AGxIN z;5nEYAdZ{T^w+@n)&hl$wwLNnN6*#g@CMlb(j0ViF23h2^LKAeQEJMD1ZHl3?~$?3 zx8~NC-Wj$EZ5});rJXVt?q+OHo+bK-=49gj`gKz#9I1$XgZf3X1z{TjAbY3DHRE&X#kVALqlmM@`nfe{eVl=0*$dc~xl_U^{Z(a49f&mW1h`1%v9 zhAvikwQX6Pjtv1BopclFpx^uHwMW$!{{1V~iUQ&9^Wi8;k+mzYn*Z`Yc=spB@+d!J z>N<&;|H1`ktLCH|xlXF;ih<^XVjnZ(9-5V~k(lHS6{mH3c8>;s4GjSLYOFqXJujt- zeVa&u=F`7+TJZDa<*0w;!NGJ<3-8ZH57(zsHfEa)j7>~>j7;vSO!Adwqwqk#eQ^g} zn4(?w*>|yKdc5G1KNrKvsX6oW{LM#JHc6Msn>&1brcu0J?&q81EZUlnRVUI%nMJ0OsZkn~%3>4*k?5F~6S~~p?rfh!T2t-( zV#PxAiXt<&=*mLgZ>@qz!#XJF+tgGS>{ks-|uc;fB1hp7bD@qKpRqado zDcCJ9lGxpy{IsqY_r%J2xNVM_?L&;dD8c7mPVBUa`$-*zpT}M(c9N_xHVO^VdYoIP zkgoeA=%~ih7cQ>kAPPwO=#IO(zk4}zCVmhu{m9IOaimmTa=Mb@bb;U0T*J&eA^~sO zz$jiL&>?CI+>1#q+9NiwjU#6t-p!T&`l#?>!nClw9GGUQC#$3StELSMCTWOLZn*W2 zI>vPt+lj{*eo~&xJ-A>pD*};BhF@l+423$1)E6qxc2YEMclY7`!VrbAly(w!pQ-2E z@2Xzf3?)sv{uYPPY08Y=9Om9-?yD}^zdd3#9P!#}*lLqOHEP7RLh*S)-1~s*10_9w z7B@79SB9%wmw!C5DqM`5uR4no>b$RrKF`fJS`GU>5d&fbgiSjRf@hJ6dv&jgP|8=L zA6+A%{bQ>B#!`1IX8fM7{X~_G9l$S^242654tXC*BWFU)u_>9FkpHQU^1Cu0iursqh1du zmufFO9n}@o$(-j}AOqcIqX+8*o-7;$r@Ml0*{TfSy-Du_DJ;Q;y;* zpCncAB5XVeOxdTpO>|~W@}8s-Zz}JVM^%$PPpW4F zGPUj{L9r(V@d?n0Dk4UL75n)oBFNqrcSk~GR)pA_0F9; z@9|9H=|J-qOz%C&vnV^PA_`e;h%3IJ9y+xsYx!nNb~v~&Q)P&o@)uhFnZuq-?epQx zgXy7FkJF^j0?tS!YejZ;32lr9`3XXc3KB&xo=BcZ`qi{pbf7mo@iL_{2LuwEjMa+n z)>j2TaA-6F;atoZixAOF;-$0B(lfYy33S~@yU&*o@okBCTp074vpKcH{PC5*`Vmvh z^=kQ^UlLJPK!R88nt6wPt9-@~#Y5}wUt~V6zN0!kDxx)bePa3PEn3tt5vjYFxY{k= z^vIw^yj-Ch&7msKp;TR+(e8ZL^Pu|3y)6;L*t}$npY#^#jN&inlk>RpU%E{+A6)w`fo}il^XD(7>B`@T;Uk^mpF4Q#;u)%%tm!`sWjdnRnYDHxg1bj$Me& zqAh{WBtWbaFko;o z0-h(`op>twSIvTXcq8u?j_ul(X7}tdWfohtq~NTjPYL8 zr|5;Cwb~w^yIwtwO9y|7c((p{i*Gwic`ThAc1N?R=ET>2E8+38PPuo`t=_a%o@++o zIXED^vs>%C?e0w{Uo{M8rgz?b*c?yN@`#t^Ql;Lex@jSStW;r(O6TOO7U-IPcKPP& z;yE#{Yu7%nYdsS&@33@9Xa%$BMlrZZR-0a-XlC6;E@KnECe3HnRvSOt&oz>Yj+QS> zgQsTl(hA+lI|vBcUTR|BVqi}-6?0?0d##>%+O3gBTjyJ3eu$$&r*F$KNw@E~`%4`F z{Ki+4n5idc%C}Xo289dW;(%~ck^TcZ7yNED?G6A8iewn38*c+9(&dku!X-sT;hv3J zx9iRAhqI-DQd$rgl_O8@IB!Kbf#kgZjI%2U`kyyJp^d(v9BE(wFg5%7!} zmz4r-Yx6w6mW)@OS+dlu6q&fc*EX2^s##Vu_MHgf35TDC;#7pgIoBS%5ffz1kv*8u ztWs(V331j)zB~T)c2-bAQ{`Vs>*>t!FR7WE4u<43_J7@kzTwA$G^Um2SIRf9_4hi2 zdOCk*$4dLK`Iy%avS>T`<0{8X>FDoMW}y9bc9=1T{b_99s)g^h`8($H{Y}g5OW#wL z+brezQxvSJAl61n#!f7;kNMuKeba6PbI_fbm2XZ{azQ=+!KqJ=oYr3Xud3<45+pPz zf$&&cM3g1hw`=Neka?@!3jJd#?<1#3=~n2)oT@fTi!!fjkC)x}t2|r! zxZG0nK26XrjvnUeVBPkXK|Ztu6JT{U3dME;?40d zH_zcAx=HIiVXtGGqZ&`T$G8O8ALlDgI0L}1P^!-b?ojfoq(E5c%bc3Wad^@jw_ff# z8#pv9fm7Q|c~^sbv#%O=S8AzA%2lNkfgd1B>`mg86kLg4&Fc_;d?737`$?V8I9e2H zN*?N!dQmkhQm7S&msfXRWC+AEo*S~+( zdO$hS4#*_~#p+4-86}oy(62rp7{mX9MJjVY~5^)4Ay=_@+ z&3-ENjc~x_>t%-5XCl zkJ*L3gis!y2N^BJvfXyMuWe^#PY9>O<%nF2ixz zNiT1ua_*mAQaf9eZSm}$|K7N1{vc28=}7RVGmV_JOJrI>CW$CKBUqy}KK2UKns%v8 zT*xlZ^TrisycdS43`gXxZ8Jk=wUnmYFjh(EO(J3sO}c|m?$RG@=U+q9r%v|SgA}+^3H~L$) zG9qdj)2ngCR!b}37g9&z$0K>MZ#p^?L076oFQLS!%8qlGoVey*n+F%hIzeFrDlj;L zvGGvtU^}uD8_uDm3T8esN}KG}Z!~sXcd|}pb#-&qbv3C~Dr^GW~g! z1LaV%&XPxp-q>2i1^88Y8T}RZ3tbaBBpVsxt3D%tar-fIsv>blvZwxBdt6Umn-Xns z>VWXuki@3I+%@5|i+5jsA%CtTc$Hnb4an9SaEy5U!r4q5fo7pjQuZ@cbL6X zdP#G<9Ezaqpb{x;#*n_iV~buUqse7>eDj~z$5!2Erk(ZX)E#ue{0=cLln;!je6;G2-jB3)uJwZ&!@)DnIW$e9r@@bIlDC;nusSTOIhPpgfT31lzrbash;9^ zi9>x0wQlE3j^N82|Kykkq!3MXGr-VQ_y5i_oec`Cyh(~SxZ38>@g8y)EpQb`I|I?x zB6w9b-jz8U_6NaV0vim7%L+a*5W2O=&uvIiv-7oV$I9vmdSZFN%5#0+^}*XcYMS6v z2+h$h&!pq8Qfj_XuQBUr!%8vhoScKHt5beKN-3vBNSoI=3cU*ikFxg=qpAD+_5$e# zyuLGjTqX()+-VkvWWxui*f{AuY~0Z`R^UoeQ;oSeBMC%CpI>)%&SP9Gz>n@v zE{-fk;P*D&h`x{tK|9Qsda`7l(cBWNG7qy@tVS2+q${#y) znnl}%Y@gVzzJ!FI8^!{)P~u9>+Opp$OUGwkcI;W-LImiIZT}dFt;p|EylVZa3wQ&M z?CP)UUD(>gYQYCqchZ`I-;V?-M0UY6?!v$xAH*_Vco-PtK~?j)Lyf`b;~q7_Yfy z^VijBfBPvO@3=v@bur|9RI1X6ldBn9mi*JujV?`eL3Cg{#FYK{v@xQ9!CX z*)ItSTIMyB!e{&5#|wpPjhmIaqK`!@s+U#||BlDomDQ6M8S*)4G4!7g{E{ zYtb%!^^C9udU>~LWut}Prgyx)P90T|eA%MJlD2q;ms}Y!(3!k-HUt!bdhWG;4WKnL z!=!Z_45{ROBY8nvK$bLa^La?Vi?;G!mS(U!GVS!|#g?N_TE^FRl#JK%zSbp7ijS|V zwVu*UhJtWp<(_p z5At3KZu?d}ldi|wx|HV*E3N2{<;i!lBY_KTm0L}^@%GI|6daz9-l~-F!E6z*XrTqI75*LrN;1%;2m& zc3e(5?!t}_X*#-*uc)y(3=0^e1yzfEyaM(KZL=|cdyPG&vhD(E!JaIcu7p^Gr9Fg5 zo7JV}>)RN{QHJ~9zw?T_Y+I#E*GJ?lH_L~(`poC(20PyA3b-Pf9*j1n}2tciQux;dIsDD!LR<NC35-aBlwggwgPwPI*AtW&Xn?Sn+RAkE>e@n7#KuIBv7 zJAV8*eA01@CST{Jqo|j|aGA_iGvjtK8buB3`|FH~0VSPnUuCw~c!Dy*8yKVSiy%8G z{d2!dIeW#)?DIEF9BAY+RY^}bR}u@9dberdnVFcHhu>DnOZ--Kt(CIwh%KjP(JNrr zEp_@$3AAohM~bBf*TU>DG5W2Nhrd@9`aP^<6XMb_YN>;M*;ZBoRCHNSYX6*Ct$et> zhZ%~)%Rkqlu@fbZ=JHw^zcx+)g!f9CPDva;Vj@ze4N= zEi1rP{O$bEF)%XX(0N+s@#iovpR+RQzZ_AJOv3{?9{ANDaK~iqJ0z5R8vd`Cx)MGU zLp%W#?nyLHPaUskjCDF>#TWERLlZh*fJA+q5nB9;Y|v~Xd`O>P)cU((KY&vKPK`Ad z09I`_X2!=SSr1yQ?w62>w1D)n=i zA6U<5(*dyQEq<2b?5i8CaWTLGMQQ#PexKHrqXdUi)cHo!`JvBh;}Nd(QiIKj&1Dfj zDS*QRM(agTzgQx!w+w^!8@7x$?Jj7Wox{uFq{NlAN`<jp|Iw~@R$0V?lQ~nX!HDCbHzfM`5q+sC=3AV?`?{}@=AEM(U2O{iz@U5ph4kORS z-K~SeU`QPFcRSC)7Lx+!yq_D5j2)FZHo;GZyb}g=qa|nl-tP{zlEMF(VxJ`aFRx?# zW?AtYtVlLfgX26mfgt#C%GfAUstY7}!9u|bKY&6Kk!xwJSn<%~{5aXS&T@!Gt+(w^ zlmG;y22ST+fa35WCWfJRVQzLTL;$uQuAG;QM<6h@S`9=67f|n5Wx&dqQsH|faQ6D` z5H0%zN(_uYAfp4)jVcMih9cxLYydz4u~6$OI%C9BOY(Dit>U}(?qhMFzny-CRc8j=F3EbV9*}hCmCIBml|M4M7$LUN@>{%SXhaI%fdTlp_8wf&I;Z z*f-@|9?C>UVld<{UcxD}O{0m4FA?s$_xB}1L}9>3S`m<|xku=Dq2X1rf{0XgKyD=l zCh>4kcaY0&1w8y=y|W`kwVcxTLWxmV*d$c=V^ zKZPRY<>_Kl0;r;y&p%lY-WhVhgFSzmC66xX+mVI>4E1?C;L2@P8$JjV6rISMT9e>M zr!IkBj70#rIY2lv5KJ{X^)q^J&_@B;TY{eq$oJ0C(d1;d-y{Kc5LT$v$>^VgIOT(k z!V%yI)!%8r+z_LhQI;@UCPe2AL|Eqw#Fhi9FfFPCmS}>Gl1hMTs-qUKfbO3NM`y1K zxY(vh@M2qIj_q6O;BZhjU5R)6a!fVe>Cm4BCqOTu7PS#z1A-Z`#SQz<-X&NFA%0=ApkM|k6(&S1nhry^H%8nub;{ljdLa9e}gXSe@#>Xi1~bW1)JM1{;$c( z|HE%O7mNKnVLjGU`rmP!H7kA<#A291vBiZM83bmHjvediUJ15i8MDrY@iAptf(LTb>E!2VSa26>PJ-V+2-61Cfk-!p z^Y;YpT32Q)=5%wid$-0z0|8!%H8?*D%V~G~z@je~xXDry4#ojcg^2}QD?or+HhDt9{rnKcd55Z`8Aie5x?%9JZRYC*Zr2qf#!gr3lnt&1) zDxu$nUPuCNA+Tl~DZwv=t5f0psuQ1wQiJH(`C0(%F@OwPav@Gty2&Bfs-YTmVSKFF zb?_YEBXb_ao7b5lUIXu!!r?HcvG3Hb)IS)N`533a{kcXZGN2a9$f*Qq0U&%)=y#m3 zO=bYd@sIVdEvpGR#WTt#=t}^_=3ow%X}Dfp{~-PaH!#(I4PTM@={XO;S4|G~`W zkka=ccQ6N9w8|VKpzGEPhT(JPAu0#0BJn!WVhpsz8k;okCD10oMrMmAWddhwah(zv z6QPf(@QA-Rm7)@Ou90{aI;!*3>lHRWkLCr`0=RB55M_CLRnS)brH(->QC%_zuzOha z217w+t4WuqUoDlgdv$Lw#q>DDjc`{U}Z43i-3i{cv!~{0!0^+wOppi zzzI$ikS!)aH}U7nC0}Q`bHBv2XMvL>8t)Q+BI2mV{YWm6 zK8gqogsnNTMCXP~fami+SZv@Zqo~R4)fL_3u`B2Lt9GZ9S|H1g66R))ZL=n27g-(E zylEXj;-xzg)%==OyUW{?3Zl=7qBq!R3B%CHXFkX5*-Y^iS@sKe9X}I0Nuqa(TARW3MH^e+EIM3cj=(lAza-b#a?BY zKUE*n^^=>djcL~FwELda%)ssnw+6Bgl4Wn8=uhj>JN2t!K&N8HIe*y8*QzVRWPXH@ z3VX$czawBnVLW?CmF=N;!vtso?aNK8NN3vB3J^uH79C88f>ibr5 zzRq*@kfZ6e=k-myBBF$!TK>nD*B_Xr2q``t%=+yWcl@_<;>V5oWv`}6?Z%dbzLEJJ zwpF)Ysk@n??MPD0jsvp6y*{R^R)$@wArYo~^3yzM>j^}_=~cdL=!G3)Vrn!_KSC}} zHrmxh5VX0{EyFgtV$Af&#^4MszbPKHY>G0JAjP|6cky=qqn32 z(*{5_UjDu`EovFv@}~Vu-U%#k>TL`g>)Gwxij@SGTI#2E<@zjd1$ly&#Vf`Di2{9Y zK<2mK%NqjXbs}0;7tRjjg%KCaCQ^(_?nnoD4L8bunA0f9Evit4TF;@__3nuz^>R3k6534oY|$_fvZ&7iuv~v$_b$QMqNJ2Zu{ZTKD$R`AI!&Eon_x@n1i%s@=Ba zVFIzuWBWWKBmR^SkeAU-^Z#M*J^$hQ!uC-u7(GMuZggRoD5Lk@NfF&B5k!mLMKFk7 zW*8(yOC&-PC2I6CMuO;_5TbX{&h~wt^Eu})I4{oU_ikqInZ4J#*S*%d*IlkF4oRGM zEe%w!IQ;ygbvC<|GHlkDsv-`C3i5(gkDkeUQP$2sv()?oOvxzj+g|-T4Skf^e|Xwd zRfs@km`nnTTGTX7F|ANx7RP{-d!aDSLi*M9;sOf``s5@sf7NgErG(j76U;^2|Jym5 z=!~1ab?Y&%ar2>m;I>BT_ygxo_K``?5iWK9{h9yI`z`&sI>sF<{GZwH<}Pk`^lPs} zX<=rE(&6&J5b$yVA>J?M{hg#oOeY70^D-Gd!`ZBgJ_0}aZ0}|CEnjzQHiqV&P?Ehh z=QZNy%m$#RVsr%Yk&f{eoHtmr+N&i>^Bt5A=QaM)v;2I6nb8Da_eya&KgR_lD|{O* zw%R;DZN0P0%k)Xo7E~cs2M6i)mWB-PG#oDp2iY&;)d2W7ns!VOuOeVx?XU8GT4QG! zNyZmHpCqZjUR-yVI#zz*x=tWLZy1CsoRdhr9TJw7)R5GA8D7BBd`Hf+PH3ZYk&&j^ z9UN5(Bs0f(E@!V1dynS)K_uSTXibfdbjqqCytisZKAF>^!2-kPAa%PR-_E@zPhZt9 zWzwGhWE;dNZio6m);S!dy|LL7nBFOLSu}=Y=5u(mut0WzqXE7PJHtq}a@=38ILR|0!INZ@+E*b`v>j ztSZa2zrsJj%ti{n1YQ;y8jMWRUesNr!P0Tz@e=6wj-l8>N^{q&wkuCqTw5kp_Km1|U@Zo&BWb_ZL3UvLx*74m7s zevnN!P`dI+R{B?5`ICAhNYw(F^iVQQFpAqCOPPrHLnC$0tND0gLwFR&>`(0aGR~ze zOWjD}HiX%|81-h#4Da>GMU&>&XEniD-Y%h8g@cS;7C8}x3S(?|vA4|ly{>tLKTp50 zlxPwpNMj5V*64To2e27w2fc1+=CIH#EM0XbrkqD+eEgPfEyoEQ?xbNA1++CuF3)6; z2wVf&lpaU{P)$0l$V5sAW>>^0cj(F$v{yY-h)GPDDsAC{g%jswR<&J5@HwVqY@xDOn8X!X)Flm7t;Osq`DO!dYegIo$8KHT{U{se`R}K&FyRZCg%u9* z#VQi-u7 z7vTd3uSR2uPCUW1ao_#mJLSql>f7O`-lbF%iPqAjpJV`=i+?T~lVO^C+wLk2fVe?2 z!k8(5a#|4NCk;ZgBYw7}`zRn3mHhMXPl|gvge9eX#M%9!r>GHEMR(ZoTp%80Db6h7 z;_fmDm3@BM&RQ%Bd-1ooRN^#{XdhWOr?FXo5k$M$O!ze{W{iyXIz)mQsKbcxqx7B1 zedM%ExlWO0u9s;^z@=Ath$_}y=c8@cUaHy zW7>NT9?c}X-`^!yo9RqKgtPEJWa96Uu|Vk4MMLM(G>Ifo&wQi}|i~`4YvlNNd*CUKJO z!N2Nv-esJ&S5U+1BZPyRUXBwW(#JDTgy`p*u6S)j!Wj%o2*mM!LS8a}1RA zJnQey^B5|>Qr2Aw%6HlRmIMozctIQfPeD^LfRaP*O!HrzG(z7`ge zE4&!KH!S?f?UhRAXQe&t+pbM`WtJl?gn2WD?$Lfb5&O1WP*Z)Dk@L>nN^CUnZ1MxRpa$&IT z#2itrB{o)p0OHUzQ#QfkgND5N!<-05|F23OgS;EF;~BzhlNEQLcgM*bje1Iyf8f|! zS4nR56CerQhq-^9a(u>eLL^+58MIr<;qBtWR-;{c^5g5rwob47#_h&< zU_q|k4l_S>3-TCmNeMD=>FMXoWaX5i2gg_q0oNkIjh0S0^koG2{w>Oy2+y0ffaf;R z$BX~`1<$J>U!`GqzHF*~SW`j!BrzXrIjTm%J^7!C-|r5Izp1B=r6HjF^)xFM$N?h7 zpZ>4-0yv8X-tT!V=Y?H+SOOe*|6yBwzH2N$v2f!#2B_9zVJX|gcwrxM3g%PoE3dZ zq%Q&-RHP^Pq@+hosK3;n?DiB|_ioKvAC7{nJp_cSMh#0`Ia%Dl^1r8SD$I)r;hUci zp>3I%QUB1GXVAmmdDZxltRn8C=yIwF?)4Zfr}ffFVuWGMy=FT(bnl?U_1QDN!n22> z^-oyux_NY70cb>Ct3R!o+nDb<{Q2WAblJs2YpZEliKHY71_5yRf<}sM?b&2(e_KYBy5LZ^HstAYBQsflgWXPL9euinkEdb~AfM*Gbft+?4qm6=c+|D%R$ z&fKSE-fOlgFZAX8Mo!>om1vC5rJuWW6FOUkFmR)%%w$a?{Hn0btJpUQ|L5yUbu(Vm zt&P$G{rISjr8ALA;{eC8M9?&(mUkN{Q%(8#R2U~DivV7$|$}^fco~5r0qNhsn zVpNT?-?Sh6cBk@?#MkgrH3q*soPf~LuE1!nK+PC6u&BkFlwqQxt?7R&@#-JHsO&jN zyE}4^)*iyTIR`KxH4MfhsEN!gOiTJbO?r3Y(LiR2%-W-RFRmMAnu8&wGSlf=5BLEV zwmw=xI~O8^W@?Q^w9a(rGtJb)vTB=8Bm>Mhi#|Ei{>%54KRQJk&yKCUZS5ZGdM}{# z86+6^7B7yUuT8-D=Q)ec;9$x9IAXhY65@DWRT@6%bl=*+{7Mgd+0P0SQN{&UMIrtt zA!Oq=KgicI0;A9-I*NSygDZa@UbnraPQQTJEYP?qVfsG}usb3$2O3V~`+moblLSFY z7+VvVy2G85Iib)FQZHiEVss>@mwJCGVxD|`BImMJ%=xfqXiq0mF^N4uw&5Zmk>fm; z;p&0zU@#oT^ovS1dAd~6KIBp2zpv!IIPJ(iB@eXP+3vZvu%LZ_kPNHDv2Vp&Ab`(Z z>uE8ROvr3f_Lv#{b;@@v_1Jvscy4^gq&l%Z*Wgb;_ul9-zp9^QM#dGhB|}xw1(xsa zLK*>U0Sd1erLp4)k(ADPz{VU2;$Y+y0;!fr{$Q}TY^?0 zDqrA}3w=lu3{jN&yvW;Jk%SoBzw_943+6 ztM*hk+S;}ihZ4T(#bmivgsgCWWDUB-#(XFJ4n$CoPutfP=Gq&w$*uC>+1;mi?(BW; zlun(|wJ;&f9jjD{ZXR~~AyY=2)&JDFct3yinGe)pLq_OBlCbfQ7~g00$dA7`*I(j0 zYo6g=UF=#5z8u_0V`D}h63w@s+)HUa z{z)r?hQ&4Au6~cgpuKK*(zcl>A)OSxM8?clsJK zT#;Kd9zN1Ib4TY#{fMhokcn0_o0Gt8yG`EP%e`cJ=z~p;hNFY{HuyV0d4Jaltpuop z=R%@67mmhlU4WvRPH+9EPld9ahYAK~8hjhJYNutk>zCt~8P`~yyIY+!d37S=5nhYz z&O;aR!^5b|Lv!7_?2JmPD1xS!F@DrVPN?rqVslP@XVv$NNX5A1iSVEG%m)SxioSCR zC~;dh$7;!t%6ujR1DVz{KfDOd4d5TU4kg>a6BZh=g_z;K#yt=Va6%Oim$_|-sSa|o~&l%?woB7qMLHONd<|)D3zuo zH=D3?o_BTiNktesPHyybBBTPg;OuruiMZf;Mdq`+{1$8kw*tvQf7#Uspf7@Kn+7)a z5v~O^HmZT71T)F4d)v9z=0n@MRyM_3UC#kpCy_^M- zy){Ti8W3_XU)nSuxPm-TgqZRQ}^=8NOtPB^mByZe`9k)>T$~RRRV+?OP9q z!ZO`7=XemaP)nG!=s-oT-j!13EKvKe1zO#m& zZ`@64dV*j4ph^{v&S&wv8Jeqt!eV?(tLYjs z0r+r@!6zYYkLN6_lRor)q~oOsQjVqFoII3FRC+WNRd%n~`-rHN6pc{g5^H}haJH#H zpSAgRaJPj{HxPzF3NWQU9L0S6FcnS0di@%+qg1Zh)y}w|8#gBh;aZSuI6m>IE@TwvC?uy z=`|gb^I0o^-9}$nb{A+y$?M*G)5GP8Jv}AA`c{Kky-OP?Mk520!WH(s^XM{{E1`Y` zZtsbO?UD0%iJR=DxX+Oy9l?Dx5k2s${5GcROeSLOBEy`|frl*{B7z>>KjS3T!6qa6O3gCRGotd*~H+`bHZ4XlA2O@B~fJp{U$LoMsd#tm}_;dv-PNQFGI0YsZYA0t> z+}?sG>A?8CBaPmC>e#~s{S$c>=qUffc96FN1i~`)v2}GyPDwn~kJxZwQcU)?kDT7c z-wAC<9){)wZZYV83xj9IlE(&QtnSD zRQT(1F!RQwP`WHJXf8MuEpbdX-3IpoOxjn;z87*)uyA`65pGeW4So!od>>4OR3=)7 z$JqBOrJtaDjca2Wwo$!XL%8Byl!-jl9?w@S;*}FpjVTDH0+<7S6jsgImLFx)H9jjj znAuPVj{}LRT@i@9=Ri; zF#QWG2Eoyzbeo0|(65U9JcfNaZV(L7m(E*h@j14#QlvI2B@AS3GsBu+T$9epZo&f=@|sBs$IY%uJNArh9A8EA6Y7rr|@!mCkR75-g(G=#s94J59zxGi8;|(1I+#Wxfh}f zC_=OPg-w?Fqn{Mr0Orips6u4IxaexGhTCcNM0rLIUi!su$J3U(u7howx3s&%HB+G! zT94bKnC{56u3e%NC+=6lZcQ?sCZwRDe;_rx@y$fesUnj&9P#fN?_;EVs+W0sTSYY6 z%E(Fkp4G29@ft{B(-qi~eCnr+A8np5^N5VEWJJ>znbj0w63f)fq*3|Db&9#ADM~|_ ztcSxT53He4Q5NDHEf-RKQnTw*C6aH{9q|nbD4-&w-n&bUcRUYH58i*0&^7=ei^!ycWos-V*?87 zb#-+o8hrWDXmqDHcHS3P?Ym|OTmt}}u6RH&W7cA5zfS&A#{2-5udF55+2|bp7GnnTxw}ew3 zmo#yTwx`KK*t3Vl*3?NzI+x`G2_@Mb{^pB1y=hZCW~H)Z03Z$494Hzgj}FK85mD!-YPeujNNC z+Gws75nY>OI_2WPRQ_U4|0+{@6*o+iANjM05o=(i7fm;ItZ;uwKK_=lZRea&x6cJn3Ke(5IF{%D%HfISf{Pg$Lp<8zJt_;j!*(FxRD*0v5AzQGxC$=FT zNsR-Tu}Dm2V_tHF|L$ozogpi#aj5l})(w8fHf*M*&rVLeX>m=-;;J9hVFB*5zleZP zJ5S*J+;yZDHc0qRd{RaeaQyyleJl5t#byCc5l(*b_sl`K-hBA65Xu%nAG{(unuhRzyObuQlU(;I4s=38L(Z$!xe*qf>2D(-4Wcd zRQ_xp`%gaGde{qzL>4|)&Ao)_-9E7Ytx1gHA|HKKGX|}fbFf8aV&14wM(NS5*(<`gQe65F zJTB#ZA|#QUQZPEFl)$T&TPu`|`aSKTO9JgBZ^3wt zt+wr!L#=H^o5xncIJ~E233q&LoL6%!W}u7EgoiV+M%kZ)dsh!Z($#@mzp+-|FrESN zMN?aFk0&gp1_eW#x8{d8cVlDrfOLh>?0^>R^2Ohj*Rq^ZG_iZM=tYbgc-`Qe?~IAU z*oN`h9j=aVbz=CjcHO z^ZrVDHVqjWqt`DwVyiB(i*YO8slE%ZLr7`>DBDHBuD57pYrs!`~0RcwuKBNtoz z-#L%~%z-u5xsa(Zt{vY=II!(6$@>NdIzo(i*H{7PL$O(z;TP8t;vEGX{E8NsJq$7z z+gVM!ZDvGTHd;G`iGgqnVpsfxn5wy#@3(`JR9KbsrtnE0vxR_qCg7|N1I(80YcVhZ zRvDZHi6U}F!LdnDqT+O#-<39>XxwI^b19#4(#|E}rM6+A3_vPfq=^n#MVI;gTv)ER z@4zlNJ`Cgg=#im?Gqu$we#c9}w=T}9xuo8rZ6!pfgL;A6Lt^`5n{X_;6*bE9aWx4> zV$A<9cb!^M#cSp0Q1MfIPKHw|{cG*h4eR=if*!_B{4W)3k*|MM=Xhax%3w#;<1%l~ zoklIrMX439h|hX#d)jb*sX>qq3P`v!SfWE;8_qgap?C(HUwid(nrU==vAM^I-jqiv z1A0vwT=!()EqbT=sD?)dN`!yw^5bgieNSdyVz6x5;8u_C6?rrFKcw~5w6k46nIoYD{)Aj{V-$gK0)rY5@3-2ErD-hWdi{7scJ<^!F5Lrt4S!Wiu z#iAc3@q%l77MmtH>BgUUys3H*!ke&XAE^^atzx$+`XRE->{|#moiis03suL6kmSUA zU@PYgAW&LU$*IDLSCly)?0*k$9c~mPaBB~VyngUN z>iKpLlfhM|aA8>cM_*YpX(c|sgF?|@;{M;;L5Pu| zAr+5Svg2sEiTh0bZ5?w7*v5F(P;VMfUtb?rG6Lg!!4I6p(5Fkkk@8LN@DbgtdPmSA z5m2@>W9*p(+26WSns`JCw)e>ll1uGe!hKjxUZz=;q$Nap=i&2(ZhQU_fssW-3cTY~ z4vdOA2?Pn2zW%QA)@h~2^+<@c#+#A5J7n>04(&g`H8kAF>-zA!zG5?zW@mcNw%w?Q znMLh;KEm@mX?Msnv}BY?0nOQTiPa(PNU}8m&XAEO;@%?B>hYiNfup!$(5WZxHkWXY z4|BSIMYTq>Ibet}sa!VG!UvQi;=JEgh0xVGsWE7K=SXN9HcjO2o7o04bf~j$sutrM zi^{^;#_v2vxWAm@Z9G*1v6Pd7{a1Q{n^#KW2%N*1=agoVO@O9Re&-%rt|@Hb^U69> z-{M!KI3l?un9(GgNDoHQ5z6%P$kL3ovs%m9@!oc4>YFeosdX-Pj7<*Vd~@E3u&mee zrwrH3_1)?ojQs^02-_CY6hmkBV}Wy6!e{bJ@ExK_8H(G>&AZtHpv!LuSPXxC#6LT} z!Z`{ahd#Xk=tgaY$n^b;sLO<2vX?qC@O=KAAp{4X)lwRORH;~E4@U-VO=+84jO zOQ17oC%H+SXwz0n;5rdvpJTICY+BKMoYK*0Z3?V02 za1?vw)j4>e9fhp@r;=sA3eG}Xy=nKkqCh){ba2#rgZYEx<+-$~-K99f`X(2)=qDsQ z3gNKvS;_oCi@S^u%rndZ_rU+Ce$s!I5IpXr;CO5L;BdqU7WVJC;`t^_=qrGWWM-t0 zHTBhPxw!`(hu(XS;)*Jv^U0=lZtStSe!HushJm8ktr$)gk_C_VNO<#WRbLw zaVu$p8K|F|68_E5y|(nvMp)*%Q;gR!3wWdcc6=2)rBq!$AMr0_pxR0jp-Jwz2%lv*dytT;zn9@;!}8{p+xHb`Ld3mbGZGt1bgJ-$W_5_UM$^p zpR0{ZIv&)%4j1J~X-qdtAnT?4PEObJ!&JZdpGX0;gFrib^KEqU%xU{2>wW$_3^XyD zKfgCJmdfKq1{OnON3|qCz(9lQSl)Zk_FBnmuxEa@mps5wU4_rZkZ}Aie1D)#Wn(za$tGQors9w^kcY!#cuDb86~&7B&^|} zx)e5*y5I^8J$+}$E?;VD43!LH!0@}PxIjdxiTVq|)zE#)ycXO39*(fyq7qAi z14|3zsmxW6VDI3erz>@vYWewvySo|Wpo2W$(~5lU-i+tTF-++s6inuUUO+#!QBicX zrKQ#TM@rru8w7Mcq^U`nbk(j$-2I>3mWvo^fTJ&0nV?pHo5335TzvNjq1R>|V(_8J zd2Len?9|8~RNBnQOnD*AK0Z!aBB|LC1#SHXkyX!#5U~Y1eGgt z?5rU?or$`29UBYlAOdR}x7bVOg+DSl&tT3-KTTe`>-t>w+7!2GlTk0y z-cIAf$wABiNFH`4xQRsEYyLW8>9#lA+drtBbwAB(-M`P+TIDKCHB)iJYbIUnu&sGvZvb(2+O zLRF-LCN^G}+iE)sqi`WH$KlPfhPh;I_&VkD{nfb79+N^JeiPs~W#o)v`X4VN&Ayz2 zv-T2y`tIDp3C7nv9dLpzE2RO!H+Yc7%1Ts@7tS8+yy;>G4qOzsq5(gsM08st8ZNV5 zZhkb$z!=Q$txODng!!Ns6EE-&xj;B}Gh~Aq(@C*J)UOPOkHT(iv19EG?KrDb&>hteoz-yl zKHOQIHqMO1q#&9QU~_&oeN=Kz?ddZl*>T!5E>6KJfijdFJ6Nc{Enn9HmsawZG=RNK zq0H!MpqV~Xcpv_#qd=W(bEXT&A+0tNOw`BNfak)=w94u%p5>@Y6j{CMsb^7Lb7$>q zr5@wQ(jx8`-6R2TEX!ms^gI={xaW|!@Hr)@pXg+($3!tnEHeNO&8D_nT<+H_)brl7 z)YvK2$A+Str~$U(s!m(!Y!&OjQ86b3gni{J2<^UTj@7G|dpk`!-mC2N&5e<=9z#Wc z-+VP*H*NCeTx=#~WlSdSp;&(BtK>M!lh`NsM_UwL%s<%);o+eGjB!Gu|8a<00;-B| zzG&toJ#BRY&Ng^`%gtUYcwmXt2`xpw1VU3L zXMAU~)MWtA6Jj55qMS-%Db%zzmwCh%_Iikae7cOHTm5ZX{F)j6{Or+dvKEv#gS3)t z&Zu*l_t`Cl-qd*f9YhRQ5SG>6xWBXt;WJ&5p6@{uB7*lhvb-s&w8yF~=HT%GEeLDZ zS6H>$G2Yq}hi_*mZo@?Pz^JULl1_|=l%PpI?L>g9zn`|ZN1L4^#ELOGh5~Y&mV#W0 z9956RZ)~}YJnuGgoN5|+b7r@Vk-;$Qm3p0>D*5h|+gDmirKffL`w5kMo$gSb5_KZ} zHSeC&uj!o{$HcNT@f?Zmr0=Yj((2O=LKZaXUdg)C51Tqh>xAq7q>Ed94ktvgMb zis)W9x(2JCt2eYC~MOj)z!*`dbz z8mW4N#Al%ot8+bp64fn?Hw9a;1lzva#ELhSRjTeE*0+rF*GIh0ANp4^7pc9vaz`4@ zzgjXrwPXs}`u*kZbMtg%u(Kv$HN3lc5Mz!H(~pc=^x``f?|@=si0I#DY`hMg4#4K^ z$(-nip-Yr9e^&00cH2m&Kl3wt-6g}WJG8cnq(0cV9N(M7SWqaQxEpRxCbVPp3FIZ> zQiQxDLnPMGEvFM|3tq|)dnA#4`aVa?bWHP9%^@UL2DZ(Mrv$9Td^K)g7duDJ zUdo%$*(2$qUnhxO@8cmpMr3|<9b}R`)|Gu20ED?o3Bqq1SGaeTiA=dV#=#vSF&fHv zU`Ap^&6~p`(={(2auJg1^)`JsWP&#CZE4BDd{^cCE~VQ6vvE~0@dA|g90*i8s}hh8 z>-ZVBY{{(-24X@=Td>0%{ZGaMh!9mQI(6R!e>kvGm#q07bjAf8UHv_E$B7UZhDh-r zyKC4R^5L_iJGAc9=PIBN^=(5pxx8dJ(?6+4Ll=#8#Q(P1_D`qG;jE2@c;BDM5Pu{1 zm(rY{uq*p4=m}X4r3Dt9lj7jDLr?c$fb(`_r%f!EV=Q3)n}hAZ?a&y&%fPBZs>K*P z>OPT+&yf7a(2vn)M9*D&psQc#)P36x`+g*+^edTwP%rny=ct@*mJUDa%d8ppj)vue z0sHM&7{4vE8LwYoGiO5CUWDA^QYlHzj0^*u>Py;hOZdu9z3E46ZPbPiJ{Ea@)6VW9 zLPDmcLOZ1AAtrQcjCST=Z*X+Xqq<@u4jFv{3Rqkpj}Vg`3dDtdd6V)}pHx?v*Z#uH zW#7+&p3R79@UAq~@@w~nca43b<=qA+LksJcu?KyPTE1hS>{)*;Dks#a2{rtP_s>b2 z-+Od*n!^LE4#4?mFM5;$j4KzIZ4Yo`IGFlST<^PD_ngItkWhjQevLavYFc+S!=AbH zCS+N`Lm7Mg+zjm>kgZYxHt&C?ge8rslM)c=;~?#Wl9X6J*gK0mK#5;6*#zwf7cpOXUcQZTmpP|upeRgl= zp*oh{w|&d-CT}3{-d3LJ+m@yuS}V-!n2sjX2K;xYzpzP{6guYVo#C1^v73|im`O3k z_P0vSow4fVqRp40xOG!Poy@B9q;Z#_vU|;n>zTC6+SR7?EwV4gmRJpC-%?9r;~lh6 zcrd6-2RWbMb)td^X-qG_KF!GanlxS*mafUdyvTbDt90k7 zYL+V8R1+=rw_$c>_XM2OTuiI4pAQHrUVE{_N|ic*@o=)0uM^_mZ(-rGO-^gb_d-9LM-7B54b&e0RG{5FThi1wg22^ZS3~nM`4R4n4hgAlKl~m zKvW#rff{1CdbOqTl{Da^efP+TxY7sVjNlVavro+;uQoJTg8r38=`&fxN)v*B))4mf z3iK8`|NL3sONh^St<2eBzj?7Ita$lHp&(-4b?)&Y&m`rP*Y^E~;ttwkK2bo-CC4!3 zO~lHg=3v9$xeBb!uEerZP@e0o;Zm-*^pE%6LW;z&sEGkD93J2@yM;fUT~!2x#HL9i zRwmZpe|p@^D8HdeOtoRuaw71ViDCW-`jxurRY)PKtKQyocjhMpbnm0vlN^$2hW|CA z0p0%{kxJyu*dAiU+7m-H)&fT-b}J4M+iK^uF!*jasQno)5ie!jVN;>OYu6IL<#8@< z@52&&_4^ikXdv194*i6ER+?qr&`o?UP*7C0k=-Z6?9;I->mgB}Kl0BB)JQPOCl4em zR+_!`JNt{rgO**VD&)*|!sGA!$^%x=$WRIyECno;r~>WC-PDG*Ck0`XY;TT&7g((Q zzPf~JT}D9J4ED~+Am8%qmZXN?vazgVMCo@rk#xf|QZ^9|@lHil#aU?XFSBR}Rs5MUgEim^jPYuV2{q8qXEmP{e)`AJb zu|6yC;c+oMVmwEKJh^TS21EZ9nLWWc1@4IZl0sun3S^Q&Y?WcY5)7}x3MgArMZ?5a zXME#+ROun~#pmRrIq_mr9LT1Q5$!8dhZh6n@~69W58}{tzu}zSdZ!bFs^EPBL}8m< z&$nNdwv7eWD?ft%5XDl-L~Va~YT6gFxPr{msygT%`C=AOI(JDU{7(9f%@N)iqZewg zu#a}Y>j9QzNFT9!(N+1lC6zkIy>!yV#d}(fP-goNjt(;MUMcQGHcD(P+pO_aQZtEp z2>V-3=Jn9;8UNX?FI9PltQre7>)t=r*?Zr0|Eg0OP^0zaJa~N~)9AoFZUxVxq%&@D zg^?7dr6(|5RczQeDI9t_k=S7mf*VRNul^Og8o>q~ZvbyeoHX?_wC1JJwIkZH40Gy&DCD zKWW;rP=0P|KWe!Ge14BNp3@^TjS<2UQ3B}B=+rhQI~jQsB0o#EzN3t3vvku}o8}~7 zU`qq$x(+E6mP!-L)LL+p0NO1^QN~zB@h$&H%6D(AWadyRh1}KGGO8*B{9a!}dm5SGr^h`@A;~7XQj%_CZ|p}(>72=TxSng4WL^-i`*v&mXu?BOVM{4mHtDC>>hiHq zgI2~xiws}zjSiBgGT0mP;8>4HXNRVA-MMh5=+LAAk+P~QB*Q6d}T z))VBR5_gg2^#S8Vqk?1&1qZJQ%@T$S1ht}BSSEFnUfBKqaHIyo;lDas=K8^%v;8H= zbQmlH!%}czDSWy2jZZ!;GkFcu|EpDa_4&Mxn>IdOM}!oF!H?~r)iAF6m1d>Xpuj8m ztJlzv6Cdb*a!NJy1-8a1boVFs)NyO{L%x%hw%8*JQ96zc3HKEv$)s;9AJ2%*rqD+^q(7BBV>vj1@e-Y^a#B$|oeWu_(#E<>UWaA@=U zbO4?OBf!8$4b_YO+X=~qPw@j?&>GCFn{zI^xZy!3$J1Au2kgG?DTlu`os4<(z~-wCD1cwj>AeSGo@ ziLS61b^ZBHze@am7Qid-&zDi&DF!rG{uTZn5dftSiMPgXuxe59u7U`FID8e96oXkm z3U<8zWrNHF;A{(iRbi?s0g%W6GV^-YYi^G0k%XI-sGqcjQ%OTTuR{6(ynqw{Oo_@B zMKyi!7coL6U$itW?zLwCoQOb8F@T|nZ}N};Aedx#VS$)teS&fRN2fS1&!PwXl?bQ& zF13xAsHPeK4mg}72Jv#WfeAWcOnJ69w3Ro4cX2Ps0;K&4c+0y7aS8krnmQ9qJnz2! zM|?!Y#X_iiC(8iG1TjYzDM<7e-7bKD{s%zj6J`9j|8RC>ra9Bz#pL4y1$dg;^3sGr z?}Q-i2p=i!x9>D1YSSV|i(Xd0Q5YuBmm0la1Wl<<1NZTUb!C!j^I@JkXLGXNwVU1SkVv5+cEbxB;6 zkp`e3$&XUE22C?^?Gdr)nS(Yd;&1w+O1fB5#CM}pTuFnpH_VmlKylb@un|Ak4g5_y zK2sjQ4lrK5fLctHrp5sHobozgBO2gV%qa(V)GOe<_#i;v+5lya36#|V26vSK;(h=D zfuOCN5Oy8_iUZ)eFUYt-jDSiRrPA23&;U;agpdzFzG*M%0Q59~xPS(*SZdqlsRCog zwFl9WR{?H;mx69+I44m20I}cAb@Fafdv|vJC=W87o0%e2tI{rIbXyfb`~0ty>lrZ~ zsWdOEUpl&ns{jw{(dq5Jh$dpp>xl>Iig+Leh5%w8W!mv&+Di}9)VYvlz_&DDWYoDJ1rX#s1=pU8j(i4W zHNBHI2Bjwd3PPp>jAsrAX-o6+=Bil?AV{D!K<^!>Zl3#IyC}8ODm^eEH4p<~=jSTm zzO70sW(l;Dlq&{m4CaafKH0wph7$PHuB>zOl`AGH{pPDGDIqWLYv2>HF0f<)pC~fb z|GU8`@P8ige`G+T`u__VNQ!v_3!F!AGka|i7m%|KAdmsm3Rw4ta)6a$ zNL6)*FHt?A$3#dKB;-=hTHX`ctI6RHycwSB1y(8Zf+9-Es}kAVsDQnAbT zt|?sy`R~jbSdYtd)G~2!xO|VkC1Oz%lVJ!1y$xlezI|N(40H=X!;%3{1F%e;r3QJA zK08wyjBp~?IskhS1VY5JHpyuq+xud#2PP%eZB;7>F}Z1LCd3D)?eKT(L+IIn zEg)N%jze&8?s(Ixq*d^GiTVAPK+l>O0UWw^Kv)oy=Z)62&u069oY9G|ZVVwO+g(y{ zmm78@VVga&WTmUXY%yCLkP3z#kP1r=6a+RYGC+JffM6Yfq_7#kaqEjs7bV2bTr-`Y zweR6itwdFk=*Mi8Z`>h{1+0?3Z;WHx}~WX6|TE?|4*rxwTWwkX24 znV$@Fkw9WRR9yV~dRZavhH|IyX8mkx8g1&FEJfw!F7*pnIi4SHQBYGO^41*k{2L7# zXPpBBf${`zO)agUE@7MRjdMq$a~G@9u!yVBgi=>v=t0wT>8JsqJEpobVJEXz;b*_G zI9$5v(izZ;sV%7w4-(VTZUfvMjBIR9&!1<0#>ploihhf~8Hh|U+~ub6lch#r0Lz}O z@O)+sFy(Iciqf(&_+BS1{Cx8>{A?wo56%N>xvQGvh_eT8;#3d!WKGeJgr(%_9TkMEi_iv=Db*-CDN=kwPgEle2NKP-ZfQ1dMur~9 zF2H9<;p9{JWiY*{Rqy%SiK1xpp=ozdk85shCK%9S9ql4UW@d-IrLMzZ1;}0~V3hzc z+E^^b$jFF1kQYC(`mu3)Dbe`1cQD|lef0+peu*~-UrUQCb>RSFc7Z8v4<GJ^Lo4rF`~`vBI}z9CH$n^q zv?>a6B|Uiq`VFWkAf=Bj|DGzIPY&((@}&H@N9kv6HZBQFMQou`VLPB_eEj^Ab)Fnb zm+M9rjsAB%L#C%sN0ctjZl=-ytOdZJx*+me{%hp_#oU{RW7&W0qfb(yNjH_EklR#B zC_@PuGApD~qKplO(3~NqM935gDGe$`c#ydyk|{|@B`T7HC^P$9x4z%^-TQa!)lHuFq$!bDih8*5|s)%5)0`^1FM_NqhJ#S$}l3oSa5g^!@v|{B22EiM7Ib z9vdCMHZU}lk&`>iN(c`#?*Tr`B7Doedy)mibt!4bx-IYDp9INC*h@tW_Uk4jAKdwH z0Rr6mz=42W&e`WGV-)({)fYq}&w30fDe-2UrX#KB;bKzEN>8XY1m;k_? zEAcIOmR!0`>70V0N|)CMG8D)9YeO|dO#n~FS7l1NRo#ksj8lDsFSi${r_?{gD$pC3 zzr>a)nHm@w$*x=Xa@s-*wWPX)%?xQ@r?xa~g5!sr%Y|c2g#@)KM{jEByx72}~7KsYp~E+pp3WUHz)- z=>CkI!1Md}6DS+M#HJdCnk3X6Fs@&lncY{lKD*;i44pt!93T9Q;z1Dc4QPx1H8V@K zD_<}^-aT=x+ViLTkLJSo2+Bt1tb3h{!Eg6po!+ztPi+Ra9RJX1Svu4nUu_Zgs4_j2 zC|p!<@x&BBFwX6Q9D8CFQ7?3GXKj@+rCnLgRaWC)tL51o@|BA0_G|ij zoK0BE68SI*{JA=VRaLFs+`=|{emAvneLjEI?AbL3G9(n#{(J`>ADGM9z zasKR#xy!Ib(h-mlYi9rV^B+&P3X)ps zj_1(<&ih|!ymu{Kf~!79JNrTj%hhlv`QTEIo{eu)tS;gD{1>89Iw9v^RQ2>;@{awG zdkhtK6Y>nuKzt=(-_`SX_TxX;@9#PEAVtS;lh&S=XQOXj#ulvD_TW11*HQ{u#>Cd$ z*}oXOPRk6KGH$@i7Jsix8hRa7Q2go@w^mg&_FYFZ)V&Q~K*_&hLl8Zq1tF zkNKyD+P%jey!vkn8k^0h+#RN<0;ws!yxp=)b@Z9)BbR2Cw(9uJwQG1YC2@iGm%CLN zY~Cz~%Jk(6Gdw(;a#KmE?9CfqtQ^rHCoX#U;>bX^17IDAh~=X{z=KhJdkRz9?2H(h z_d2fvKDHo}QY%r*qOV@HMmgdI0N#qg!l4Qp)~=S7Ey9Z`vJr+SP_MAYi1s1cg49%* zl9H0+ccP;gQO1ssjYMC&W{(ZMe}D2HD>-13Tl@su_?ri(Ctf?b9Q9P#-$8_;OIOmh zJ?_}A^!TwrqeQ@DHbwB{H6V{30aV@}ZF0)%_UyL#n0EqVv>5w~B1Kuf_t|unp|Z`g zYu5r*Z`60PsMX#30SJ>jckb{lTC~^0LjV%=)eViwq`!IdCXnyyog0rT&n>ik(fa%% zz)Yw0`5t~>i+txTskrN zAZ|V(MANnB(?%AfvKrC@&|$%Uyvw+V&6jccs7xQ(zxceLU-rPqQ$v>~2Ir1<#E<*8 zwCqL1sWkCsqIhQ`#o_gxb<>P`d_H5RgGOPSHg0)hH$1ii(OuNQT~H z-UG*oUEbOMs8VC@hGNR~vdvya`2!!z0cA#6O}9Td+h8%mB*5`;#A0^0NBjCkOP3NF zTV9A@%$OtaY3}%^xr5=VLp*L({kql@<72E;bFbbo`bAu|r7gzA9)AYL5$=xEV^Rw9 zD>&OCo}_j>I!*MgHwj6JFg)MnoEwBka_Gqnl_wy@gKx76p5qzV0NdU5 zqu;buSu2l`)lyssR?kX{3O5*g&y%Sh-%aCNL$#Og#VWCKKbo>G@oZKOO|Mpo z`C1<3Uc@QB#caNk!_UGAFYw_K+;?N%3Awo{gF-w!JPmDEY=T>YTs%aGK?B0={!)KE z|D5E;bceak zmnIen_DWHTXtYczMK+kHT2EWCJ^2gxr0w&7`BJ-cA|e>o|KbQ9I4e;Yl_tv6^rKxn zy?V|HJ~~jhd{x1qHI-EpJ=C_pV9bh$SVRPnu&a0-{mNACGA4^_dUXlGR;UadW z+iM_qw5f26fBn%P*ID7ve>I46J*)~}7)eRNUxiRx233Otmm@6>mup6Ii8E*v{bR3~kJt=Pxmw^?bB zGZ0iPeL0h=HsP&_-c~aL((SvC%s=?{0lF84;2dINVjyoSkcrQ4UQ&6PbEFgX4Mox4 zIjekzO3xIPKdG0foVry>?fmxwDUF${9-rRq(aQ6{GXE+xjj(?Kk<9!*JH6VEdHG>` zxpXV)I)6WI4OsCQ@UUpflH2|Mw6mJDh~bgy=F)X+OgjhK3)i1Se5_n~lytiBOI& zo=((0p{dJ6Cjrd#XI`Jt(XMw|yX*TKq05nR^h6fYD+Wn*q_FPa4?(57vmb);tBv3Y z-(2OMe*kN@SozU#r?%q}qKdwyN@c{+5kfD5u`A2@Yp2!3It>jCRvBi>tY2TATDr8n zRCV0-W6yboEzqpXphv+8jDddO2ds)0kEerACPL!=#gI?yz*ed$J%6N?D?*y;N*Y6K zvAh&Xyc36`MIotef&MLZnlfP7|0=kJqLh`+>25*Ngk|H`S) z4~FUT>ub5v@VA@UBR_Llg+fcuf26xGUU0m}FZL83Zx2VoSf^D7$%1M~^l|BlFC@(; zsR0Oww#u)0BrDyjzQhtCZ-6k*l%!bGk6QJ0z^i)zG}Q#&Y@gl#F4N#@1b3?nN8K`A znvH5Y4u3nmj-c)@Ppi#xYLW*!-n);?p_|?IaOZQ_9q_17=B+?h*BCy7x*nvOGuL}i z16DVJlEAjmYlB0)ClVzTd!Ce1a25FTH=2>fL{L=6KdYv>ebvLF?aSB+@Mpr%R%f__ z?t)N;(<6pc>NOaEI#hOqbm{ro{Kv5sFZ@*ch2f!W{68zT%cjbSyPik6lVz3loQg?m(~&ANOa&%H z2I_r7?lEax4=$L(kC^uQ_4_+zR=*0tecm+p4%`ne)6D2zhz5%L>I*Vvz>=aNw9umP| zB_f;)mJ*MZQ+R)9s=~+PA}-z|P1%F37nLSP`*bBiS4h1%)>4ClL;Bj)DSKj&n`UOn zglgLu?7yWWDVa&HEEQ}Vj*E_&87}S|)84^>Y(Ll`h&VF&c!}SRbY=DRJevzgAxy$V zkGR-tU2)f!l8HE>7<-~E+GC`t8Ac2lWeNAD`ss$> zQfNFhR$>VF2MQ;~;1Y$nlP+NySgc6TWSNX2EDg-6llSkFBuPrn34qQaoPq#HWFq`6 zlpG+$U?wzAj5W9K?moE?SS=23if9MkqWtamNeIQgSOD;U&=#bN1j#zwox7od!J%Je z;_jUfvt(su&)@=h2^23W|KccJdJ2-rFxB<*rb#=LwgG0JHK>cl;TkP~4uq5`B|3|! z63*N?Ub_C{Q^+K$yc9gR!JK3~$9~eivN+Y1@&3@W*|Enyp0IE$6SX+rat@LejUQYM z(VB}l?f=0Zgux(d(Q!02n~#WsQ6TK!UQWo0Y{C^*TxK~24|eB9?#?|5BBn>0Oj0y} z+}YduQLI-X>OjdMv|wT>GfB(w0Yi+1sU+>-wCPq@F_<0sc0U4{Pp+)k~ zo;@Qs$_{jaNFaS@a4~UoSX+`znJ6aMydpVIW1Uu)oDl!*8Vt{{Z{fwE1i(b>4R+V_ zLcI}RSdo$!2K7(nVsxl4)i9<0=KbX)Y68F;KK@QV*86dwAc_ub!A_!U1=f6q#$i<% z76(F%80%QCLimLi!>yGRg*&6?4_(sxWa``=7&;8l#YdH(ZzT1OALj!f1i=A^kJ7rh zfJlOp0~Hu;I7nJRO1el;7&4_hZbzkoUCKK)Jej}U;_2>VAGDwv>JHR6XO$`0#0>Sd z!{i}fwX;6O;p@xG7DpTHVm<#f!huJco0*XzLoKtOi92l*inzkm%KrW}f2n4SN>hV9 zHXiu5m}QX9B>sTKMX^u$g|zrp>EabG?LAa}c-;~pz@&^g(bwkMa&DnX{aVA?5SD!< zMh_%x%5rglS*`q4H}OP{5|FdV1PIHIkNJo+Nzp$)8lOS1T?F#hbpGZO6l{ko zxP?^3ngrmT*y*PRoFRWnIzxrY!F$g;(TB94js@+-k-9Sn52QdRDovCH z4Aaim))!(Nad+j)mFrDiY0e+k(S}35Z&K;MF*nuvITz%rk^{;gMlgsw!{qVWuofl{ zT|PE3IaUss>Dchd2mYj-vU1?xtL5jn8T$2=(D67R99Imkw~EYHvY47sEWyH_gI^EU zT=LR{sK37)!~wh)7TMs3=CR!$e??}6P&om(_UpF3-Q{A3sslHOk_y#|qzv}?yi-7| z95VCritTjqL|Irol4^CX5vPuCEM58Gyv+};KB#g@YZk9sik_j(| zRbB7j$8II!mRMVgY=_iaNIL=)tQF^MdJlz#B>*`Ba8WF*~B|#4v$}^T8Kke_&32$ltV*Drhpj#CoFVTX$u`ZYP){D|@ zqkYxlw>2T!|1wtebdp%(PtlDi!+fZT1X+q4&DuF#ZaA87r3<@3k&5 z)(tN)gbm*7@ijJD!DT6FMk34FVJ3gARqO-p0kXX9)6=u?V3bG%*iEW@k{Y^DCMJ5+ zx%k~#U)yzb(V|69sRjdS$p&um<&i+&%pMq25uf>Rb$ExRr1h!5v_2PtAxS^(|5S%NSE3L=Hmfv&m6QLq$RYOW^MzIw zaL1n@<@JeC=t#;$QAonHI^1DG9NjY$cD6Fw4b;GjJ@VF^QXWxagJSb|Vtl0W(cY;d zA|hY#N5T~sE9s{5e2eZh^+pFfX4)5iMX zq;Dzt3~wKpKTERwy`21p@xe7dm?KfMwg?G{!ExPzpD(wzof@e`>%D1tHbGa&f`LShxGP zS9F13n^d{m4H9cx^1D5yK|-(>A;m1j#}(Lkc*Kf8gJS=Q6v9SBAL!??!WdBXXVg?> zeH!Hxq42X{#QA4-`%)k+iCeN#Nf!3>tfqnh<&b1GcECuvS5w~QBe)G>7BccHoT@e_ zms9+cq!wh~mq}EPcsnXHf?LYsaR}-eU1#fa>zINF#{Wx!CKvijbTk}DSPvxc7lcjwV_rR zQVth~41<|VK|~!83ONt-h}tI{=2o5kEj4pwqENN|h-!JGo6&+aWAz;s)_Ouxp@xw{ zoLm0AEOBvK#zUu!OoR0qMi1Y;UKDz-)@WDa#e~BTGH%{JqLomxO_E(#M`)(C&W@=* zdlWev-K+YP2YwHYC97VGmRs~ht!2fhv6D;SV?@~La^RIQKySWsdbP1>q-dkAcw904 zf{kPjvu2`KaN?<4wX%kuzkRwtuw>SpIVO>!%|lhkc7WPbPjy50iMcK(YhyTs_r$Ey z-Maj;-q)V_d2`+zSWC(>Iq#R=9MHVl4%BJAhudz}>B_}Adk3_Eu3!)_sX>- z7I2$sX;Pt@#=NK-(bNZK_MTVB^ZEGE@|x!#bNtxdlAprFWl#_cK4$(Y;~@ zSDxIscD$8y98F*!GWgzf9+A}*(8IeVWOa3@-%kcPCyyA?MW3O)^aPXTdG?m@a|&-s zs)ORxY25-!Zyt%C|NZwmbUr=}cc$R!?9O{e2YV+sR(T=Z>x(khF}S|sifFl^xaOfH zAA5t3^<<=Y2BGBkqPcnqmift3r#cp+NTD-Novz&Of*9bDTUSQCtV5LmHuUzd*SvWp z)SiVg_FUdZSDk^CCu=;4$t2CS>hUKwl^&nD+&09r@%lt5T;L&!tQV~2DMU`yh5-wL zyI|#CIwpFy^r;fO41h_GgM<|Tn?mEVU0HueZS;myFrIvwvQ4%Kuj^S^QLtpb1<3pY z-*@fKACR>vnFVej7G8XVs9B&W#O2hfQ?U>^%wD%tLk=Gx+^?Z(?`y;?un!8dZmIXEYXM4cI=YP5S_)SYf3SP4rwF`gB#D6Hq0`)KVSGv3lBkJnSJOMkmkEx2 z(|&)l^C1a75__<<@iE=QjdwbIW-R>#gX3mm;tW)dbS(U|nG060SwoFS6bTd$JcyBM z|M5>gGxn`njBqg5^QR^Q*`hliZlb$n^)Yvoky2Z$Va$6NK_)$eFv-)?6G@R4!H8z! zKkjW6Eo8>utM9ax6qVIQ{9ut5LLfF^Q+{P;i6^Ne6R=qIm$|~eD%Z5irhJIU3 z95GUCVITidJsya-T!yA+iM*EaE8Oko&2w=Dw@vPCwahzHKSfty4wluv$d{AV%!Ju? zyU`I?%L-B5ydC&n4!lgQ`nf#Iw$XaKZ_NwD-L-2=al4KG?&t9yZ}+akm{4hg)Zd&Oz~m5jXLt!XfiU(n646}pT@?vf|*47=sP6NQifWESDJm4EUzWdi78GpNG-y_FHS?fS$ltN+lYhJ_qhlhvB?2_4( zV;x9wx4t_synIz|AV`{%I!A;31J}T}+4R7xro|pCEC_hbVE!=&0-pqxoi1+}0P4s-Z zQS`7W%p82M!RFFeaAww*LO0$nEQ|-XrUIXnkwCP8^c7S{P-0DX9QyIHmJ$&-J= zUO2kng~RMG!%)8tGaY^y*%;(Kpt}r26E4w7Z)5_qnW-=q(x@{^Jz-ifNz*%+Hqc1` z3NM#7dU`OH`7+HG6l(N)%J_0{%A2(vTX?5!R_ zIyhR!Lf{c#GSp%MFg&W938sLpoJYLsg(LA()KdCILx|*MP|<0mX%^#G2QpqTLmS0P zUcf0Pcb`Yhfa;VbU;vfB)@XeY{USR7O^6;?YZnb;|Qvl6W`F!Yz@a)E4d@|JglA!!+9qhs`JnfX*csz}p(^!6fa|%f3cg zRgE-Hc-dE6A!G76s)fG{Fw{14k$`~hzI`0Jw!crtJ$<_IWg3BpBagb!?c&=}mM_s3 zk}PNF7W1V7?4Mx57$^v)E@n0It{&C;Fc9q2pC2ulVYSD#PEryw!NXoamk!ae0{V02 z*dTmrFTe+)1wIDt2_$LbiT1cs(I|_eMu+&y!QRhhFVpaHM|=MNN|zGd1S$Ps#a51w z6XOGNN4{^(Atq11NYq}f6axTY)Gaa5kF+JJQoJ@IK23^Km{m4!hiHm%>K@j`&qL`( zf9Q&$>#`^dH%{~?nZWEE$J%{sj(@+GNaK(&sGosPw_*x&@9*z*ME0oAr#Ie8Ntvsg zhc1boIYG8TKLUXfTDzSkzk5m=Ci;nA<+ zszaP8+}v!t!xRsF`X_#5U&ykV21Av zvo4%+8`A*CzuoXt{2F0O>@Vsp=_Hv=EbacKEPUv))zJJ%Df6Na$C@i?6WyCV2U0yp zj)EcO=jTHzz{K5_Bm>ru+g2U#y+q8BaEv;BT`u11(;ceOrS+=-RG|tjE71X)r){KP zH0J^%nzRK`ro*=*UdTJYe*q6{k*b$6=7p(xJ?SkK+#DE6k}EJ2bQ^MLIfd6AFf&_- zf*n`|5r2?TmNf-Ri6JH-9AE+kLyMrDX1Y}I+I8ysKHN65X-$kF_$?|2elS9Yi0saX zCFHdc2f(yyCCy-LM+4VajU~dv?!tq3sc+h|7(*6RF&*NLEFhXb^ed{+z}s8Z&Kwwo zuchfD=e*ucD!)Q6ajWl<(#;ElA*-v5mxEiwamU^s>3yx8n7t{R2EGjF;8}aV>*Hg(;?#*X?B|oSZcaaPap7R4Q0nt zc{Id|*-vnom-u=JOqk~Z7!C!_(@}y7XphwxhNEEeeF9x65x~Y`E}X*DP=vGHk%q#Z z%B;ba<16gU!$29yb;OoTJWI1HZ-6)gO=sZ-VwM(Dm$-6*1dYeJc=g2$Wmt`@6*Ig# zi4&*@B-2^G(Crn+<7gli0`gV_YN>_i?>g$w!7G17*H>efQa{wDP*{cnK+{h&LBY+I z!b{1KS%!ec9l1V6w%fw)e_&O(6grTCsX|`*9NYxxBQ%gwF$X}K0iY$Z)>aYy?7mqN zI3R!$oTm*>+_nArJ{ys$2GAdsV$H#_G%a@95YUa(&t#oDz}bTn$h939_9FXb2qUQm zfJq51g#L5Bj;<~(2F=pYNIhA7)Ta0!ZMv#S8EO&$N0kqqJqS^)dIPu;RBkbJehAqiHvS*0!UMD zcC}})c)SP6M(_$tPWmsF7VV;R?+GvKz(529k_HV_KPN}Iw~&erIY(BIrx9oe{>GZs zqM4Wf^*(2MM>WmNAtE9DI7ufGwV*~e4N=>W%Vd&NN4vZV#h!-Itk8$+(32#lQC%ue zTLY^H#2RC!@Pmjb<J* zg)%ARh_J$515Y4(37m&i71|$HV_XUru`C4+ADDdi60g0yr3-dN{gFj-_GD?$V8m`= zb~;=FHLWd%kON@}*IjlB?hrYjsYo?g{osM{BV_l#W+K{w(*^lj`>pICUxC&EfzymbV2K%NJeWvMy`EoLtn8^qS0366)@r|XJAg6x-% zq5e{}_jsSj4;w)ZhB;pN2DhzIOkdJCQWP3QW*f%MvDkFn2;)G&&Xf7Uz$W}H%DDBR zL)^ANX z??Go#FJdd244da5eCCl2_OEa0QjMmeJ)mnJP2^JRk|y?{;H<0!>0}RZ5y_gzha27- zgH?pL{K45B$1HxKfe0xGx&WF+gBj?dQ}rhv5kpNT>}gLi&*oSA);uz_kKq%+B&RJD zf5o*8EFpqzht4MsJDXn~e>PPD_d9eaRxk1BtD$VFOHJ`)3^iH?ri z#M-)!!+5Q@4HIB8xu3FJmhHGkI5jYq2WU*1_z%iEv=rzhfj%|i^dqJI9z`K5r~!;` zp3Rq`V!kr639QEItcc*SY9Rw`XcDkt_Yu8hIaze-2>$46SWBqcwitDRr}m6o80vEC z_o5q_#*&f5pV8l;IZq7r%*02LXXpWu%ZU!X1~7qHGvDS5&Wur{sxwIbnNtcNkGJdj zOHID2z7ad!0WtabbMP~yYHQH`EXHeF_Q0Nym&$55N-9;m_6f@-O9at+1)PUBd zxl>`JN!@|9)J$t0?`r;q!QZoF4pQYLxlI#}bY6?K&lrpJ^o;cy?x1(Pq)E}%pUkhq zZ1K~Dg@al&od=67{29UD{@OcK3ZtP1VGM#Ak+{G( z$Q+tIf;J)eWzHi<|~*EzwvR zF&)^MbW)EBZ+#~C_+%{GbKKBEEy4FX7Ghu=Eip zWe}Kj;uH2666Q0=YCD{CTi6I>oq_niwgVBty5e1Hd}VZ?k+ubkpnbCj{hKm)u))D@ z#q+cuq3z02Qt$<%ogCBm)hu%cbth{BzzKMOM%t0-xCq^rFEro|vT#^;neP+K?G0kE z2Zs`o9yNAIUaUUZ&Z}3$v*tmT<6uQ%&AvmJi*c*bTIl-L+<~0sZ7d&ECKCNs2>r_w z3V>L|PKA8f1RSbfvJ;{-3=om4K>$zJI-*)1d zDdd3zTIqZuz`zsGh7_|4E#XiC#blcdt|>=T$)+u%-G_HXM|$Dc;O=SshDJe2E6{9# z0EY5l;V{W|pbi}AEjon=ZU=1$r3avdxFpsmeR+~Kk%1@Y-ezE56^pi;MbXu@2Wjyk zcd(i8k1(u*g(oYY4?G`1YQTV7N{krvB?3boZkR3agAbJIP`z~e^y%b+=t3Q^X2?)Z z^$_ON^Fz_6A43l1!h)V@tguB|ark&+KGp`hh>k+Vy1kVATf8uEy`*5|Lw6cXPlN@* zlsX5^e;ZychI(hsHWbO@dXD9H?j|xx_l}f-$6{#A3;TeEJ!rqLEt2=c`Cp8ZB3yrY1SIT%E02jOcoK)fo7E<5s^-zk zW?PghBIs0sDZ9spe^ZMG`u}!>M8Fw1O^c9mpc`HbbPtccmL6k3U)dwEXU&=wVgkNt z%u8KhYP(Uj15cqMRUwaOp|$}6T4;0=9A*+EtOMZ|LiJXV?*;JnM+AYx&f=u<5?slt+Z~89Rfd zZWp6r8b$^Kx-#(5F&#;XPpyA&ry}|7mM28v041Y()AgSx!buEh)MJ|06e1O%bK^tp z?wBUSfk=>N^jugsIQYI@rIa*2`K~4Msu!7L9!-`d((=W8Sewgsy3~mhqs|lp;?L8$ zULiD22Y^ox6vJ4p z$A8`(JW;;uV-Y9-%VTBHUN~rg0T62rAJAy*KT19vhDirf&!5HyEOkLXsZ65ZZUgwj zG8w>RJef%rS!%x7=mrZu@Pm6 zb>h~38pIlRLxXboBzunhky*X^3AvyYE`R&JxXZ_5f11D(SUwq88x91m#`QymH3`h2 z9nGWz-_gn^WV?>C+%GhIP>0+>Z>TSd0<$-!_j9THha>f@2}meo^3#2v?0{(#4tj$H zv4Ik%ii6#(T!H5uJ*wORQ<_$bJWTHY2^ac^J|qXi0%ZbN&KjwrR{F0mWh~8xrC$a5 zpf5@DhCSNe{o20V=)sc<&Jwr2+^jFuC)lIkQ&Sz*b`kaZVSW-G5dIMy)qwV}v~ZnB z&titnEeWp4X#M+JYQJK7j~%u;?zjDZQnEU%7WxPx!I%3R`jD8{8y)bTP@o$MyCB0L z3QgV2|HS?O`U7AldP;j^AZjqM2RPHAqv156Mq{Axm`Gmfw2~r*pav}id7At(@FiUu zSi_%@(E&aR_EZdKr<&Xrj2(0ynY?c3H#&m>*XDL@2U+t}u}Eo9<>rYWWT%cc>MFIw zF=)ZzlOREB1#66&Z}k5nO&k&M7zSZEd(fVgB6LCul1wpzWPIZteXI#x+yy5pWjKlk z#p3ZrM6iXn>1Bi@sTcYeP^q|5G!EhK{Yt&$83@`A(FU&)J%GS@pfIV1+v%rXkf9^i zF!JOas=iP=ghp5h;92T~zKZaNWhEu)KTV1y=z%b&XCt7Wya!Q)l1_CQBoq+`1CJO& zQ}g&y!bBov$ThzMSxq#nCxCH5I^RM8Nh!W`DcWE>>YtudOBb>Z?IJAKEi_I*WqPWP z6@=rM8?~D_g<(N~e3|Ic1Q@j?SsUUH#C%4h5~|)RtVYW-+%}{ed{i>#5q829##>Op z>9`#+Ja|5=aR-DlH=CU~M8Y#VDTRTk;&zn*rMJnu%h4-AP@{a}$|;x#2F)W;-9Wa0 zAsvUQDMzy?+Dne`x}XtAJKfu7k8*_{1W{nj8)z0Oir)imaSmNdzvPl&H3ma09XzKCT0GPKRm`c8tTVRU=HpDoqR+O&R^!WqdX!WB+?Nxos)&wItI;} zL-62#ohlqSWe_7D^dHZiWpSjeoR;Di_5uRw1lFnyMkyjI6-F|g?weRz14gwL!{+zE zK;HX3mr26ypej$Z;y5rBq6rIDiVjzx!x45|hJaqN^@7Nibw`%d00J`7;Q>`3 zu;5MjAAC26+*d+S@46B!IJ~0_@S|UJdKE(hVJ6Ei%E$soFB%%KDM+ zB+)@`UUdvwG*D7da?~57XtlLv*F8LY)~wZviZAf-XnCi_7-O-g=b+$V9QZ1t8ekZL z+d-{kQ8C0QP2iB$Cf||_E~Gql)9n%aL{_9&#^Dte&vj&8l?u4eqV9%x>>;-QZZ4~G zyc3z27@P*aKsJ91xP+x7wBbDUPuYkpSg2MQC4i4g9w|8kuQOm%6ImrCh-0<7l4!^- z;^W(M=uiliXWZsIn_Edz`oL>)5WFlY@1WBEJ{ltp+!GDsP|bSKAix8);PG$JRlo!m z5*qu1ktF!)ktWM#3WqEKAklyjW;)1N1KuS} zOJ_U}VRCrDPoDvA6@To@ttbGo9){~f3!T*)Aq!I{L4u3QHqbI<`d^6-XG{bZGBA{M z2!8+HE(MKBWGY3VK=4i@$BT6_!&|o88;#Ymh5^4L?05#~6w^A8ew(ceZ5*a(F}VYs z+SjQ`OVemGMYl};&SdBugSLl78r3=f{%)(+4fe@D+q%4P3zwxGv75htm-iOD6F)`b z_~lT|Nq+`^Q$JNV?<#NJOYl@EDmobbI?M2>^0Xi7LjIe> z{`*ColOMHPc=`XYe-yTvkJx3Q4&l$_{r{;p{l$qx`C)@*%uv>fM2_`c_9(*kh;NR+ zk)D2W8N0RKzw!z-ueRX$&VN4=!TLyC-0s5ysvFHCw;o*ky|Z)QzPr?UV=ZF&_zA2a zMt7-Kgp5n$WO)A1Kc6=FnY4>~Lae2f%Du~;=B*^}(74Av(vWp&jfHpA{zw<^NVp_} z5^1o5EzoKF2w#k)*mIqgo5BnQn=IZq8c4_RipYpLR;5*rIM$X*f{-=#rv?qJ#ovh2 zsfJ5V^pS&atc&G6(Hn`eENQdh!|@4t=S6p-Qt>T{q9(HVv0}K4+~X0p6U!Wh4Fn~( zMEIoR@rr}nmoZQJZ{cNEVftT;O7;CmMBVsMaEFM0x+9*0sJ`*(NFY-slAch=wy|G! zI@2{$Q$mkTkP+g@y+?RajHP<3h@o%fV4#o1$w@h2&Wq@I>TH}*qW}HRAK|){F1aRbx2^vbb^PSGzM~4G zBRnj7pZN=a-_YRnqh+0Wy?^A5w0!WWsvSj=dy8v=W*&EaYI1bRPqvxjHY(?RV|Av- zeJs6yWY@QE3^vE`Z}Y1k*_FAE9{R|b6X)Nb3a%(593AlwXIVp=#wJ;#k_%(Iwx#ZE znsOfx@ia-el;ogz^3dFoIq}TsbjNT6&2DA3h0|>KYs*U}ZRWtxD~!wzEcYdJHipsi z{ts(5Xy}*CO!ajNo0{;lDrn}3U;aZ68tQd5ICMzG{iUMB1}A^Z{eS->O=)4*r8c!I z(hd%Fj{Z1T-{{7CE#8Ptj{ARbbLxc%V$tqIx$2QV{a-xYTCbr5_LWz3kfHQvUP#w4 zrSg)tcv}h$qg(&;*~uFyS6n33dLu4xXmsvi%Oy)2m%1G#@(p-W<=yb#E_oG~yhhi! zI4PZ%A&h4276nt=4l7&t}ihs=eEr ztqlB>h|SxGTN_YpJ5mda>Rnfm-xqxfhwDtxePCQL^S(6T13?I*OF7>A=Z8~~B+`gtk2P%C78nfK_ z*AMis?uqOOloUy|cRXawZObtw*v0;Lf$5rzVB7x3PZhNo36EqvXR-5Y3hM4Ly?Oo1 zEPjRj@|xhK(}Vep(hXZTFzh@KJMA>A zQ)F}n$i1cO(+8*A4#f|KEAi~vH#P6Qg+7-AUspNp#H;uHdq>^#s6zKW%@6XQ(RPNDx}mRCfO1u8!}jal2CZwYizS z!ZEfyXTHhxgk_KZ6rBC3Q9SESTbNS<>&u#`b;P%g80Ai;k2XU%XmA-x*<7 zI62slq_sVFIBwT*Kt4bBlIe!ETXg$Ej4j+cq<%ggSh{M_j*ze^K5Fu1-0GitN)%3< zXyKA~ZY;W{QQ8rF=9=m1pZ4Qjf)i7s<_6zl@~Uy&Jvbw!!m6lj{Mi-PGSPpx<=hjU z$1Z~X6AGVDA6(?GAH>b64^-0>m#G`?Y_dD7(-0d}p z^^kP$E{Nl-6catf(9#iT_&20`{JDPYfut>+53GGx3#r?PJRI|rb1l-eugH&!Nt{z6 zFRznui5bg?OZd0=?Rj%fIpR(;ilb-g2n~Hg1-KqutI}L<{hdFXL)vOCT^)tqBg3Zz9 z;+YrMx?&ph#`tVp3jNE*7?O+lV;M}F+HytA>_;&6emlH$*kt|GcY^I@c7BRAHi4nj z*l-(M(>ex?wz<61*={FQ|6VyRKv-8o)GK<5us9=Oi$bT>xQh2k-x3SACY#Z>o^toZ z_nu|45K^OTnqfo90^zME+8goi_ffky=d0UVnkSs@%yHS6IJfuDnW2hPpOxkabhI8U z98fB$Ls*`UFyQcsyBOa(qI$xoYxl#7$Kxt03J%k!exG`4d18{!l$9l1I_KG!SDcT! zX5H)TUbbYQry(&V!Fb*Zp+)?>Y#X!{dg5lUXiz>WHsJk7e!9G-2|BlMD<6k;WGR(4F^!ph4W7_3tsZLk`z?c~qKQmjphi}dPRlc@2)A}>Z$T4Qs& z?)f3c&&O`O;#n?xYu|qGy))%-_lGCD)-$H87QFu__J+XQOS`)B7q9l@W#7Hzf#vYJ zk)p$1omW$Nxr9{SY|&m6xa97edLA|irKJ6e3ZCP0vwvCc+n?P2;EcOt!c?uhy+7Y& znP-iy5ov#4QFqo?MsE+NtBTFc)inuH#UJf9_YIcw-@CKz-Ha@gr~RSCS62y%E|le8 zFFgOv(Y)uQT1oeUuRh!EJ&=|CZ`{DFy@S5GflJ4i6b$vVUAwAqS=HnC^rvErwmvCa zIrDg{xT=jyZQW><_k=|HrZv4Q8u@t8jo`QZ1s z(fr?xm|??K({Md`ryZ3m%7a($|M^eslc%Rcf@Vj4s!+K$@^s)zR?gYbT9+@O(#l2u zK0U(T>%$ptFWa8%r&wpVlmDF4^53)9WcE9JpXyx^mAq8VVROQk>yA=Nd2MC|16|_A zrgCmUP6wmXhPH^*PgHgH4VgcaSbZmohilsI_1k+cH4pMOYy)vNk((OMN^Ko5zaYxb|6~`;5s4fsa`+ZKgi^Fj2MlL0ArB&QH}%Cf9G+{o@og zEz_90EF`X8UL2vyg;Syi=WuaTE19x?|eK%_||5MfZAa_jG zUS9kFFK^vVDetlN2R{X#-?W-w!}j~|lzFHz92ymQ4=-(cQd^x@^08{l`|*aU1}+P? zY*~<}trKguU|JD3o0jk`Hh-%!nO0Oqi|1M6{nAQnx(<$(*=#qBUnU{M$UWA@oXw|p z%9Lm2Y`Mq3s}@M;F@=Y(*mB68+9qxHS?0>>gR4FdYiwO{Ge%ReQKu+)t7%c$t!3P+ z<$b5fJ^uPKH80;&ZpP7{x7HoxxXmMEE5cd2xJGP`Bc4?lny{}uU=h!WBaNGK)(0Ol zxlIYn!&#;t}F;urhO z-e^6N7N6?qkdSJkeVcc>;|-zJ-7?c}X&Q({_=xPXY>jD-E&UT7s{eCT)+(=0cCiUl z5``}*%t?#Vo|dyZ^6VTONoq2!FLjb*8%m0@=A=25yROPjyUeC| z^2Hw~49Se{DW7(zE#O62CLU%s*w+-jRd;@m)=y_BAqi4t9^p&TvBf&o+~dgwC#E2 zZ=sSLSJzpe=2#y0UM|BQG@Wfa^Yc6B$ijka;gurUpObU1ys_Z6(YztVZsQ&t)M2C6 zpXzHHi-*&e?coVf)8jnHc5=?6ZygJFobX_u>)|}-=J4fPJI-$5J{`f}S|)0Pmk~5@ zN>4ctvP;=Y_qE&|yDAFA`u8`3qq)qbtoBc8fUFB)DvC*f(-K3YtCD?~nLl!Oz8^ z&t5pGwe}~^cI*tVLa^@xP946E@*PiwmABs^8L>2fb1+QpUlE13I#*c zH_Vth|-A`r!#?-GkCe~JFMe7Ip)%{Yrsk?J?U24jrU#?8yr6l zIW17`W14RAysSS%t?S9jw@aiJsT|}xJ2EqIdE%UIhk=$==dEOY+9K4JEjn}H@LPuL z;kcg(+gA9WmsK-9?NkMMX`;uhDZhS(yV&RKk~iubHT2j2X6PpT13Pg3{FmH=7r0N$ zJ=mG;U5E3_J0}knv9m*{H{88(Z5_Y*X`6$`e}1itH4x%l?{hWUwbsx>v)%HK^vN^H zZ(S|CYiCP&kDT~;Z}z8O{B5$?=d2_*Nd%ZmdHkG~dE`o(%%NcJJupc46E&A@;oOjy z+rPhU!_e|vqv@-%yNnAwnlt`2TPEYbi~}}4xipU=EMD+#S;J-cZ&v1(eKT^8{n!{@ zqL!hzl5_Qq2i)KGK8t)-%waTrQE73@hV|c^m%eP+xH5KKUO;=n0Pl+C4eAanjsNh! zh)8O4D}7im<8_Efk8|sdBku*4F42~Df80K+bk31iCx@i$1NjYf)>bH)2pw6v_u1?D z0!~ZH1NYnPm*6QA@=xd0+2F8`Um=8R(~Z-7l73Zf=>rej3r9aQuATU~c9ZvzeQQaE zz*g1drAq$eY|q2 z6x_7#Bsc4(Wo?BS=XOq%RXp~Ped>RJgZH%4Ew!#Ud;bXT(}E4Q3|IBxSG{@OABoQ? zr$YQ(7U}N|XEHzUa3nZr9;U6TG#4yo%B1%iN>ozR$OOmlx@zo&4$b6rTt+ z*#!cPxiPhMXXc%qA$NV6&Za50K7%{bQnk#RVLJ0p6Wn*;uE;+bTV;Q~8yS3=5hrz` zReGrNvVZkxQ?t$6>s&OqRw^%l_g<(MTU~Hp$xP|Az229{ZDzQ;nTkhpiZ5@2gr+klJr&8TZk^u5!xq$}WRgndwR`X>luD z3PS5A+H|kQ7oL{1`MGyroKD&4A;nDCH0^JeMy|5jEq58 zzsE<}6*qFg>{P$)qv7J^=dF;!0(86ZnSVo1iL}5?|!ryt8_^GB^86jw`QbAg5YsS@^A;=SoTz3{TNJgIBc( zRx>uXealVSvAbR~?dkPphurEd*J?q6()P3w)BsCUan@HT>qP( zFUi_VTayopo4PXZsLj(9WbHDWnVWFBv4oD%n&9Zlv&Wp;yS+visE)?iI9`?Uxf5m? zDzfY2-d!?5=BC{2bX?QuAaar&0FEQq{qq z)q@??mJUVRyX|+J)#;aoBkpPa&@VaSuKv6gue2E(c0+dGUc7s^zt?ZhT{^8IOkeI2 zS@|p5+LU{Q4jvs}lAbv(^&2!)NMlp`q z@6m^AHIyG8o7=o=P`3G$J-5|Fk>RXap(-+>)(j3u)9nlIuD#UqXU5O3j6$8YK8~|= z*v^Xjc6`k8o9g`a<;In77Wzl{p25fpnoc@=rVaf9>z}ubmGXI))@OGG2utlS(_qN+ zg{TR0D^|X%zt%o9tz4fZ*eG?-nwIL={bcJEWa z?2#PTElI{}^Jm#@2v5#Gr_>qM8+ZF)qsO4w`QQU$b;}|-&e*y~l677&;^-bsCOW*| zDd*He{`qXXTqEVn$5YO&F{+lu{=*CISSUob*)pamwI-Zf(e}P1ZFaMLoxXHWRbYzi z&=ambD#1+aW4G+SWsLrbf3G=_yfi@lhj)9sNBgG`8W-WF$- zHV4EWmD>=r?a|5RjQ6t1v$N0pl$3Zy*j=uw3Xh%lW`@m06^5X`e2w*+2dARtZV1-x zv*kE4E%A?I>%(*U7r6EaYcZTGCZ62<@$PqfUe0k9RYBFO+Rl91OI|ge2>4m0W~>&m zZ>dbU^!U#;C4o*~DoPe_+M(Vrv+bW*%%hGLrO|jJxPWpM{5ey>@sqAvSlx(`$6b*ht6Ut9i*UqK^x->$9MvFVNSd42JJ!>!M7bI{AT zjBeRd7g$J`<-Tkzn`R_0@sHTO(3aZduNO^I+WOk0bcKZ1?Z_VCy?oyOd@x_2t;7u3 zN8Yz`kE{;Yp8ZsE-h7Gje~gN4!xr<&9u+X0sZi^hGebAxa@fGyfuv_;5x;}hESSbS zt^J^*^R2^0b{i_kxc)Ep-aMM>xBdIhkPy^2nP(w1C-V>yQqg3tDDx1a zRHihT3Ju0GWKJri2t`UsN~U<;=hk)Izh~WRJ^wvx-GAI`UDx;PYuI~#&d+fk)A>1G zZ&p^nHGGUoAT!Nw8H%|6DHa+@DQD{C;W8~pxH>lOV ze9+z?!{OreiP{Jr9sd?y`45|l-7V`HrBt4^W=DR^HTYW)!L=?rg3A9SCsTisTQs9W z!r+NbW#fK>xxMwJ8yoi(Oz75Hww({wfBnqulr!%Vz6)|U9%&Zs9$-)iiLJdX_~7`c zQ+@a8q^;!%g`Ayiyb7`B8@BSRo(hSKyIIET#$1I=%RcFI<#mY;>7lnLT72BJ6h|fZ z>Qgzj^A<^HjQf5+HEB}(_qVCF=`odpQHRmUR4R z@NOM{({PX9N7#N-MFd~ggZ#ly>+&C6`J5xNlTpBS3C^nMDIY?XFC13!i>%th!k}qm zug=Qo6)9Z5c=n)Vr`EZt*nON@H<>sq*|&&md` z=Jg&v#?-O2dv9R0$^D~!Ms7;xH*&vo-?2Uu8^%@9k{a{7T0DqyLT=A{PreIZL}gA) zFy^cG4?NeUoXEIBG09@uxnI|7Jo||4d&RVYnzW4{Z}(QDX=E0t*Z(T0R@P)?Zr7tQ zn{Q@yXB+O-FZit_7PYqOyQ$9LtMUj*tCP`v-W5$9YCgj5D;WAE#qI_~-Tl-}(BTIk z2e|u~I3KlGr0w{Mu~tDb->qYJ@i*0mNtbWYLMH+t2NqbMY_yW1q~jJBTP4aJ$b&leie=5Rx?{D)JMxowr={K*<1v8nK9G2;|8kd!U zXq&fccIbxm$$RsE{Rb?b8M)TSpZmPGB;e$w;ui`7bl-XWLdC2t>s$RNR>xHwQw;th z9Ht&EaiR4?`4XoWVmdnnRU<`I1?aMvIqj?RjfOn`uDCPV^|RyTbVTx*Z*K~eMD8x4 zI*gkZ3Ni*odVh9Me7(bb^JXF5?CMCzyaMBNUx&Ba``3%U5n9h$tt_K^k&f%3!&AoH z<;8)EH*iRQsug?{D{(;7>swRb-7_bbEVbJAJUr}=+}+$t1(Sfu0G#uOsje(*QZops z3UCN#4tQOeS#mbHaec(j^{EN`2KCPeCFz*7rR>M(y0jNJyw$Ke`0$DxJ42GR{mP9B zxcO5b85#S_eQluG_x#lNtzdtZu$-+pV zp0DX-h=umK&pkz{>t>JfK6854D!j~E$6I#O|GJ3`u}VgoXKr0@m=I|l8%W%37G8Gl z^iU)dUw!9`Ep{svEvIG2htwK_#)KaoH|Gmnwx+i@{9NN7Ih(f(+ugqDS;$;co2-~y zcH2=Szko}I7m-jYts(YW`T^g$(`pVKlcr;OJ_qXp9+!8DmJpsQx;XuM{imz}1rZzlR(M4sM+nOZ z;5T5`diZioSd``{WP4Cxo8*|y>s#*!#@wHx&oB}LvUuNX# z!}jlr7ddv~YS#S?FU$kzc+p>DZfn$4znCRiGxsU4z^>8kt=PNz5u*b#WmGp?a2$CU z&I`EK`P@HQx15!Qm(!UgTKnSiCkewH2icQciwyU@S!W`Hl{6yJv|K>M)IAbg>6yN{&I&tsAxkZ1^AFNNeejFteAu19b z631fv>``Cfh0Y1ZsPXiQ$<~oa<5q)Ks+avz``+(bnmqqhXyTlK%9*;?Z1iK`J~7R=^RS!99vysJZ%nOjPMh1Da$+{L zW<1UDX{eNpv)xu3x8*^Lf~)F(#rQ@|iQ{=89nR4>0mhh{Icb{{pX8po;D5%Q&qLDk z>4R1)Ev}gR)CR*fW0R`IW!<5c0}Su$_EsEQ?jdnH26IzUi?+IF$A7jD(;WP8UPm%lq20pBM*PcC zlkYvX$vbY;*WyFdYuNB@?Q;;?@%&e+N^O1Nbw&pU(J{ep8~aPK99C(6*cug%OHZGd z@*4WYkk3U?;$@TIe)W2>Ci4zWW~h|AJbuEk@o#qlJN>vI?XiVLK>~qpsg(Nju8Q%C z1D8nzd>(vWz+sZfntp*TGe2zQVx0bWoxAx_NMP~w1M3sZD(3a>e-5K#OfVE?(2aEb zRViAT;h@PJP(T+(Kj3iQIHl2^%gOWG8=qk%i*(a{y-l|aEO=irQ|(tU@}|tUHsxh= zhGzfy(GXQ$SDMh>)|oQZFYF`xSTH75-2E<7R?}Zef2A**?Kkmh1sX^MhHwW287@9^ zNdEAjHDc%HLUsu8ig9UPH&vcxRh>_u%czZc@NxrV5TiouqJg=@pO1RywmE%Q)@gjf z+9@D&>?ga*#1gJB_T!8x;|76-6}!(zrBr{=70@vk57@G)V$>{aH@{US<~yUvxCXja-2>o%Od9 z4!c}YO`?2Oc@VSbvPXu|y>R~5k<@s~JT*+U*o!m4@Au}3uX-JQ@}-jvdykYJ<6hB` z&u}A@|7~f!;+t>h&jZTAA1aa&vYb|6a>iSN4U&DNa<3ByPotEfOc1>wb9X@WB0eL1 z(M;ywf0H-=WmRpcKBT#v6A!w~??TYxWW7iR4%GGgwZa^taZ=0iz00H{pzF-1whPHG zIb<|A#hKmK-xE$!K;ZpRv?yH2Hekni2k_eClld!Nehv3{29Z3N`DL?F9MQf8w`#+iPZH}A$o z6y|#USgSrx^4Je-bdsvLymXZ!w5Zj@VyGOVB1at?22A?G9ka)tUrpIJ(`xP5ezjen zhcm2c^0WAWyWD*0hKI*o)H($O!RO`QV0a3mytd9q6)X%ibJS(=Bxfshd({mWpAdDn z_tTJwxfp_{{gmiynGBSCl%xw2V;D9TPD#KWL*(~^+shw9n`W#l>XP?A|H-w)Gr_2ANg)#zujMBP7ty0clf9}j$Rm((FI`#_9bLR4fDr zZl*63NPaVSc7!h_Aii>iz8?XHx*nD9~#$J89hzK=! zF+CsE>IH9iqjx$Nm4$D0yOW&rso*Q_G|ldCwI^Zo4-fNQ>h+az-gu?zyL!itb#5uOi#;BN#%2BKbJM2}=j;^lqPj(c=I$9T!7|SP zRpy4Ofkz|$Wog#>`ux?Mv+yj8#HHkDo0rCwrZBxFr_RqMjtFAm0wlM9~r$Uuz4v>Bc*c(Wo`)` z%d<_f+_g7M2xdjI>e=~_$<}Jy=a55J=o}oPW}t3o(7ahkev|f$d2x<`-FiBxxK}}) zN|{AMke6>k>pc0ktb|Csz)(0;VcgaqXV!M1d)8hqm>5S;ARhow;{Qqk4^B2+(J&DrpH zaU(wygW2$C-!AGHeb`QJ>_mcEf4Xx)RQiR*f-3cmY^s&Lo5g)d+tZl8_=+Yz?K@>? zWluHR&=@pVu6nT$BoVMTL>K<{$Ipb)TK$^}hij$pJF$676R98~cbNB4p4{~2Dy+bN zzL)(`UY8e8yz2Y@YDvWic-gGCvi}$d`5DvCn+wFzVhpC*w%ms=l=EwFx zcm@MK%}|u)?|wyu26pWlJBk@n9AA<**-sn-f~YOt%Ze~Q?z}%TZs%sfy%^y~guFM^ ztWg;vppr(^wge(W(vrLhQ#7;*(wmpPvmiV|K-j~v)t3t35-^lU6f5`%2bBzz;od2& zh94pGTx#!x2^Aoya8jn*mPV#s{|yGP#p030B+2?8u4$^~R}3$&?Mm}jFQsxSf# zK}VgcH9qgEpp1v%Nezk~QUJm`lXGhN0Cvhp^8ep?{@eahAqm`V|9>yuH-|QTOM@mg zIjd?JQU<$5*s63K!LyV{q96i*W*OS=~WoH_-13)>9n5h7}^dDUa0iV$xtd$Pau34Fn49Za5Fa~pWJcZQF8khK1B7lKkuGJpos|m2c7h`N`<1^w}}uf z5vAQ*>MKLLgLlatlqX}?L{F}3P@iDy2o5NMPw^*FoWzhNnDt~Zl*}mlwx{$|rz(3x z(2@o;GNxD%D*??Nq8vcxh9&j`nCJlJDf#rNas-D)xOaqUV0mV&hR~B={YT)AX3tO` zIQ82VGi!jzz?ZwGD7g2N*-gUSlZW|?9feWTG)OK6VT6}}q^|n()ceoY`4gZqCd&zK zNt1HWblY!kQ`ITzo!$4K)^PFW2QnfKCLfW??0dRYDx=HI4u~awBJ|Ej7}PDvd49j| zkU?Mo4qhJGjOp-WP>8tm8kYV)%*X&H8&A<8&4=QXP(6=>{ua?FAwsT%^+%|jmM1?Y zU=k!&i5s(EqCl>YP03*Z<3CLV1_2ZyOsA93RB9n&TflKaRTR_I{fWr3ps1W#4M;*g zuu{+^<6e9L40=dE5aFzWSffn<8yHihF3@%b1k1z;_k9u=wvBbZU&@5rvn+!_#yIC|spbL~sB1}eSo_w?T*s^0bgWxA5O3c2!>s|$V@Gap6pOUfyC6i zK`B3`vS_nX|LY%yVOMBA5<|?mT?AbM_9M|F36F}xs(_|Iv$87aHXa6u7s?T!#SvS| zfkY{Ix4;+?Xaupv(w$_1%nb>{*3^Hx{mk5Wnlsd~h`<;Ie{a$J{Q_1@lS00sEL zMw@)DY=L1^SFA3KoT#@FUJqc>HDDMhnWHHu1H~TP-z6I^2GQVK7>K4RPK%O7g=Zc5 z{$z9z6r7J=?&QHglQfM#k`^}zGnojRfR1L2kbvRpSA@n11|kO735t#gYtjs4tdZyz z6k(GSr{!MqzV?Ajdo+zYW|4{L@#MV|79|%_1R#SV3=nKNQJBCA^kXHeFr zf;n_eim3(mF}L2^-DNg{yn1N#P-3g!`!+aOxm z#3x3n%_%_{saX`a9CsLEz5NXv^2n?`(U3F**r78^oRuIcuwaw5isg9NACw=Oqb51A zl=#AmMQ;7B>b_rUiMjz66v+hQ|#Zv|b28eRADP$N@{pY6m8-QaV zc@;Ps14P9}4MNTjfjyf7s>6rKX-2Be`4SDc1%Ib+2hV&49-79LCCL}muE80C9xKq0 zb}4ZCgj0ibZnsF}QFx3Sok#|E?SlRg=I((%s31bWp!JYw0;mzR?|`-^g-K9i7 z?)G}v7<}{4no-{+fLvt2HGw*SadqhB!CyWj>k>=oY$t)(0d5%y2h{F?@*-9Mbr6zT zVQ_p&_rF~V>Tly;9996r3oxZ{L?BN;1ng27uxlEu zNt3y*uv+HdC??Vo5{U@Hf&lJl!g`NUx&yEck8y#V^Ff?Po(A%O?||ILE4TYLRrF9g z0Cg8U$Ko6UGb?DmL>?R>=_$C}WFc_#iHQ)xlsiGJnQR%Rii(NF;5r@m{lwLcgD{AE z8~*VErVjP{0m>sO5y(`oWIi4{1!)dJ=Mmj6umGrJ+&yVMKpw8x2+$G&xq;x~_9N-w zA0ZkGqdjGW2n8z#^GF6)E|H!3l&DfewMzZYYnq_j(*j8^wm9;PQ`i+MGH5uxEFkxg zKjs+pCy?+@mb&T2&Rsf4X~3T+`PegZ3;q*vN%T3mYnKdEU5H{LEy2MiGBM+Rh13Bd z1tb?lGk6$eeDdA2Fh<*n03ia1RB#>`o#rM^GJwKRg>*^pYnS$;^-`>lg>2Om>B;#*VC@Pf9 z=^9M1Lvn<7CFxWrq=H+w{o#k7?FL{AnK(9!EYK$KdK`5M7KDHYsWdDQavLX2c^MutgdMn?&h=3qUw0L^YvNP^_6=6A%8(9r~0JGeR zxl;si1g}U)97qBdQs_p*NDWe#D1@J5hW8~J7oW-3;g@Kwjv^|kZ z1K|Sllu}au`yPrV#DM2{f8XXUi0qOScA@INoWTEybo_wV1|5_SH-yyu#{h`89>4~_ zu~31*eS@t+YH#e9{!H9!0$l%n&x2?daAe+IkIg_ZxJa0givwAyiRz1h{guaw#wdii z;%GW+H)uNSR8l@pjP{z+0$4P;i(rWMJ!m)4BDr!uss5mI;e0z)4iQFW@Na;86y+&MkBy5YSs_D)gzIPg#ieG|7%7h*T0u>WH*C zH~4s9`a^&%hJh&-Tdo30ZW?w321P_wz}g$2tw^ylIMQ~1zQ2c?#s}}Lj#Q6e&5S{TBPdXiTZPeABl5?tWcB0?AkRoZ(O5Z}Xdx0g_(&qN zMR>QQI&dup&X{yY2;b@kb|uW4lpJIsAX^-ctxPy>7O=D;co(EJpgod6mz9?nbyFO@ zygNF$9t2(32XZcq z2JX0nB$WVB!yVI_7sQ~6OKaKkRTA2X*muDw=&-ZeL{Ok$Rgix_MtmX7{?chm-68|h z%z{)Z7+T6Wq~M2o5H%;qI>=HHp}&{?u|mHH4%C>GX+#y4F#jQaNg9fz9Cv`i5pF7JWhY8%hiSNZTn~H)Oc41AYVw5!SIGQY5xsvj)T{>NYh=SB_s_!iBl03p zCHDli4ELG@e*$m^xG%dMJ#%s<1|1QSzFyk&I8?;w@{c|KzxU7_>akC$s6g$9TCUPc z{deB2A|$F1boS}dvP2>_g|=zZZD<+6Y5D>9nqp0w8e?N#up_b=h(2Sh$~YUGKX}qe z1JOL%ha`!ttc8J{n_D=37jhaoxOv33e19kKGhnk2psxSq1^?&h5fFe~iZRg!B8?OT zMA8_MGy+Ohd2YgE{xYd+K%fP5EG*FoYmG=jeARkVt^ncnr1$R;(wZV68Q@B^${+!Y zKtk$A)avLfz965JR_(wApd{OO8G9feld+>txb#`s*#F3xp^py@t&^~@$-ZU&&kywc zTuHNan; z#Fi8xCJAkO8nmq?8O%@Ok;;E2{pqgk(=u-|V zJNHZ!m(cFDDrQ4StR`(;RB%5M^3E)#)en2XUX*za-Z!=jq_Pc(FN6vuI&P?jh^@n2 zVH=@&gsn#FtAUCJCjh7;4JHd@BHTaHod5A{8D(X-B3#lgTFfUW3MBr*xLZ_b+-RQ~ z8wp1ocHlh2#K=LNKJm=xRY1juoYp}ua68@(*~%1J zaeesX>C$9nZ_!=5$bk&)qyZO*h)O~ha!D9H=hMCf{%0s1v8fT49wKj?e7dS!9iTqs z$>=kq0WqXDf6_$l?=jM%KqNuxh>N00Nx>Sw!8>h&6vDhA$@dT9PjLK4$eAbvk<>|u zpozH<{?H9A&H;YA<4I4=)}ApA;z6O0O5fUg_@yX8b_>%z$!^^<0jN8cdekM%D4xp*~teb*0|uEl^(>} zC%Hd%15LB^0yy*IM8X1Fj~FC51b`$gA-)s!Ymyg}Fo!cn3xj?exLiVHET3xj`00Z& z2b?N^1`mO1vV-6>iHaF=NISmnW7}qbJR{&t7zdmy?g!d7*vXH++`dC9aH%@da3#|9 zkbgsQi$-xXIT=Lf+X%}J7CKH#ki3#Y-{<}DRWt=75y$U?tZnt@aR*L0NJ5k%EEond`%h^7qK>p%Ppd6(+MC)@G54Ds z*yS6$LyMgp-<`qX9H|{>`JVQ^%QWFH5Z%{}o@_nsixTBI6bqnYkCSb8BriyA(2F2# ze$oPjo){^)Xa_iGhUz27BkBXlmwp&VdKC{hD0>qY|L@m(#)+~6G*XB)7URg1bXLzv zoe3l{*?;Z~8ldnJ*0l=gBCGs*p+)Lden`}S5Zo9`PIBODm{W z2AQUO9Iw$1R*2pyQTB!Mo(ZvaRCrQ|(Hk?XAw;tG@i7Vbwj2LW8))Z@#21khWzw{# z#*f?yq%b8RLtfAC-4;Z}JE~ONofA^`p)o| zFPcywJx2(}z+r-;&`BtPjfK6Ney~9B3YLYR5-AdBPXf*iZ5lpOVIMv`fKWO>j+aqE ziK3Moj0;19>E6AF;$nrjZ{Olq(*OG(w|3vD=5fJtULmy!Jy7FB|Le@}JJy-zIe0}F z5NYa2Rm{o)9)2HjwEgYd1{i<7G3LF;NFh{9Tkqqa@(00$ic zLMeU``YhAGhG)Cd{_?(dO`w6(MM({9EThZB#-pyMw*+k|8&o`!d-G|u)}b{2YXIFt zkd$}xAx?L9cbwls@ELZ1C6H|FvHpPP8PSSd5b!I9eUY>4F7WAccHbd7#zd}%CK}49uMYrp4y`jD;nN1B>_+Dd+inB^T2YhK=Vw@*d|HxYlZu$Nh%PWbC;AvU=&)6ZPWvD^(Z_Qa8N2TYhKZ7>uMTiD zO^O{w52@)n7`sPA@PT0g@f7sZpD7UWl-}t#C3w0L2Vk^DVRSVP+eu!EKbTmddA;qB zH2T5k*?5Bpet#K)74kHq2Am{gPmTsU1<_>W zQE=k{Za5=Hob`%ZJ2gxcSp|7C;ibra)tx4oc7VLk>?JM))d9qE z0g4V^yX^`&KPIgN%VTXin=@&O#k7Ne?ETMQzTDh@j{-coF+$nl!yCMZS~BYuVkfUt z+o)k#1SL;INzhKCJ%|zqnF)Qn`dAU5zHxT~Vck^h0=QMLv6@wKCx1HN!H0F8^MC)` zM}9yo6*>f)y9UejZvr%rCWA8;fAg+8pqHBCJL`ZwCw$$BRhl%gs45F9$I)UJLkZG} zMXjQF-~eB-ODu#r?9md#W-Y|tm_Qc?FG(oy-f1)Zy|aUgVBU^MWmZS|{SwYHx!QoT z(S%TbbKs{))9BFV=;{l$DTbL(fAl@$m3QSvr;4!Ap=2A3(*`=?23Q4OIHY88(!&Rk zqb?NhZ9P4a?h~=vIDJDN(GN*@2Pq`5!PxsK8!|J`p~Zf*$sp8Qd@6Q;YJ4Zdm@69kWoV$2B(eaX@+oi zCc5w6zn^F83CRS*#oe0??EH(n_F!9hl#VgQ`a-LhiG%<7=eG1NBMOe1ogu1={AAsE zq9amN)b{2LaV4OQJD?zT0Re=(H$Q17sA0KBMw-^1)rtL);;nXP6B-` z$ZUlD#pcG#^Q!nt;}%w1!MrRMR5GD>NcwVkB^5~OsGyBU^we{6H=(jI#;PnA)|GaB zB`#`ut%;~ON!!w2SaX6WT`$UstUp-}m^R7sf1g@oFw#ieIuZ4~w;L^}|1O7CJkFM- z5g>6-;U*T$<_v!q+$~vbEMp?k|H!N^*JK7Fy1Ja4j|wtE8x6lfg9w+E1O<~?49{Xf zdjPH%tA;BLE^Nc(r;NHpdD>syPL;LsgP>EJb9c3kH}^Q|lKO@qw_WPAg*7^hBI5*HMVj$vDO zw-L_U{t<>}9u^p5JHK{aftzS!<{9nk?w*NVwD7i38w~ivSvh2Bm%H$hRKMc}N+>-i zML<36TQd(yx6dnITt2Ctm-9@;L&b@eO-@(2|RFID$ zcG3n+weq7E1yl27n5s|93J7|=fceuIls*fX?7-(=`09llwcvvK%39!V-Q0SF1jGOH zYEJenwr(7Y1To4$R;Yqu@rBiV;|gJ~I<&5`7BDj|#*C7kH4`Hq>euWq>q;sy$S7a? zWv2wI;9}}{3dVtrLeKIpb&#ePbKAl8+-7?m$q`v_1f(GZ(YxoJ0%1OKOd*vvY|H>j z(z8(tWdvC8l>kx;*+OYeCaQKEiTFLu_)ULrg+X^pPTqwrE9{mtv+A=5SC_LfbH)~& zt3G{S#v@Mu?6y}q=G>aB`h$uwj2KoK&1dAHD^wT2T_S4(ZyQJAj{~2UMSzTA3xnc54*On+3mP2m^u;5=+^grep-HRsDBejnit!%ZsS5`%Dg7M z!7D(!TFXx_>pmZ0`}75e{`txyOo68rett0S9T;;LPF6j_YzCKEkq{B!u%okOKy8Ni z((XTU4zKjLY!K>V4C^uW$p1K2x38JiXpXDYQ7{L-U_xjyzM8yEc#+@f0 z>mvFw_ zFW%o@%B)}d%x1gf{zEz1Jwnt8TQ_x06a41t*7v9RmhP5MIx*qWl(Hp!5%NZ91p&bx zTi#eR&YXha1XC%enm3rozAPXj8E72mK9Mi+_4xE_fv(P4rW7BpPTkN`y-Zene@T8S zZ4d0Tv1eFG_qk_Q_R^|NnI1iEr%bQt7ukg`8t(~VEY=9x86@iUk!PI&pq;BT%U^r)M`7h%SLtsf?MaHqdFYq} z|BwqFadfk14E@gD>e*pjaee+Hhf}0l)Q!dYZCp@^gS$h7$0S>Cb(? zPn65j=Z#wFxM zqV;c=akxuswm&9ehfDhDX7eL|d&Xb!F$Ery)#XlDY2M3meyz7);x+k8Ejwb(wfj2= zI^L0`fVp(4>Fm3?9~(k0n@qn^Yh9z5dp%F>hCq+q_Uq!;^PV)Ik@m4#LU@N^hIqA= zt^$i-b#BMC{wlE!nc?um%C-#x`Xb_#>O2FxWjdO0I-1<(R9((dC$W436ZPwdayUg| zxp<@n@@-yoEgN(FdaT^{3qMl{b7*L<38gcBr3`iVwi(LTVo}|7TchGQ^7?mDf)1IB zA98U|FQUYB8taqC;pxJBLVG0+=m!`Zvef8z6keFD5#Dg)rS6|AneV2{hH@0y=-V8^ z#n*4lC||?2ZBTR5w!G+Dq2P?F3hBOy&8V zm#c5u)ZMxC@Ke@ICpVL<>mj~ve0vH%Hfys5if*;lxw-n+_qSDVjPLD?N^K0YxM0sW z#&IA(L*Vt^$3OhuEK`bA+v26LCh)y>Szcm!`4&caVhJIS?8}|^O#Vz9{I!d#j6GB% zph~EE_m(Z|Z`nk-W(F|cxW&nR{pnhT{KLHCX+6*L+w|g2xH)~gDE}*4pL<3|BH`92 z=`54AIy$vXZv6DW%B$L?%By#u_w17pYdaFhDO=%$aK*=#vpqzp(7oo&_mjo7rQ>SN zeOJ*3@cO{Z;^w)JaxrMG$Y^TnUWG&1dAYBhV>|i&{!*m8exn|DRXR}UN^ZxV!c*^^ zM5EOB98%eMQr?F+Q1b;7L<+<^$G!+1c{Hr5a4s->^;_N6+62jya?7=@*PHB(xy4lW zg&`kZPuk^FtYkK=RN$>^^M=_U2@YE6`n3_7Ut@knwk3p%T+I{ zof3{>pH|_jILZ+$+*!+`r}ehVD5|HybS1m}hc-P~AMFi>OpF(s9#8rYRa|XX@88xX z%DwBR;g_CiW#aDZ2XfOYKt) z?aW?O*z%UV_Z4nDy<{xs@Lar66mJ*=4j7YmUfCO8I`M*iHfrlNhhJgYvL3ZyU2_O^ z@(4oFkde{sfZsZwjrU}}KCn=BJu0^OOUBKogDd|0?5#K}_2m2sN+YG6dd03ybAy!E zK*_wEqD}ZBhOC}t_EGa^=bo*Kyir`lw@2uG%84Di?f1{hrIb8~U7ht-H9+I)irtb) zt+%b(J7!dTEdQwRaN6`3#|R~T`Fwve%HK;yc&V+JTc}{cFbEapN7)%f57w3ryYmEx zIL<9*(CB2jsQ+kev7g_}Rh4PitL#^~rpA{#ai->#lWH_lfymsSn;C!^IM4WFGV-z&3n!<&0s`n$qGCmhYv9Rr5x+AosMosQ#wl~rhxrMk(2a^qPe!e@TLZ#UkJj>U zS-!PH_f5|Wf|Wi6nYJIgM_Gi_ICrdp>yodQaMIadk{pMP;#X>nIDI*;uBI$MJ{`I8@JtyGz=OF~{sU z&?t4}Nm!lr=%@S~=cDz*7NI88r3U;vkZ6h~gmEtY0#oTe-cj)IFsJjuF~?jbTmJdj z&>&-}p2k0U{vkhqn2yz1PoK?Vvn|ng@UL|gst$TP?fC9j`sjVnvs<12R;}|MPA$+D z%cwlCJy~F7;Ks)9{dGQ@vPSc{9{qf|G)aYVHT&}PNqIgot?-dEE_6$;SvNl4w@1#$ zkk8faQx)G_*dC^|rq@H^*%Y=M4fCpMmpU2uNujlVheVvMw}lA^F45G#>-&Rl_f9eI z=K4C>2aC!1A|YKrW`p1P)k&S~|MV^VniqfewKMe2smE2GZ5To2F2N~e z!=Op3*{uPrsyS2#NOj1(9Iusock~&cQ|*lbH|&Q`x-VDEwNfwRX0AS>uv_DBTjL!m z$)V=`HV;qy9QoUE|6z%?#`Q&x5nmp1Db4>%=iQscDco&!GWLMS!)w{aCp^Dob{ws7 zi3?TOtzKGlo`?Q`m4B*#`IumF(Yj}^JFKd_?7Q=Ch%@qVdKhGwR|}2R#{IeP`+Aep z*@+GOiiL}c^FNngIQb*zUh1hD>oL8=r~&IQeb zzv$8&&05h^F(gu(c9f&egjd&nkHeR{E3cjPRF(2@_3TfakG?d-@!{-iE9b9wObc@D z7cnsGtu=r?!iH7%e>`H}c_Fp>feb@I73Fm2h+_yNRX|s>cmLYyuH)}!nw-uXCxMSx z79DmqCLSlUbY7ME&qYPJ>@tQToF9HV&$q8ME0IpC?&bJfp(B=M0jDH5L*KjI4SI7k zagX)hmXxAO&u<^QX7Zf9Ji>z1=^9qQ_7d})8`hJ{mlo75F8fI>>G9lV>i+G+E2F$m z7u!XbyWb7)y~HlVSX?@%G=FA5%k8k*`8#=KK?AkLwpwP)(gG9uEE^~@k9{4ggcP{t zrhYn#$uW1%^{1=+{ps2u+$x~0&!l4}+Ae!k#X`*VLzkY1;~4M!HA7DGbN3p*4`k^n z%6yCWPCh+pW1g;YG3MsGny-1KP19?RuQy97$+;RP=j^%n@W+iJjqA#TMYh&@&L#L) zmU2beKaHk8)$#MWRN8gN31xn@TrLCOZo`#jYnA6Z>$TAiA{FHl-72vJV?$jHH$NA_ zj`_Lc;$XjHJs+09HME~BHr;?@(QOp!dbNd=34yXXDfnaDyHlHZ)0 zTf}`|&#ShS*i%t!Port>lVHV06Q*LlH-Enjof+RFKW!v9c35}ke%5Ki>TikdERS50 zH?QzV(U2NQ-*%kGi#yTk1WWsQo*MOU&6)4UKg4CoWP8rJTu484wWzgusO=LU@98ET z%VV`l@5H^r83R%CpB^?1+F|~6afz5YMJ7~qYYba(Eq|4ZedKkQp-W#UbxdvEnTZ{p zmPvPcJNEL-T!)s?u+kUVmb7gFx?MKSam(^=dMJrCr8HMQUwa~qd)T_SCi3bw?q|0d z)tQ7}?QIRRR&8+FFCp#{j}C-@w8#DBwe_6mrr-Shu(89tF8z+nx^2PZxsR{da~!@Q z$%Td~xC;z*q9W-63Kb8czxw~Mu)6Id>-F@I!rku5i;gKdJ2xIcTOY&Wu4cx5jf;;?EX81&6)dN3o30JykB=sc3C0J)i{T0WkACq!l zc~$>tmk#RezS~nDyV&%8LYU>rsT{VYjV^ojg_tyW>cgBZ8=hM%kv)5C$t8D59;NSl zH$9>BzmntGYgI&_7T^PWKT|A#;WsTe$V}OLZ5qV{`k#@`%T2qakN7CP=c^A9iD`~gce;o9N|WZN z{Z(|`hBI{JPaP2Ttanzeu{}4O_uDKFH7b|>hqZ><#|-ZItlIWIOg4;DJI-$Dw~dP> z5_ss2?^d}Ve(k2_=dYP`+(jGjp7CQjEPt+1&6`zg=|C;hG)OLYRenoG5wGVOZ%B3JRzXtDobq~7i}nK}JU zrPEQ$?wU&-lX235P7uE*tBuX`koxUgkFHGTP)lszzwXoF`3G_1bH6rN%KFf+=i+!8 zD$x0(dfAjz@96|CRd4pRt8#(S;TIP%8T|4%SoM4U2m9{gB6F4idf{4AhcCUu@(EWpjTpnj5v$fdOsun#)j7K% z%JNUtyI+>;7!GK6t#h$g?w$9a^AJDHA{_bg;w9DQ7gd4A+qSvwonln9{=;?I{jhVb zfwQbn!y-3zTDbHi;WDIB_ny7-{3Yv5muEK@Q?n^KaKfHgA-YBu6{)c@94h|${bQB0g0yeHjODT4ubcRK&szvFlGY->FGbTP z{Y^pYd`;fV2exhWv4XWhJoF)zJ|CEx-IHtUx@2Z}@O$1o`yc7#rFm0A?OVD`6@C2wdOWIIEVD=7p0?c^^-XTQG;}_&Rp(LC={H45G3b7CYZ=+4p<0dA7nQ&n}%~AiOd6d2C z;FYW0kN1{jE`I$*iJ4O;AmYH`YR!>%Z)zTI+<0quotX`@%*%@7a`H>*6a?_>(B=dx zO9NBU_t-*tGtuRYv6b(CB?cHypE7JH)=t*u)Tj4pw-#l#xu2r1aMj+~t55!ZXS%aU z@B9j?{Hs^gGNf+PJSvV-F~VI}%Jact+bGtD{eGs*`g)_yh#Pdd3}kL6hjxn+k1 z@zga=0?->n+uYNT8ccO#Zu?)?t`Q(k@AhuL@JhR(;!SVdT{MceMAB=8#?0MI$=S!8 zPlu!Mn>kd29SXOOC&u4{ixh}v{GL_8xbtO)g?X_^12ssU@-SsiR$~!gw0>p|+v=7W z?+fh@z89?fQGMQ|Wh%~FxinqVg^TLY?rHOL*!qK7^JiTOYs^Ne+1T!NXA>?Ph>h3C zMcJyGi75+&KegeAqUWZ)`qou;a}PkCM_@|7^GKrvm28DS4LETk^MeO0PVvuNffeFu*Cko(OsuMzNaJ zvT`R7p~5b`bKu>D}OzoRO~|A)w?cU#iZ-p$&VTaWhLHfnX)e!yYo zwwSMH8&lTRzsiwoieu8|{+f1rRV!N_uQzy*&A2?=p#DM8G65#vfvzb@-=pmAa#H;- z$DPMVqCBc7c8V!GFLN%v2&!NIBazm^`i-{^IS%p;ji0+@+Lu3}zfTmW>3Aw*wnd*A z7#?Fm^?eszPpdT!_112P(h+aAqQw7JW#TX?Rhn0@Iw`5?;%7`R<{GhnMR?8HSWbbZ zT}q4>4T;G4NV;Zx0lkh0loNF)%mfWP13H`a19vKTh8}8cf9Kh5!Im<9(j-lp`}Nm{ z<^d6ou{9ssEO=F}l$2H7`{S1F7SA1Ad-T`HJ~rmkCBpQg%SEOY-EF-)bk}o<$vw?_ zQ+9R#Meg{K&#P{X*dORHaoyDQdL8c;2TtK7Y}eCysz(3ztvlL~v_8j8U7VTzA4i%Y z^8*(ek^zgjgySPvpNTcw{Ja&o<8qSda)uGhar#S_-R)of8s5G}jyXYOrA;(_PI1Dj zb-k4w>ZMwgPJtUcvrC?&T)V8D971;b=1}hVUlYgL+hfJ!qSYx!75~)WL(Z$}L;$q>W_?^$xi>+bmtTf4vcRO|kRZp-0EJD$PD<@A7I-e>JdZ zaJHvH*nN77+QBK=gWV=hmIwO7PJefP_9A_%AxG}BTSWMpH_d04sXcAeYwfSD|Hk}z zxJ$>>BO{dQSwLVg&t_j0Zz;7XmaE;qg`07*EL(jupzs2Fp6avrCCL4bZ{s$5V4|Fu zXL)kVy`;kJAw1+1Y<6Db|L3&`xyoE1@Ji9^4|_?0?JLW_Lyc=_+ix<)rY zJGuj$c4{U{#T3P|r&4~i8^5#H2C&CgvY$Bd+U18($^4H44_0JtKFu7sz4yc|j%9e# zrT(V)YB$SM%hVo^@7t13bTT*IX_5t}D_!ux8Q{oBrokL>SCZl>W_ z>2%ZTcEjYRcT1(5$K>XpAB<9Y*2I!6E4@0KBBmj2Anp6Kz;bS=PTJLS#s5RycYig} zMeWiJ5FrGlmjptSPLL)w^bQsTMM|hjQ;;S|4G?-L(u)*91%Xghq(kUUK&eVEA{|6J z+~NJc`ybq2?pj$aGMP-~%*;7^?`Q94Kie(YG- zW+Us4zTh{8Zd*F+(^F4`LQbEz;a`7QyAim%=>FVYoC4@=?p9e{Y8b{;cOE%g@KOBj zq#DTX%PNRjD|WIw+2`EoUcl?p!Cc+f&}kq5WFU*=Gv&wDA0;L!N=N z?gX*TRd$QC0w_RJA#wTYv!#xI14>NjJaZsPD?&qfG>y>Oj|$vC*hVRPd18Qa!~zIi zLca}tFaT=$*7ee zZl`MrzFvA^#?snn4jOMm*Eh3Ixh}=Z*~fZ6@b3HBtvM72u9fOPeWa104T#|=jH>2A5~!;He?uG?FS!}RehNaQtc70EjYqAlj06q*)3 zIU-G{?rpP|t0F&7zTFvft3U=!^#tq|R5Op8bqve~<+@?6lflD8fUGhJbQ{;w3FLXV zuafz@Cd@dZtgW2eCc*-!r9z43j27Pa%mnOkGV@64J2n!um_deN3s4_MLHz0Xaw3dY zrLnJVW^s0Q|FU^8HhTl7(T#!m^9V?$A^x7 zJsI`8cPZRXuj#-T78FVw=AWI6oIN~OZa!^VRe{2YNm^BN0Y!Ub+vAf{bD4WQy4n%K zVFP;RmA^$#{uBzjHKZF|`l!}U8Fr;V@4xM!9125kXfqPNozx$-9tQTG;JbFlkTmwY zpT+Veya9I3LB__xz-6D0*g5p|$Z^97#+*#c#fF+(qH<3<@cAgIzS4%>N~}nsM|k1j z5q&(GFkp3j!>9aL)~MxyR=+@XPMBQ4AEUaxCi0(vI;Dcooi~+~#4b4PB!rH4VYXth z_$Q*#S*t=Q>rb!tA?7a?ITP4e2wY`5+N;JV{VjFHV&uAJp(cR@OcjE*=5daJ%5^G4 zliYmj`&}y6XUtjF8l}n;t-oON=}97?9Z1JpEY3`h)+IEikC;NPQ@s%`alOaCeEn7t zD`&MBKZiotD+injn4z9yfAqb4 zk2yHo`@rUVaUsU7O>hDVDK%oysy6hfcsmv5?!B9f{N8s`9CngChn9{=S0(YK{l(MU zZ#gw^swigCq~~-dj1#`6UOy|P7w33#`%=n@qyg6fI3I{4-^IcJEC`{KWGB-z$pfO?fv`zmztj6i_|Xf}K5+*& z;!jS_Or={V*Gso3Tt3kWsPwkvT{-U;SeAxyC#6g7%g*d* zraufXs3)R~vY`rT6>5X3f&+!qdX&x{3br zxY_2%uiyb`5^^ldjaWa15b{)<6BMPrV3Xu4r31bjUZ<7UZxMA%#*(n=HqmWU(j2k4 zs=t6+wCv8`h?OWPqByiTt zx%=s}=M-FQ?nq~Re>AINd5mYpb3^F{tA;v&y+Cx55ItLo`@)WF(_}4bv{efsfxU}| z%Y@|IzNM#O1t5^EI-~XI0zmFtU6=ixLNABjQvWXSjEGx+jJ2`!D6db{Rs`i@t3m;< zykc@y`X%WL!|WUuPeg>9UFqT`#g_c4wGtob+No+U&{2FfM-tIz)7i08N1zdmiRt7d zw0J?`D&xW#taclmsJQB|iCsT=fRP+A%>70{f4b(}Z+l1W38vtR3kBIXn?gs7OyPVBp z{JDQE_#Ut^Xs9srR1sw{TJ`ZNTXm_HWOvhf@)u}^kU~`9-+n*txU}$Qai&AFkxGI> zuGnm01Ic!1VmOj*+}-BbHO8qw5Z*P!sZnUNcPC;ZKJxdP$UA~c3q+D{%M+%h7^G|& zxTjh(JwdD!3{ss)9QoevyI4<-{KU5LZy&)Bc-UG z@E$~qg713m&s*XlYVq8hQ-`KwFyA$LR~6X* z+-%&wi$fR&o38R|IY)RB?7tZV;pg;cc2yWFUNCL)T7FsFFNfu!&1kdzJJZMUz@qmi z#;HnzdmDdv*XnnNr>}d1aGh^3sA-=4rAw$79g{;&0-|Y;2tjY9mJRHvUB#~fnKCjjvVdI zLyC#^<-`&@w ze+=1cl>HNnoScbsE_WFI`aXLnDNVdIP75ndPb;5zm!>&vTjWdTwoz_dmeot<8^Emm zZ|yzo_G7HZVAZdo-aYR-@cH)m&r%D^sc{tffu_2-iZmS^Sy*i-M88m4yHKF}wW@V# zfn}i$yoExq+nQ3~t}8XzZNo;-h>LYxH5X5xWwTRO)bMwqF>JA-{`;oemYc1PGR?nUsD^M-lC2ubm}IV`I34- zuHR1zZQo=6ZQen;K1SDPUu?)q4G6_hm0GuV-g5aPT0I*>Ys20aZyhqhn+i$%4U{Xn z)m_kh)yrX*wdJ~re=~y>pzh}54z;c{g@iu&PVt0+yiOA2a{s%tlrR}k3d15yZ2!SE zq%}^_Wo=DuQNA1L9n$UjZ0IJZMRWASCtNE7AFGaY*NdTcrZe4_KWig;(=+;KgD6zV2R%`cDmrcuDmBrb1rF4acD6*^a`~VpI0Q+& zuIFZ}Vf7}H(q2SEZST(e*r87VG;QzINCCG#)F4?Yr|n< z-m%Kv-}*=I?YiBs;dY}X!}nPRV(TKGPvl2R1g$Vk>2|{T%j$EDMXHxu^Y-z|&6(YU z_HUu)jyIya=@VP9ID4`d2^8qN^hX<4_qc|8eA*a&2=&SM&jB&FFJYZWYUvW?96b{& zJs^@tvAMEQcw5P>$0yWHy9X4J19|GEVlX>0+Gn!`>*mi6`EDl1+s`%v<*m$B!3r&% z_Yd)W8|_a{`&V%A5*_G=F#}EbasEu@hN`WlV)MA4#_fY9xBY^@`cp##`i{y za}XVzF<1pm?P<7tkAynNPlT5K8&>@3Nh|yF7Qu#pXLYfeUu7Ogt7D!vmaTKPK-)m` zC#N)F6kJcY$g%#rZz<7hR~m)db`=y zzx?TSHf#9Qc{Xaa5==QK5Q^y+M{ zp;&oUo6l=UTU3BZkKokHaaZnWj^&<AU2oa)lNm`BN~`T9VgY&nC==9JkVMdJ{l45g8v{s^f6#Hp!c}(&#N;u)ezV z;^||$VA5ku|LB6MOYZTcng2aHXzg~xg(uVQ=WN%9<-YFK+};g|O&9=D*Y`@Bu=v?> zJb3JPJ!X6?J?Nx|U7VO*1BYXA&?G$M%91|#W)%Z6d%pSLs7okS!r=uQ-lWhnK}sr` z-eI7i5Wx8^|@e;dW=@9dnN486~JAR^GcW_Ui?7i;%JB_ z|DoV6C|*4it=ec(;?ofq;C@^YwL*s&MrTD*BELaA4LODqJ!!1}U3fluZZZb}g&ppE z3_7OpadR^M2zo?#s7#8_;Te?AeqX2&3!@|hggD^HVTaD=Vyl~7yAVd!*ni~DpU_*`;3*Gky6JNR_TSa=xXAfT@+*)4VMN*HrwmyPwGM6rebR)4IY3O4m$ z&oz&qCe`mI)X5R>mh|3qzwG_7&mKDqum3W_@Xp};?>#g74oLZH(=|q!J@d&9Bz&5q z+)*~gJy?}tY)zap_QBck`x?AwU*PdA#$O({;bak$6EKWz&V|S;@GYu{NoEL75t#IG zb^H=xlr)P1Mr)m={l;R=dO_*bqnp^%X(*O1sgeh3MiEO&7R5LXQwagvey-m39CDay zP&2=1;bT>Gv3=7|$T*d>zZc=EG68{{Hwu~6R3^w(r1yOJM}#LLX@lYQ5TVri;dMwp z37dT>L*-?ao6;uS-OTw;7?p3gR>=lm?Zf*swB@Cbi8r_|bk+RFn ztIvO1zsU|6pobbWPw@`|@Ju3^D)8B<=ae8n((k@lFVfD|<7@HIBDS5jppWk+#7+ek z62}`F#{uL_w6*_tLehB9H){bLv;#Jo(O=c!3PbN@ST}Cjuoub$tpgCb!qcFTYZDE; z;tnrZM(r{&WI!$2E^{X&?ui5+5498vAl4DbOEy8r05N)i(4-5kJzO~5Gr@9~>-XD|3d636-4~{kSH$+4Mm4g_Q6e-)Lq^IE;-AR3Pys z>c*kln^)UUHh$dK7&ap&Lyu2tf)rX-L_#DA`_lPF5kO0QP*j(Agp+=Z1dI8b9-tf; z_{Em^H^IJNxh0|@WYWbN+MUHZ+6ttx*HJKfS8*N&P=O$tT4w@=kBj5Av&}?c@ZstJ zcuX>}R@_@xpg|Ir&is9H4^nG_twsq?8VvG#y!dqEj``9hd-&ZInSp<-L6B-Fu&(G>7#*S#ews&3gDq6 zfF{jQ!LFQoz>on|f``E8)4>v`U<7bdPDv1;<4(6PH*j&XJ|bGWN$`DFRG03~8jv_6 zNCGe|QGEF=ro}xD{#V3d9I$(VhBk_&J`yt_p#x3^nRkxDqig^@N|M+Co-3AY;?)@T z>VW`|pAwwZqM+U#%nXME-kN{X1PhQe(ZTXj!apTJrV}9|0Cm8H7x)YXeWZik1c<|w zyS^BLX_8YS83oRMge`t0gq3k_7k*ym~l!R}TS}6P<0*uz*UzFhDyV zL9^*xeFVIW3ePa;b>d^l=bkAL;|NX*0fsp_CIlBbt|7V-LxsYwa z#K<<_{Lf}Uh-T7GX^~G+8mcuC2GY_-F|H3?=xqtbJrfREF18Q#ff@o${p2`2zgwxgPhtaDupwK;MKe zFjoK?6hFW%)-KS1il79r%+$saWS^c3S4skYbRq#nhw3ziF5s^wlENz#2|$dSRDtrS zgIK14*XlzEuF`feFRpiR^)NWfzGM58(6y=K{9_ zCLQNh)9!&$e#Dg}in|(0tT^DcQDI>Jow2nFiX`eIVmA`Of4qsu1F|I%e(w@q_oXEn zxK&sx9(zAmlV?L#An2+ zwS}eQ0gi$rfNb}_>u5`{=qT(1d8bMqX<#WqRH_1eH1(V~A=7Vn|Dbz|DDQ;=h7_ue zP6MWLr*$q4@esHt9}yVAh(A)?c5h=9hW@)6_H2lI-zUDD1WHTBvm|$!3<8HFvZd~E zF>j8z{^)7!tUpDe2QWfl7K#8luGn9y(Es!mynDgxkDtp>Gby+HwKcRcEfEA~v^bO? z;1AWiCB0>IWHqU>e(6vNfF_x7>ch>Mw^Lsr1OG7a8U8M?vjq&bnTnKvc;z3ORJSro zuR(CB2U9t)~9`1yQ@YN~U{ekFyb5`eGoI=TSIa59#nQdxQ}sR}IYz9?x5 z1or#dFXIyDfNRzTaBYD;76)50fKTToU1rgvVlS1?0S1O+MjP!a~Q&UEPqO)KbAVIa7PUf|)WevJ{wORFnJD-8AQfdMmdA-;rYRzzds zcm%LhQ*1}yg)VdPL6>q$zJtV=f)+UGe+?&ckiadcO7ekioPD44LtI}8O(M&sE|vio9Jj^jQ)p&{}WDu+9@r@C9kM@I2g7=$FDOCqV( zN8CZ5i5GA_Kvb|?DPZDtNK-6z56lM2Fr7VhpV?gv>ZLwpQ;XHifD8#w!}42ySX{hU zUh!;*iMgDQ>;Ekd*qY^M^{b zGTehm3?9S&o=rDDGSA}Zxl-UUmF3}DjPK#@qF}T(L>pK;z{$8cKPmbc5_`F@!^@7u&RZn?p^Rl#?KRp{05;NA0-evwvpV!5ZD_db5o(dsg}j6)S^$$*>_hh^;!b@$hjU|IG1oH@6Do z4@~NujNPTK4ZDR_%Nu_7KrBZl8|sm2;RjEf{fbLAWYZ{tasPfaD5Df0S~_^fofkC3 zvUF3Rn^GDw+29~YyF{uE7y_&c#5$~HSb%=~)xQAIFD{fRQxJzpGJ-Z;{yo={hrJ+k zP4^JpIQpBL*~d(I%O8h0v}zK0hGFX6WYJ~y zt4{-8Y=&f?r&5S~qEy&NAp5C*dVoDrFECNN)+7f!uTsELuR%! zO?e0I_LS^{s+ocuV|*ClO#9+u`m*0L8SqM5f_>Rh@Iw17mWss$(S}T}^SN~kpsl=| zn{Fq4m4tz1$BoOsv=#w}@_SDyUA%L;d#_7ZvcKx zst}VAGbTkzB!y?Uo(2vKm7mM8-M&m;-BMhqi8;%5h(vB(IiC&@-}S;krGPXtNibKSw&+ zP*wfg=WO?YBMZ});xXN4|Re#K^qui zVxTLmHDKQ1L=KnWkK14AZP^~IxP6szD{{BS zK5T6LW-XQ#(QmSS%zAn8^%Y(N1V&n`>m8m`9}m}tHT-qG4!BE4?TN`}j2cuV<{K+3 zR+d9mKNNrZE!#6B7vuk}88ne%wFX6qWH9Qb(oE)d@NF`D_TE?ew`A4pM+a%be8 zZqI$qv*`F%G>p+CR%K8N1OK4D_hH0x5G$R4z+R7_hq>j}W0NEMaM|bC(iiq=%*4=% z2n&5@iujc?5)y~tROO~s`PmXmuDn=oQnKGXsE`y*)(c4(q5ydF=t#tHL79HnJBe5~ zF`kD6dSt4xFxC!pf@<2!dBoCuY2L7X&}IAtJPfjz1X)fBJ@uD1l?UJR^v@;7p)8f zp|od*5lSciFW-er|NA8d1C|a2&sZJ-`d5eN*_W^W9G{_oI!(oB+pX$Hl}i-9i_o@m zr#-L55>+>B6FzS z^lbHV#el1kEL4%Px1y>DuPJ)y{qW;%+I2@o;}E=yFwMRFXR+Z)tMos-+AH!*-4 zj?GH*IL*nDt5Sw#x;!hw((O+pa1s!d%FXUzh?68N0;rF)rd~g(Un@aX67L?V$JoA+ z?=5Rsj|^C2JA5+(&n71fGHZ2D>y|Y=p{xxMmZQKh+c2pZy8f!D`&)12;ML_R_jFdm zI044l1L0$Dopg-Wbj9B9Gp$s6Dn20-HIs?QkZDhRlba_R^!rtsF>tqf?@z~B-cSWU zbqHfu>?D74Zo-f}$7|$If$p2UTg`ticY~Twg*uzh&I5jb&j3qPRlxul#lF&yIPc|U z`1g3<8$l=klGi@a(pATr$E(mowFg) zJz(>WywN47;seUsG^010rt?DWiCN zxVVNCTt=@sh*H^VY7Udo7;|1Kbzguu9BwD4`lbQ(WcOBp=d#qG{CP!&RUCuFf|DIR zMe6h2G%*|VQ=v&?nQAn!1cO~X&yMq!kM{kb6kis{A9(IIzl!b<^3U-3sVBEsmbUxh zL3W#L2pv#lfAx61!VoHZCnmH1rOF^H3gbMaR`9W{1^3G4n}g1%w@Tv{zR_EDtKOXk zY%OX5j>_*;*>-X8A-Blse6o7ZTlnDKg!719@wQ^z`?o&=*0?THg>KLGYgj3!8Gd4t zc;h9r85)VC^v>Eo4rlmMO;CP+AY-E{?rTB@YZ;OK*4o< zurVsjeNnl|Uv7Q1G2*bnPCn6+@v#pwu90RQ+bHRR)d>07V;*!OsdNxgdbD=n?r=$e z+n6qDcnMk>__xBsS%;_+#N9P*9gtOEfmQExIXeJT$(FF*`0S6G_oe0Ws%J7{NJnIQ5sYJ#!dt6Jq zbb@O&opEHJ{-iP@NGu48@65R$opd#ID&}z1bXaa#4jWqi6H?ks<3fXfm5nnD25#3+ zlnVcelMg#5$3LDZ{c>h?5$3;d>ocHy+y zvTc9%SVqD9VYq=}m=sl}evB)Fhwj^KVW6hz=$AM%0;~3_?2-GwNp}Vg-b^so2Ab5G zXw4HgNiKb-sKW8aq3CtYg?y^7g7nhs?6`IRC%)_}iHKn+D$4k&?O4oA57Xs8^>;TQ zn2C5Y0AeSB1Mx08odKsm{En^~>On^S&}ETX(DzR?H<}G1B1*DYGPHWMwm&(ubR&%( zo%2tw%j5enax#C0)#_D zZ7ZOgN>^Hit>_E${P=Rgc1d`fMYCAAnltcM+5~*7npW)Im8h_ zWM-b@%+{1w+tldz?*;QqEn;G7EJ(Uc!rOSm46WJ$EyS}$v9i74jJr`tnDBR}D>RXa zCKnQjHpB7dtW_U=9y>)s=nbSYvzN|>*I6~6$G*`f%&35KflnNDJeweOUfHI&;Wi+Z2X2oI(vJuy z5>*u{_FR9QP+4>s$lk2S#O>99T=p9IM>_GYu?vg_b@xtee)(1RcTQRSc)5M;vzH)M zB6FNNx^?k^$7QzkhQvQ{iu*A**1;G?s2Ny&QK;XngD4Sk&~P^Q_^0P(yTVx{Q+IhY zKYzAzYL55Mh}_q~8sK4+WIqulWxvY8ta>;8VR<_dO`{XhY)5G1kmFv?LCvpcT!W1Z zOn-;=KK4J9aQSS@(wX+XL8CKba|S^K45hOq zi6i^LtL#>cwngEHtIgwd1SyTp`jH-yh557<8-0TGX`a4hr7XhekpUe+LSGXEUFiiMVBmM=;6fw39OZ<#`@~ zU6Pn8mkFi&#V5HIe{ItJ_so){=HCv)afZdetW`lPf3nlfNw)A{xdeh$x1WNQ0|A#* z+{P>9_xt;3-O_GJ#-s0P?VYnj@Y`a&JV0cu8BpA*D zyO4`u(QZS-FxXvtO#x6|RR8h2h?+^0tt`Q!c;@T;yEjPmyD1~vGZLjm?Z&1n_FrnS z)H#(o?JS*3&b&Ij?}1Mo`gMn5Y{pG}&&zo6)|7w}v#^6Z6BFV7r%k`ug1 zy&xQcFiK+Hw|tp7?dBWt$E4YMeTypWvjo`$ zQzCFgaC|0kl5oGm_ey$~1M%pe8EVIl0VgeMu}#0}LkZ(_kOADjT~3!Ijo)qp!3p4l zayvjW_oTiD4mK=*t9#&cGl$N0iFz;!wMbIjES>Yx8PTyw_>AP?j)v~8ZFJaGQ(D*H zVwrgyD3~R#e?jEu%XJ{oO(77HCsI)Uhv^!KYX=5os`^>)X+sKd(8rFn zi$CM)>FUvG5P|^x4nOjcfkak)Qyx*J}RybE0Y+6%{h?h;951XdT%!(RR z?f&*^X_)n#4ahT@EM=1EMC8D&qh_u3AjFHd!>bBnZJoRGNv{=N{8_WuI~wg5`O{~!xV?(wkSTVamc$N7Eh|pOl49sf zb;{7psD;^X;DpmPP;lP8Lj?8-v3;~t_H(8#pr*1~Z+!l*t>&m$*2p(z?FKc;{v&GQ z2%a9_Y{Kj=Cx5#|Y7#;%qQb^nA{6MJaRk>s;*>xlY#e}m3m^z+4|FrEar*W3){h@Q zYJedF+ZURnStw-F?tFehF`g4BLOt!;h7W^|NU4BjMpen`9?ZnK)KHL5K5jUArld#^dT%RQszZeEH> zY7`m!B%#tY?5L-e$E@_G+E}%&pwP@I4t1KS@OP=h1y|X*dRKP$yYm`yg({wTB!X~l zCg|+pR=UYxpzS}$97$R}?owI0thC)fVTXIBQ!&4^+%!(J+tFllh$fzPFoIY!mJTxL z-_*vPDjRTTs475lAmh%5o1VU_iD3TS0kGP=vPPaXh0pW_9UkS1)&hqq@pBPTj-#W? zf>Ms%3>vwvv33ol>eSVky+2Ps#OOYAfQ9UeUxj~b5^fEs-0j+P#+PoL!uMKQ|lEj%eh}~Z;{2o%%t6=_tVBlTv&P^({lyx(Z!?* zJ9boQ2wP@$`9%tSuWDG7wg~ufpI!V-DD!o{mKI0)KS~+BZ~2?G(1LXEChB&GVcP-~ z!*rsUx+xOpDf^IF^4ZK{4g|KkJ7X)^KrhmdS!%gWrcJZ0$f-8S1BRepuz%s<&z6m~ z8;<$;Y@4C#{LuREzs6?>;j__O76-kO=;uNT`(NCC-Y+vd?TS^l4U%WTN3T|VklVq8 z)!EKI|LHxz;SzZ4^i}YVbsUZnRHrNdd0U0$@`I)>>J5$pGMfX|F>@*|Z^|tL$H4e6 zQdy1=Y9@TG{=*8F8g56MiZxuf;w9R@a%cK2@A~`g9k3S~a%$FZNTSFnsU&c&Kf(sI zHV2nZl~xLQg#^2kMHs7#mD)EVFgZq?2A4%Do*0(}lXDWzW_uE&S9dhc`Jm72=-VG& zU*Nx%VEyp}*nH^b+cMv6HL6Xmy>H1()v9f*c}DYuyA^MT(uHKv+H6oR-^*R+I$KS- z)40hzuU>_8aXG|=0fz82iKoZmSd!FEvj(KY_`_f|;xdC!L%!_dwIs-1b>Cl`v_nHf zmPL~qSbqU~SfYKt$|d2iN;)GaOd%`?uij8(yv3~axW(Chs3_+Siot<6Z(zhPr|Dj= zIO%SC(vBiGU=8{~@MqhNhaP}{*v^dq_Hcn!bKnM`^RfYS1D9QOf=9XAIt1gu$oAMv zFtVS8LR+)Ryynkm>Qgtl5S`DLxsCo_`Le{GEZsxPt$K#5KO>o{+9e#T%oDiL`n#6u zQHG=xBXV_VY=K{?6TC_b0{!N2dRx}3ou_qcAK9n9{4*$5gS09AW?t?+*Y#EmZ;$jM zR9L8}Gsko1;l4#YPRQw5Vn@v|*q4;?0wFu!#>g8r*_E9p#iv<<_%$MOkvp1tn{ zB%zMN+2=PazVLZZI{HTg9bU&qR7^}rtHZj#Qp^OM+yB|Wj&Y$K+oUn@WHcGa@$TMg zII7o^^J!C85}3{z(A-j;-Sa45iP&)n_`7ky?$vqydzUbEAJ<%3{eh}F;6?<<8qJav+J zA;Q@B7j*bTI*HZHlSePD-%*3dy6@diC$-qmF5A1_bH82dxlJW-n2wZUX2DkRecvG; zG~61BaR>$cy2W~=nog?hI_03!6IK>55=TgrV|xE6!={jfX7x*$3^!bIfAaS6uW8=1 zchi0PvX^SQ-TPz733sd31=*F#cmkJ6xZ9pF9Ahxj8!wmCy>E|^#x-#8q%yI&_xQ#=iD{aNKBNqo!@xi*KrHqr!;+6%9f%!l_ENtHJw9!?AFf3 zy4c-3cbJ`jrJIjaW;OO}gm6^Fe8=qL-a2}|J=MuA7ikaLlhic&0mvm27zwdiMVP+ z{`;}S%8x%BOG~PXrq9n$9jU$Md7i>F*+Cwv+D5C_c8JZOvnBWs73m~@`CSkrAS6^+ zRu;>6)w>vIIal=QQz}oqEYNRyP!6%1ppCu`v>v>KL=pjwVn_I%y#|2D3x$&wcE<6~ z#A&#`vAw0oi?UDJw%5*+_vOy99PepD7$SWDE_1`BQZ_O_sl+Nr=dt)+9IwmmN_y8c z8v9uerf)cBZrAeFUrcU}x{EMT7R4m*K>-F82fJuOR)XO|V#zEwLmCgY3Vk(GTfq&V z-F>8GA%R6A4p;HEX=pIpyW8+Zub0hI&u7UykY^01tXqw9;un8W@gqg?{Gv*+_#tT% zla$u9)I0svXA3RLkdc>39}2(hM{&F>$_*a{Sb9i4T6=ufx@@q!r&k8m#_X*0$#R&zWdidb3NeZkf!ps1Diql?ecwz6q)O(5rbZiI zD6O8kfIl~W5p4eQm;LL$0a&i$R+lq9ZT#j#L&}0IN+Nm;|_hJnk7-5(US2Qca`~@3rHXRbpui};wyviOTH8& zCHdVwKDh3K|AJSHGcuTK@!!`DmaO?Rk(yNCA@8-NpY`F+O&PAEsNtn2m7d>K8sr1X32+5y_n8zkDo}9BpZZBF+wjHdThP+kLNbY zi-I%YQDXZ_l^!~juh)Oj_wO+OSa<2XxLy86X(0C8XI`6>Xx=qOT`Tqf2# z=sWxjr%iJ4kR6Y|oyb-3ShWU=KwPu~YY(PFTm1;J^Y0fuv(GrS-ED8et%22rtQt|(|U}C-Q6WUT&SY{{Kg`f4BnA; zPy8Lj(a(7Ttzp}tb}Zd0JJ+kfbbxA$%<}Rw0}~TH>WzkIni}+K3m~(>0jN75IKM#&!Hpd}E31t0*b;J$!6j z#P!uBJs*docR6d>wl|F0SS`!$5ab_Scg*=1v2Q=-N0w%Jz%!EMag)(#Wv(O_5Z%>8 z20U}_S246kDOCmx>d$0f$cGm(q~N}b&Q-roT-cKXx_LvPNDDr_k($sO<;rn_IQk}m zu>KtnvxjfICoR6e)Qk3Xom}kCGT#Q7n3}hfmSlI`4fi@;CP@6n-eRay{QamQ>EEkA zUv`VBk6)=NHqt00>^gF2&wdbwYi482G}`)|kk;;ezrJ$rQ*Hhptx$BJfT99?fT+0O zVpQ<#Pq3$NoRKyG^zgJ19=Zy(9dr$Eaa7i7morBPDs5ovU(LA}wLa)|t-w?UbMy6GQFImwh%dmXm*cOQpr7lts&;xXyFwMh$-y}HmnuY)4ly|`MitP{KAW}T?j zRfRFN4grT&Qmfy}`EAkqln(U1Fx*^M%`>EdRCuHfP(R+@HMFK6=~uDFXGB0iPZV#} zk{3`$ZFjdYje36Ek`2iq)&zI5YU-1U>S%}AKpF3#Kt;pa*-kc$iR?wh^y%ay5D=XA zD;fU<_X&pZV`sR5_xmK@-?fZZN`0ZDjgKlx+e5gIGC)Ofl9%4N<6@xmaGjT+j!!D*e3?%s0&NYk1GeSi%n(SWElqYcRlFFsxrL3pO}dAlc$|Z)+_%R zRa2B5-H|MJ^uA=mA#WJW^^+Beqff`t3g;n{WlEY2;ezD6h+66+7yF_w0W|IncnkrY z){`Xl(K>wH$d+meBi0K;Hn68MzI!aqR6CQjVDadm?7qX;ZB)wrv7Hvd)!lnGj|1hN zgB8)&!(C`k7%Pfi<;lA>tf2yDjg2ZuhiuQxuZ?`ZsfVTGhf^YPM?>Q65NNtasOmz; zhL-5c_gxvJ&}UwH!>QEB^2XS%yfs38vlQ#>m)DEsnVqSTx&5k-UbM@Bo!uO z7~~BwPezKF55^f?($*5|PSe_b$IfFbY-socpFx|n(6PSTS4v5M1b99mIVxoURQ*XA z2#Sh2Tq(-|+Df%!4`Y~lX8bScknIr5POYI|-9|(HxgV;y3s^202kHMjFjhLDklwDu zMFGohX`XcQqi3{^7kl@~5IUhhUiC)~GczM=*75Ll@7y-$=AhuT!X3ka*K{K!e#>V5 zEyduiAFMGEOFj2Zxj!y_is_PQ{2^Y>)kx1frfqyqpB$MfvEMr+triSPW~UF=|7x;i@(yA8i?hz zaAke1oWyxO>0*+sS(^w8zaAs|H#REvyoWJ`7=9f9-&%l>G$PUXm;b8|Pi)cwxPfT* z7YH9Q^m^2JM+N;P-bE@_8GwZvjLeUA{R94)TW=0fjFf)GO67G0M8x_8aMY=&y%PFb z+q=_h>sUQtA~XD<3IpM&+mq~`Z7*M+4S^Oqgy08s9FYY@>|Cah0iyf>43hv*&> z6WHRT3^QI_f}n|ZX#chYX_byqsg>wx?$LfbacZ<{a4z1>7rYwBOt@-%7?Ok4up0+}+ zyR~K}Yg57PM`up%o!|RyjVrvd_YqCK;%UYfcU1FQ>pc&`9IN8VxjD5Eb2~5d_O;GZ z(qfdYq)Lq7+b z75JoZjP{l#Wt0vw6+3ldOlY;H&Vqi>BLQLYPIg>8p zHH!B;D1W@7xce*eM{%0rT!O*l3777#HH*|NQ!h4J+afgBUv{c@Uf5Ch2IDBQ54EiU z{7Sh4fw7T*h9=sv=NUF-CyRbfWQlW@IQc#*>!ePfV40R*Rud{oQqdrrLu(ljtgQbk zyyQ?mG&z1Mi#X?I%bk(Aok4i4QzDK69J1g4>JOD$KmgtHYdPWOP#=e(qJoBNic@}> znc!7$o?u(w{|4i>4omxfnOQ)S``ILQPfz4=04H*>9!Fp;7;Skh`?6ntsfx0**{EB_ zq{`3TVw62K;8XAkO2vkEUpea)X}5w(oM}ANmyGp;+c1J}o>+ z4AqYf|1o#wpQX3pnz%$AsM4z=R=zVO$+JxQiFfxAapq9|0%8*VvQ$=GgY()WAqbq!qnC_IFc40r-i>GYtdOaTC@U|M}atSE3;t6#rpGh;yC+q<6e zwIC$mMAT>I0+#cxWH@>fefW6o$9rn~x~7fKU5qIl9mL8luYh_8R_RkZ(j18}4d%n{eGGdX+Y`Qb0cK6+; zd^*RqLl^*g=nlIZi+Q*=pkC0}1k;%c^E2!bM(&_u=h&^&cjNlO?ABhw&Sh^Wm$l8* z7MfFgTG$9g?^%Lu=mFL^do$+1x^P_W5 zuHCkpw=PWvY{Kfoq^Pp_-;#ESE*fH1%Y};`u_TsV&v@p^h>G;th;h#2U;|CgR+})7 zGbDNn?As4c=6N!mc?&~EftfSOTPHMYoaIKq_qndF z>om@F&ilOg^I9HHZ=Zj=8%XIsb~XYk^Uuog+n0>r6@2b^*$4OH2Tw(B!((@oWYW!z z(G#43qB3E``6C(_A=Y8gDH57qMp;BfudF^-gr$OL(@A7`$zoMPR6^X1Y4aVa=wgE} zY-(DL^ob9-?D(Tf1tE0lY?x@>|DSsmYHp^V(VB@|9j2aWW4Q!P_1wNRwq>Vn#C&HF z*+1@MX1uNO&`Xx03g+y+MiunU^=`?(J{JYQb*{S8KL+s%bMSrM22mHqe8^mVYgb+@ z+1p+HAfMJv(HTpy*-2rY%(-p9{6G4o8u{2FaktdXq=7MghlAy>PccZh!t|roY#IxrV!a zQCRI6p}y0S_>wJEq3fRM>&S4SSSHznV4>~hN7gSsdpPOHZt#D#-N7y=swH!5t>iV% zo!piBUZQUbV`Gv?XS`j>JHO^3Q$BmIak0+j+fd8ZluB5#UN}CK$}U1QtmqgQWn|vg z?HxqyJOoSvr-?hd^@$aG3BSJ3)P>lFel%sIP?C3QQ=8Nr75gp(F*t&!U z3|xmKupK{OUc?X&L6W&#{c;&gbxrI(jjEZS26BUqbZ2*JYG+SYJz7~7-?-4|*|4=j zwtNjPifN(E(QSML@gI_J&cD7O!3`0! zS$N~V!|Q0UCH;a*w29N>)Qd06s$Q(ko2IGsVRuD;yyIBRr)t?${es|@(vow*E6-Pn zM>Nh@-7AuT?Uey#qjpb%nr?~tFWA>@_40j~c<$D1)+81N_};iUAJT8b_OxM!zlY`f z?bf(IMcL8fRfCRbdR?zCYP?N3a#L!r9jjNK`~%APa}@>UA9d#fZGX0K1Jm#-5cZW= z*_iQIG~UJpI!6!y{EVLKjvem0ghESx_H^g&7L%Pfs3$&u5K~E^mJzHdkxzvs>+tsM zAlcK8ifryxH;!aEXfMmvVec^6%uv#7H;#BOlb<~QD>4elTt$0w*-iUWYiPenJEMtT z>{j$2HlTfR;R#!iC|eL^{ceZBO~+que$kMVur0eMN|v9FR_=WJ9O88C>bJ(-7uqWzd>LnsgI*0)3CSnN)& z0UjhShIp7!>!w}bKPV~34{E#0*X(VS@Kysv_uz#v)(TXF z?)BZXDyX{FWPU2c@00^yvG3UV7Qj!cFz{Yi4KMH<)a83Cs{ZgY!m1O+%u@zA<+SK! zAJ(yH{UkrfV;KQ~ot^f=>B#NWV8LEw}1NJc#?{4V~8ZnGB|mv$8G!M(uXW@zKaY;Z~vOF~YC+f%9-72;SQyAS*uIxJSWz_=QP0 zD^O&I_egGdI}_nKQ1Zm5`4x}v8hyKkM2d?ar**LaWGgJ`ui{)5w7s(_lyc(5e4Ov@ zpoZgc0n@bqV;-Y~P(NK?dK&?#JENWo(YM)_jStJzst6;_K$l7NlBeFSZg&zAvB^xm153mlL9srIGm;HBON=8V77U<^1+;FmU z;n=_*1T@D!V(fMAN6a66^ToIdKUc)CDtcwN6!Ps5ZyUY6W$MwiANCgk+LE;gz5~Rl zF*dhjM2{}iwq9_0#r*L-sG{-3j4rKxejf4lXYyPHV{~z&0aWpdA8hM)eoO_)FZ>s@P=NpEsJJGI#!We3+s3L z^1MipU1!RBufc(%RGeaWV$r0Ntmo^&J-RevwtuW8mm7B;?3(+F$OFQYX-3($f3kiZ zc^K*9*yJJ|Ah1X;W)hFN-uc!u^O8P%1d4$KLcWdv`TZ(|f%oS9)E2RgFXa)hb(OGj zAK8(R5Fj()i7U7NrPAWHCZ)(b`5cmlh+alUEKpBGW6O!5TB&b1NRu+%t$7sTRlps4 zCGA(tk}9`?q?QRRbnO-wNU0A=2?8qcR0viK6;HoEPsEltc86D7 znK{*_Q|Kg}Es)ri1b*T5%xRdJfGytn&vXH!nZOcN|47;>+C*2pNc~NfHmjYsX!2NJ z!^}>p#^Tg;^zNoHwZYB#qcOYk&Qlzpi(Wh|<4Rqx%E5GR?)KZ_UqS?G70^wHS4eDC4&pFVf}YB{VgM>Rs>l7P=4t991>v%BnLjzn22JKVWbMEY!&L-w%(yLwK$ zSBzw_{HdpUJXqryo#VPh1yp=tKk!B(S&XXWLT0+(s@l}yef#!lA4ctYmbum{mW7tQ zRK&jhyxda0*x1=W_*Z#o282#bfW5o1gHomuSqky5Sn+#@9gmZ=co8+9_qQQ}Mn^VI zgMktpJOK84%%A4)OYq^t+ju1vg@c*9;p{aNsTf8$_D~m2mu?k;mKA@W+4nm2^}s71 zEj#m-_LH?bFIlUBP>#zPUG~wPKz^r98Xf7ap2%<0($?uhEz7?J++JPSD6OF1kL~J| z;vQ)5bR_z_A>YaTHJR&3lCvM;_$VVE`CzhU_9Qd&jpxn%J2o7FNu67yDdGoVY0v&} z`%0C@>mbQq<&!d4K!Pj@hamLX$t@=9zyI`UalK~7t}XiVXAyC6`=U?PbIJNTkjy@i zHBqjkCXslxSBzHr|+Uz^dVYLai&LWOWe0G`KDAn85=e>fwl0^)>rwzk-RS;?>;Y+4_; zJ%-ryI{cM;?Bl><+Xj4cs$O_PvpVDr5&V!$HiC6qmd}gAd`6i~lUuS!T5CfdYg0Eg zXhln8H5^SOZ!ys4Y@f*UZTk*V@4h||NwWB8Q>t=6aid@|g7WV#Qxy?b);R_W#)Rey zUorDtt~Sc!?}$)VCUOd@G&(wWx^!4`l-q@kqL(p-O+{81_>uu~rF@0%G16-6tl9f6 zw1WO^Hjvj(zIf6=_tT|wQ1~?2C;nU3fqfsTZ(!qhgJ2++qyy`t?y|GLry{lUyxITe zC!GWTs@u?lsVN|5*N4Cgt69$&4%TPlO49D?n&sOaeTJp=~JGOJi+tGl+UK_-g9q?W~|PHJOW{Tq zxtLT_qWG7FQPaj$dO{C2$jgK%q58mUK`}xDpzNe-g~R& zT(#u3WL$?R$Q`g=)XPbjuz>l`#JPUMvIg{iR3~S@QWSA@;McA&cy1Eepm?Wj@cAkF zkg*lFB8bo{489l`qa`G(5gtvN~5yTiyw?6q>4W zO0sY!>Za{|XPT;dlf}1rmvCmw`~aP*^eW)3|1Hhj=g#BbWL%C2PwqYk!;?uHU!!R3 zH`~q>)yV23fj#N}t*rdRwDmM)V3<9pFdy8786H%4H zU-@beseLyeybWDMv_{ax+XiHiuwJfV+@DE&_JeNWgQkLFjHv>Af$_yS4Xh>KV(vvlsh; zZqTd5$kc}mjKH$Q5MOaiWqh-2Pu6d!)YtCd?b=Xfa>PU%%i zdZ|@zxuWQW`?s5NL76(nN-XJO)ypO&*@rX|zocys6s6VUa<)3>#VelKN>2Mm-(Ni( z-oBGD%r)gVtoTfi-H{ewgjv@4R=L;E>To{ZcC!DEX53}Ud;!Cs)(V(lU{q=3pcc3! zo)vH^%voR}%A=_`aYA(|UdOkMwho5`p37MVM|^tKN=8x@$!Co#g+tZdc~gQ)W<~`tHrbf$Tgv`(gEepFy|X>WG^9 z=7q=aJ)Dm={1uiYzR<$zWw$~nkBV^R_Zf-C{2csY#&WBHN;y?oL%co4qif3sHVeb3 zr-?`$Dk2@VnhFmdlz5r}rS6O^wY>;S==48p0U{l5^fHnUQt9*tY-Sd~N*}&YbG40`kEcit#UcMm(I7T&Gw7#u|?kS+Aj6wQ-w2C1sO#@@R&p z)fgd$iLL&IQP`Iqasc$_$#zwr^LQbPlaX6TkpCy$q9H6^-N1lC)Bf+t49D17Q7?Z7=515HN-=1x zjT5Kc3J132SB8 zdr4Y<9Q_x()=cvzd%pR6YjgAKCTT5eO%{ZPv9U#QQ6WI4P6n4A6{*F7{6`G$;mk(f zKe~UpDwA`>$iPwbvgBI>j1B%~SC`y?mqp{bZ-3$lR(<5y&3u5Q((#k$TrBhKRyC@p z?QVPAY}Rn8ZF5S8$IoWdr1lRSsAgX!1f%T9;}RFy*szkX@ia9v5%Uqx+T-HzH(L4P z7KQV2_{Urr8mh($-k$~X9<5jQrVT5DK;1>8t=?i^DGqZ|{N%#?Lu{ppGk9Z~rfTDe8~+$g^o1Lz_*Ndu12 zwT9!3i+^H$(hw@=9SarYAXV&@{(_)ct#aW0 zjhQigwV|dyT*SZ4-ZtTk!gL@@Yb?xIHs|PL!B?I#1Q5k(M>k01IugTcN}7KoT`j3w zwY|eA8)6mdtnCeHbwrkxlW|w#?g6MTwB^qoYuSTci;9(H|62Fdsxk_zv(>4c!U=-~ z>dIr@Z$qxHdtMy;)|YeqLThBvxp6vL=<33M&gOG6C#;~~cxh}Cfm>m}1&v{2z+Iw$ z@I%)xd**ym`>Sgu3*}eC`9IkKo3T#g6N>L2C|c(Prx@9f=z+Zi@BS6*zca5&?fi_D zlrR-hUGG#DNADcPsU&Z3yBenn-`H;dH z?=EKf4l5__McSNxTc90G?e>d{-GhLKJ{0+ETkn12aQ&!o`}b}&kLN;=^G}Fgr$)E@ zu5BS@#P;g^=E9Kt{_l8wYW*d~NfBC&;oe-aG||TTP_G;*lV&g;gwj%)Nvg1fSykE3 zsO&Gk4ZB6EfIeGFGZc+lHTLz$ovqx3@AGw(S+I0okr;x#spb1Sg=Kkf>d*h{DWwB% zY210*(aygz!vq`VquL!wBq>j6l(V@HHMzVN9q1*yYXrg zKDP#4Hgn=pqots;!lXzn`{#Xe`bGC_qE0fJOUEleTy)B}?^UdCX{chqVz$ejs|9s! z1HsbK9-AZjW^7I5gydw8selnpDypMPHrM`n`ZfMC@vjd&>|gTn+Jefsuigp+D}9MC z#?Qj;0nCCHrkxk|Eev%sc{c-PRyEDMxyJb+h6FNh%F94Nf7RHX-N`@3I!c~Cqs0gl zPP%)vWqtMlLWMSzY&@~|)A+x?nq0}ZK}nsa31(gCV~VJXMXN0DPEG?byt7@JpC4px z+TeR4rwqG_bhhbVGbww+h8|~QE&7`L2nUP4pjp_MM7Tu55@B=~TGwatU~cCmFlTR8 zd-00b%5d$?>J^!1R0m9=d767pKkRb>=m!PIRc;Xre+?a_^M2hh4JJie{DD62U5@DC7UmTK7cKba(|2mV3Ki9F~h?8fWv-gRIZI!~p=1bax-oAG-oqwj0q9RDu&?D>_wTCosw5$_NZ7^%Mg{0HeI zQEeF2c>5rK1}!(tJysU6w=-SX0AZ1a;8?PKLmIWt(!AppL%tR(yRO%Rz1yT3?yh0t z717IoV#YtYF^Ma>U&`anBEHG%xB6B!_PeA#{L6jICLwLgILYbXSMvJb1O}1G1iC4{ zcj)*^NnLphe!j`#wW^))P<~fcXY+2Vrg$TvRY==z;T`m_ebkAZ%Y=h2SNr^zZ2sLo zMwDfyV5}p?I*f{;FkyaaHgZcZXa0qya_}D;o;VmVmIN12Dfb9rjd!2R=;~&n6IvSv z3|%1VNvxs^l0y|ucX=BlZfy8wZ*ZT5Q0|-NNcD(xa%5Eu?$6lOKy=-ETu5GRcWT_1 zTopauDi7 zvYs8t@f-($Mt~rz@t{no$qi-`1nDDJxff%u7p8 z4A*~gC`|Gi=3f8u`={o(XO3Ca!LMd^7KOfSVHP2y_Z^OxdU-n5uUs4Wd~Nf0_N*zZ zU0uJ0aD(cp`d!PseIdI`+u;;ka@TvVY_BmDdbPYu7~J~?j}U{xmZo608X3grL< zsD%iAkO3+@OQ+%Ur+oTz=vHQDABn|&KP&Ocvrc6kz>Gnq*xE?*M>}88U0(s)Fu~6o zpUG8NerDc2J6rz(Nt#r$l} z&aiyP;Pc~Q*)#dT2T~hwT+T1KhyYFxPLyY5?ap^=-!c#DTW4)uyU#;=$puAkS6SBB zom)q2{T-LA-TLD+UOa%JF3HB*CbBkB({bwXb@a8e%)eFY*lG$n`_UzP6$2#0ftf&vcv zZKi|2-I!UM;Ds-)kG;_~i!O|VQV?(^pto9*qIvG@g+UlQ`c`t_N%=e&Zu&dtLZ({V^ji z6+(T8mDR3!jjOlBC4`lhnLo*vjRU2h_HV6^@$T$ZyZuwKnm>x`)lKjsQBbPu5Qr|#pXol=0XY$K?w(~ez=U3l} zL?C9!YU$G?vj?x3H;p@6-x@zx-sc&Q;$5fc$o9G+%qtPsb;Y8oIn4i|5W7p~RYwuk zd@P<;E?1Qm8qdZmKtVo?*`S&CU8)Lqt}t>Nb$I>8xCw@PWluLjbjT{;C{XN(YrNX} z`A^@`U{F{mmw*7L#83rKPTh%I)TdEWi)4`UjAxQsqEM)@$eZ{~xbwKri&<<@ z?R-Vj%DAgkYxNVR4jh5!GTryDm(eKH&rj+d%6C|C;^z4z-a?Os?@XO^D0(0afgfLhX_haAdz{EVtx*gu zq0=LyVS{x_C> zUQ!=&Gji#v`MkMO`|d>XnfXw3^nFV!(mCW@?_uDmP^JydHSSCj)$o02+2W?*)m6n( zQ8pGD5KP)b!3X)vhkzLdUar^V7@uzix~sS;{LwchNk=w^TZ6HqD#2Z6 z%oD>YTKYjyTmPY9eoD8&mu6G|^Zaa*;R)lP^PtVAHHUpehkr9J#xH93-BHbg5$O^;vO>QAMNv#&sTYCA`E}d%gw2lOVVRQ0U@KP6|aY}>r4Oun7A47mG=*v|5^l9_jP>yNSR3P)*dwiH5Nl~ZmMel4NN-1sc4 z$b2WN`BxFnB!ZC4qe&;#B{}1Zc^mo<9Mz8lb~!K`9J8}W6R_@1X+F8Lk2XKt(33W= zzX8z0)l%aQ79wf1XTzOc_NPAI0Pu%VuY@2OghBV5-L+m5~6U1SW?NNQ(!u~90HsLGB1*?paZ_(j8Yc0*&v zzEx7(wujj=Q&ph7(~icx$*zewW6}CozjVGY8~mUgbrTGZmZIjDI+-+mK`+d*dQv-Y6cdU3|(ZmlKH#_%UjcL z&w-d{0s|jMqEI~_v`o~4bYO-C_!J{cZc|I>CFit%qh57G&-Iz79LPqLIm1C#%Eder zVvMa$OTbyTWcvC@DgrYxo%{S3?UTDlZ_R0h>Z;A!)b`3Px8DUS=l zLd7y%C;7U!Xc9=ftGx3a_PprR4_7>wWk#W|rL*rU?g{O1YFYLd>!zLlw$1uW@~u1j zqgtTlm*6|%;y6~2lCRg7;XCX--0Uo$FP>9(dS&C^is00d=k3YOYROH7J;`{v=j0kZ z72KvS4G8bc0oUjEQqNi#O10<~iFKUlmJftbgjX{CeMDB#YJW z2uiSVs(_E>%<#Zc%`s2&k^O76^~Ecd^N&Y*|G9%U8)jlCrI*p)#j>w@v4~esgb&v| zVbH2P;%jIg@7S>29r2Nd`98Ys}FTz*+luHUJ24UW27K`%~L+L zfyDABdqiPI#iOV3;Hj|DUCSS83|(di8vhPHLQKHum%gW4rnQ@4qd!QJFI5u}B9IYh z^Fugvo!{B8HzXGAI8x2j=iCb{Dbn{JrX>ErQ?tJoj%kNjoh^)kk0XtY^|GPkX@Wf3 z4^8^(e6p=|95h{j#!Pt_#aBZ>P<}%cD2|C~cV^49SbB?`dCF0?)bNvff@}Tqq|Y_! z87qEo?_cAVe@A~jy~8#uHiVCSQXTT11C8TZ-TY_PJz1jW(3_ON^+3onm%*mi^W&;t z*@}+;(EOVu@Kk+tnym=Bt2|jbNnz);Fz40x35m0NL%zAS}Rm3a}!GR8T;^ z6Aeba?Z21&Y8Dcr3l-wL0Z(zdQP)~<>cRDBeXSuCx4kW%KjN-=-#c_ktCNOIuRQS5wY zo2UA4KkKnLF37){MV7cg^xqlk<}I zDfA!P*xeY3*}qK}!%?8EzW7M%#oBY7K$1uDZA*$=5xtS>Ym4V!VurKpE;GPcDdKiW z6@7?QukkmpYZsQ*9eO>9#UV&!)<2mI|Fs7Ni{JFFUB#i1r$1y~I1EX(v@0%yD7v+1 zL;2zSO@m)5ZX9PTWt>%-RvrocDubeMoR_`1;m$vFx!Mbz^FwTui#fQ51sovk?Pn2_ zu3r-^?w$%Qnnk*|3zD|$KlvkjLzG!n)rytX3U9A8u3w!x|Gu6zczCOR^=X-QBJ59L zLt9d#e`v{MRv)#ZDFSGy+Jy}Nw5q{|tcFdy1)eDCu1@7ssq8QFPj4M<)z_IeC>5GX z6T+(3v>+K$AFTFVi?(Jrb1*+}PR2EwH>LWQUd>Do_y<;7r9Sard33Tg zlJ4x^dpXN%eDrfvBBO{6SG|uy3ZF%$`$>7~P7*_Zfkxvo_^15h>+&%V5}&=^a5?w- zN2`sF&A+?jx(>s&m)9q2klkezv@qz>&ZyTw<-Z7(tw-4}#x&ztT_yym+EpD#cf9~)Gm)<N{%0nEd2Lw;G1HTQG5 zvnO`FPQNQA+dYpQI})GQ<*3M?ydG>ln5((GTGmC)UFlf(^y$|<`q8Na{Hl8ti}Jtec_n|C`oRU*o) z8mq=#mqVQm_c$AmMot61%m%HM-7_j?6r__pdoFH$*Dq&6l7ZtVqvhcv65`pwy2DG;lV8QI6CuuNm`=UNL(7TS-` zn@2UWi6JGgzCEnv0IJxdWG2UWiFdH43rCX! zR);O&PlEnIc8hOQr75^F`b-7MA1G{7t3>TFcwJLsj8;BuvqWj`SzgpF;iuBw}>W%xRN`xRB=dIivKZ~ zRV0~x^{tB;e}*lf?1mEpFqJu=7Jxpik;j^La-w*$>1doQE_4%A!3`9!rrq_YZr$*Ud+=?o z%{Mis*39pFy_1jM!5_8b46GXcuu$Iibs>f408wm5w)-la`~k=Nr<3v9!BcIHy3^5@ zz_g+5M_v<4X+3hz-}|3ly&Lr8U9fsH}YCa>0)Yt?BAbPw5C zln(EpGhNU{Mflj86h-mLgwm{=jGdV6Ro$JTET(a{Z})yIY6YDcWPd%T=S`oC$O!jB z{|ksYJy`CaH;S|TamsGuzoU566&P7DZ?`&F{@CVHWk3G3)_MNZQGX8ae2S^-;z8p- zXxwU0YTxt8gbL|j6MMK;lNOtB^@?7slm_GCGc$kaR~@$DLhW2-Wid>}ha?<*KKiA@ zTUKLPH|CusncoiXZ?xFBB~(Qc6wVJ@r%q24?u_QEs#u>QyXD>5Y6~|sxHCl{gId5~ zjVgz_j9zU@0Z_{@yfG00BDdmaeaQ+yD{pkPhafGNiW1zLMeTQbdy_-`uMLO_^Yk~} zcJg=|l9bF3$m+!><`>9BX8B$=S$uTzX9aOmg%D7(&5M5SeDaGyZniUQ#mv_3R$AAZ zT)o^0Vb<9=71|@gK_M-IiyD}23x~SRhxN<5kG4S%&qmEUx49s67<<6M-fSfreA;j_-?< z)Jrdp>C4!ByG3rAFFCWcpSjug%H>0EI#LB1zCAMG+bJ_qm*mk53l*ZKQP{NQ4OFoH zrC6PBVR{deix*%Zb|*DiQWSZwpv`h1YXK*3cT1RvVw7~gO7pz633r3OM^N_Hy<}kd z`SPO}G$I5Bqom;0{Ebo?dqvs*H8$-WqPtXM6FL3J;PcPK!C>F8S~Sz*<=dY>e0uj) zz{-)qoJ+%MR>4j;FmY8qr|(sQ)|=ya4Nnr2M&;g}YpBru8QF+T>B;nRmg(lIvFTo2 zi<$775kWa}Zc43b_E3MbI?6zK82!E4PBg z9Z?iS#WA&Tg!4P3_3nuGTXqZw^KG)BH)S2|t$B`u`==Ui zhdU7Xqj{L_;U=b@|G0I6F{i`{wM&(I#1b8xmD?j&i6G?Xvbd0lE^+r$Z~%to z|GyYxO}|4(^}Trs_Ql^iQg)qgh^TTrv?YO-kMIoYqSw6Run(98_G#p9YS#3|&`Sj5tO(yb^iBt7Yd->`oMfCQUI6%aY zDz3;bqi$)n6w6tfy2Bw;gWd7?JwwUxh@-mmebe54VXU5-St)O^VUon`hmIGG#Wze@ zo}@-AvnSaKQL*Kr3CfAq?H%mqzxj&$)mNYAiP@=!x!{3iM=A;Hg6UPJgV2_5JF~WP z(7~x+(raZ(C3f)*K)VEG)w2wS-f8IGsqSWT0o2DGtgHcFMJzy3r-GGfGeEd9IRU6P z60GQ6YR!;9a%f>%WuVv+Ew$q>1G~y89U;JGKw~Y98HYyTN-fV7lbWllPlCjL2 zHWO(D?4Qdh+R(#&%C*2HaJAx`g3h=V6aA$m7&+A(Lz!p=7S2E#h>X74twLl*QQw>I z1>mnWv7eqV>zc&c;9#`yYP@kvd%P?RdxG3fPVBklj5m(3hTVbQP(@~JcV)78&HA#G zFZvq6agAGrU1k$rh2A20=oB_VXB0vC!G4#4P#<&gbQSv|!}MZ99r4xtPH-n02QC#ZtJ^R>efNk!D9Yf?w1g%MD5_1KNyuU>(B|LI8fu}G@6u|crH zfL0ch0(mY5Y|lC906zHf!?bT))sB~LRO5w9k0I9El(K)yC{2p0l|z%Co!OinF0j`X zF^!YBx%C7uEF?r}LgzpR5gS$6ncIbd<;(r_UeT`6d1a{&iz-dlj!kq3Q`J+>O@{%P zdg}YM_W)yF7`y-#f?zeU{Fxu6b@qZ6eXAKUmruB*=r>gUDBc08OsmRpA&OxQ5Xd3? z_hJ)SDYn*W#*cdu&i+K-tg_at9P~nH3RItg zGwCp)5}^$Ud_aX*spv!Em?lH|aC5(}{O0XY0;fN~BYq(Bm0w#5!3IIy|QV&pO^$>CZISOX&DF;4MQ-B>K20^#=ffa`k zpu13fAsTf6G6`K6DpeH4#l-$@f*LTcgUeNE$uA(xiNJelKO@>9&?t&fZFY#^wTqTS ziwRw9yUUTFxgDG!));vr3EUWDk%1Kf-NZTwoXG(b0sa&#Wqu-t6K97J1@$@OS#v;^&?o^>D=rX9OaLgy`7NM;$^ur4 z=-hNb3IB|90DkPx{i#OH+&R&9)l8hJglam9?aGV&r z@~5mfiJ-X~5a6C-5Lm;sDnmK;FaWraGf70$ri ziHQF9IC@N%{69y)C#w7Zb2J!I2>#DuaU+!QKS${+W%PfKuCe>~yUvvW{g$#m%*CRe z8-Ahl!^uVfTKyb|`2*a%YFIcm7MLlZFrX7(==q3sTxe1VT)gu|m+UQs0b&cpZa{wG z;vDENRMjS07Z(P&0G)0;P3=E|5~-LAv73uOP{X!tFM3d#AfRCbBc|F||Mwhy@(pk> zIQN1G7pf7O6&E)I&Vj%H#fz?LM|UA#Q2r2@23w?KP?p20sN%T`af-gi3wssh>@M&E z64E#SQyfwy0tp`e4`bBxLVM@p^d7SK=fnGFVwH z`l#mOoBQy(36g^gEvAjLMd1V>u|;^QxiR5 z#IYDybS$tPK+b7aVgag?npPtIaOk3b7*QBHXw*3s0~HvUgE<@^XJ&x55Ks%{*hFIR z%S*r*FF?_MW<6Je^m?kYL!(~V(mk+I2JQ{TBHHcVU1$s)ZbD!g=s62OiR3?F6DPv| zDQ7B7H4$%&M4mWN!^+4n9(B+1!2SX7V=TxGsg#SH* zAVid_%d+bpc6-uM2xy`#Gf*~13MPiiwu|{M!6p&Fqbe21*;tX_op4l0A~Dq#hy5=}pp} zA!HO{P3pja1t#ZAur`W<)v>r#So8Y(PQj3S$N)NNelcrR+FXD_4!f8efXzjdkUBeo zO!eyOY8Qe2x+k3_p4H+d6KxNe4RCcM$N^CH+>9k2XiE(Bg_g@JNM^7Q9lRQt;7;%E z|E5~|gGe|(JocJt^y;r18UFa_1{x_MusYtA@~J#_trdSS4FOZTdSB3{3uOyewGr)6 zwMh*$x-Yu^A$vV*CNTJ1k*j^k^5pz{^=V1ZYTLkEmPQCnTI@fFNm#~KAb~dgYVJUy zCJzAFAiNihIyZuCRi;_diV~Le1>#|uzkA_WVgdong~D8m0yAZ?T1aA~7I-9DVK#|K zNZS*nv_~2jD(zjGToyYm@tpIn<;|cyaioMY3doJ=mjiN1N$&jsBIY6%^Z)q=cFaw> zE_f40b-LX0kLAA78$Pd0*MSn#nkG}_{&^S-LNUnm_(&`;;Z6!9snL=YcJRhS2(v9q zhX$C0fWQ=R#eYs$QUBNf1AppOZUM+X;y_3<96ASNY13Jy0r|OUbg(5w$*lQ-z>w|r zujP)d7%}xG$djCZS!3`N>j{QsP+==BVB4le=3mnQnJA9<@w?_WOT-ei}Za*_XEQ89R%bL^n z-KY8{Z#*+(K4>7xctCey5FpC|>&485;32>%qnHu^)*8V4%n!9p1PdV4k&LP_%RNT5 z4l_zqH87P_7nwpWQAfC#IwqC~jzWN}VeP2cL|_B~KLF7L0N%A1fVTDG2Fc3jP9wkk z{V^Lb7$8~g@QCjUrCqW0|K@l7Z?spsRk0uhK-y5*p;~$YVudbfNKo8kf=*-b;Af=h zN*%XpjR+8y1C#;qfdU$$NPZ%&YxaVzTAa!y1QD=nnRu!cbf9P_Zj3IdL%ie74fV1V zf(7wj&>*o=ZNhXbgw!u<*t})`_15HP({Z0n0bznrFcd=d-#cQ63+^DGO-6edlUUg# zXPs~J0rDx8SBhc!(`gS`2AkyI>_A>8mtC9EfzE848lB5eDIsWH3M`1Z70%9| z(jXHRnmVOcuv7iHBuB;b|D}_ufU1CUJEJgUBx0STb?rj2Cf6}BPeIm0fSoU`^E64w zW5&z}zO{HsYC506h1({IZQ-I`Fxk=3*XbRb#6UyJH~>8Qe-s_bk5xudLa2uVm_}~< zq9k6>0eLES`*5^{31H8|@+Tgf6kiXf!_`$8BZ&zWV0hHu#p77+pxbVXUkBgWvLUYa z%RNQ6$VI}+l<}=MgHxs(6{Gx@KIb2ltV7h@Te{}6@MP@NsFMNI;YbY_K~H*^(&v}M zLMr9AQ(4V$5 z#IcdHEi}TVs|BsniqCz*i3!aJAS+MlWPSg1D$2Z`*}5o>XOK~ROA{FKmTbMVRnfZk zH(zQgK6aS`Cs>78b%r_%4!0-F_X)m!uM^IJ6N0tImZn*O)${fAwQpa_1;}z%;29`D z4YlmKYqM6*0;-lz$$s4pM(iHU`!GZrcNz6`y>WchEq`ibXpAJ4Z(*MfLe zK&#e3K9D35cSuCIb%S*_Wnz7Xo@XgOQ%K!+4tqzQq;ZikyJ{P;B@Rksvxarq81Hql zGuAnf4X4&D5+>c2#y|b}y8|W|^GQ+y>GepWaJ;X6ySrbbRb5i`{My_3+RygfVoYfY zKvfV9kANhktUS*RM%U$Yn(3deRNpp6qc9iQ`FueBB!m?;Qs*}oH?{xlav$^EP_xM& zwu@`2FKpVKJxw%d*|IvK_y8c#b*srh7W{ayvg4Y>x;P6)W3ncwZ9)-UWwo?gE}eF%(ArptG-UO$xGsSEY>0r2vPp+ znJBXXZoXul{U+B#PKoMFn-<<=Utv>^+PTe<3&C0i^!dIw=A77gugMj-UM|HfN=`}I zvbr@-ZP7-_C-~XDVrM%wmR zOznoR>``~<=Z7$AyjLd${_mnwjpV--3jeb+W9Bsj9TbB|*Y874U(i$Ex}6sa=E(bh zPw)VukqAck-j9yy1VWf_>7i=9*e92VH(ubxO+S;elxXyIU&31dMFq2iEE7Y7AA}xQ z_`VvuTWmMR5N{nB!EB-ms#=gtPD#}#^ze@o@W3)mDHlny=*1y0yvDbatb%Kq)_U&hDHM30D=ld9%Rc&wtGyxnN`?%aLMJ{bGvDLT?@lf%cV07HO{*j^G zr!(=!b%CTF_d&bJ@8$QH*}1`x^7t&_F1t<}37h2Rw)-g~lPL@(;C43CF<~Mu2@kBw zTvbnu`!f^jiQDT53;B6>kT?;K6L1V$SNZRE@?7VKt73ifPt&p1H|e&Z3tJ)XvZO89 zEbPJ-E(g=kj=Vo8MB};FRyw@HG7t8%_EA4OBKuR|n=77+*^r8`2%z+zsl8$ew3TQC-wjO|Un!d(FW8c> z(>lhgzpl;?oX39r!;xcyLnA)9NVB_v+fOT3-T!XUJhWdqt~>2Y{roG4=IYO@AH(pf zZwm<2wp{d=i;Tb6K)j1I(W!m&^KHJ}nNeg;9IC!XKXHton=8q>4L~PrZoah? z_;w-}FK5etw0;awi2Okei7>YR#oAYXMft{WN=PUT!q5y1AW}m!bcd9HQqqkyNFzDY zG4#+PEl3K8bT>$Y(ltsCNY_5!-|pG7f55)x9G-LFj?aCiYXU5diY?<+G9C$8N0jOy zGdM)6x8(uU)%mt$YP}Urx6sVTqcjRrfMg9c_es2;E_~gv+ppcRoWUH64V&71`GWHV zn3iL)>r&r6o9%*rF>Gj!cv8WXIPl;4*Vj>6-oQR0f7k3JC)i^X10;uR(ILpv)^;R& z;2BhtpWd6%yb138El`2yAsUJy2Z|u!8{6D<9<_DOMw~`ao3FK+j|JLFT=__GONZRw zI7bWg5X1%7gZMT%ZJAhbdi(~ccqKb8?U)B{(dJopbSfl@o8!118yJahqe58r3nd&_ ziHDdDO#X=}7?$A{5w+>PSrev~OS3&lv+6hq$SftUjLXn9P{Nt+NRrxc;8HcY(0}ZS zzi})1O@m=yJnDQs>G4@vN;EdPIZ^_aUuS7Z4UtNHcUaB9J8*_}R|Z%(G&S&6pL`!k2ZXjddD^Hz)p$&;dIoSFHK zkzV5I;bN&kAd_f&50H9CSp(_PpRl|A*|l_Y{*I{G7rQN{)NP~q0%~us?9%p`nA!=|4*^1v#u8zseLzn5Q~*fu8%vYv zWMq1?%sbLV;H6~NZ3&@~&Ifj1Y>_s^1?)piJMlT9<+ya3s5mb+q;!Nd1C2fpwmze6 zIxf{ttetfrcDqjS0_GCta!>1%eD^&w+>_3?2Y;8u!m;_WdLu@l*dH=)WhK z(zmEgl0A#0kRDERTaXf7l6`0taN9!(hJZH`L{;u98}4nUT7q8^*i~X6XI65tsugL( zqx-UujaHi-b(w`>dn@DKR^mjln~Vnq-#0;Scg2mFJ175!th^TsITMgM9$lmIdmr@d zE#q?Hss9YCkV>zACbf3nZH%7;-_8pj>MIC$kk7MulgaEQ+za$!c;c(sEsAl`2NIg? zPyVy~>4CM#Vcyl9jcCUDX8fq|-{@ zKqkp5-=uIH^-m8~XXWGa+QP@z@OPFWpObZBVqyj{UW}1iF_YN{%2O;hwd zLdPP(O#OIL1yCO`k+{sxEa&^qZM%P;2AN6!%l`NTu^1A#a2u#Ft69#JUktWVR?#(1 zwm?fO*Nhl$mYbEr0mCPL&lX9d$F6B2IIdbXAuEP=@$W5uoLCk4h<;G?so}=wwC|uY zgKJnU)qEkFLd=NpXNz3S35jDU z`B`m`Lx%gIK&1QGm`L4?ci}?)hX@iDj|3w!S{(cVeHte}sQklZF49*4QiR|XF}?YX zr=;PZHa6ax9_!<%WFxhfdua&aDoS-)A}yU*_`d1=-ofZ)bfQ8m5?0p;r^*Y+-c^@x zJe*7`$)q`%T&FWv0*H_9fJg(i5cD(HRMwMUPOrnTDKSr|$(ToM$IJmXkk5bD?%R<& zomJKTh@MT-j356Ba9Z&dVP_P(7?M`lO83>=>w8SRB^0fj&&*kB1F~5*=z%Tz2#C8R zGnQkkG(Y*H)@->E=`>X#jmrNn&h4ywe{!vkvmz3u_EvE7+Vi4#<_Y#Gko_Y7gaWXE zJLMkbBS;K|9dWFx+T$j5r3*hKZh|~*%o<s=ysps=sc#HLzkOSh8z)XAjFa*UX#pgpn@bjf%dB4p}hA=Yn228ohRiw8IZdN|a zmb&b>z6tn}KG!8DWHToIv&w{Twehxr%J<=8;^OTn=R$K*4_6p|FAfk@eN=W;7ZdL- zn$ys z{WR8vax?U@dPx=38<3CtQskY62`XyxSQSUr+JG~gHO1GGEf&&h$DPPkjKG0*V)Q?x z{x@io;6y!)Mv>-F*_wy+seA>o_zqlTQroWO8r)SGC{Ud@BW@Yt=6&Ze-F&BXA3>S;%zGf@81M=_iWCBL!#8^_Sj z$&a+vKn`(81@7nuY_=kmH(o+u-;*v~<2T`%q|*{tpeP}Z%(%iAW->3j)NggzLKW5V zS6=vCckxM}{aNna9{7Mz7)1oZQ&J#o=nS9Sr6XMNjL34!wZ&YfkCVLFpU5N&>gV6qQc zrejv^18g38yd-Zw?2in^uH0!*cCooMtKKaBqH(pn9lWu`;!{Mxl6Cwaast6NAV8`O z_7+QsonT&@h{XGg=k%^UO)M-X#x`lK&H2oEz~mVxe+Hla@mUt!J#Zrn=aooEmm;z6a;GA)T|t!!c)t$j z;o#n>)AcE42oCP!M#kO62+oRKYXdOZg^I%-YHh**@M8Q_kMH%bK5iF%1<9+VKwnN2$X{0A^C=UM=CI(aWqM4+x902*T=q2fStwvZIsrV2 zmQI!A%V0*Mc?XMTu~jpvPUI;ObQIp}Bg$BAoMuyDdI$Oy>~s6&-5@0Dp*P9_!ZCDm zFB!a}RhW@9T$=#Lc)43=lUOMFu25%piy2U1V)dlhuvSao@WXW;;7(c`JE?}Cr(86<{2ZO!@o2xmo%1q z|CkCC)bXBq%C6tT0ZDWvlN_aGD)dtL3<>Pyod0&R#eYc5LnjnV04iYpKhgfww*42; z4b}?gh4cwqUmUY_?Q5}EfwQKo?$Pj150vRGI;_NLrYPoPKJRDyY3IdKPZqYNAbJy@ zA9*WZ_4r&@p71X+d*3?;^BlFpOWavwDQRqzii)JpMq=GSlq??1SzrM!rO`N07Z-_D z`sb;{<_|xcC9=W=ee3>uP*x9<=Xaz{Yi37HMV;miH#5FUK9Ci}>g5Fs0C1wxSa*}} z{vpTZ2j2BhJQ`2}c|4XimB6*la;vKwfrP^ToIXmgkgUhIcZVH(C*z7aXPx!8S5ZH1 ze+H(n0NlpkZhZD!b+tKH#pMsw$0%WnjCAe0zq$kge@q%Bw+x8>z5-I5xt7Jd{sp*h z)M^>=yD0=;I~jH-zLd5&yqiCkHKbN#7$s1|Ix;x#Ht3gxC8mq-ckN^g^>X#)DC6|c z69~wVaEEa+muHQvR*U7+-d{b|2=b)t;gv|z*u{}^^JVWfvIYHgi~Rr#dYB}*9eBMW z=`Zp_XhcpB00twv2(SRG)V$ILh-pq9jMQbcKAC2$+03sh*0p6dK%PVANp>+-Aj!GPB;2)$|MsBReuUyBCP-IMVfo)k}*z z8DoRSVFXz4UL4ghxrSQp3g<<;BTC@x^aKJt5C+6akXN<4o>IOS&acxfqvdbeBR&G+ z1Z2IvkT!loa1x1QnxI|BDzTk((6B_+t{U1@A0OT#irYg=gp zVu~g->8|c1kXONcN--4$nVX2hARvwR;==h4kH-h?S@Ds5h^U;qji7kb9g>zr3Q`8(X%^58Y{i5TA4 zsI>kELIEtedf<8gYlh1*>Nd?Ir4fEvyfr%8?tog`!|6CWcadUT~|RfVTZ!77gz(4C@+XF(Yyn)6meBTnI+fiu90kVaB5S@4;A%($-RlK=K8oy$n< z7<`uE>C|Y(=Z8@o57jD(E|~w;oCI_dnJMh>*q8(*!^O*OtJ)|?2%t~JWzmc`}nY_ zYk_Ca2piM(8@Sv8D%;sX~&!wU$Q;sY*)Jkjaz}Z+4Knnt482mB@yWa?B z#m_)8cIW{#P^u9iu<>(z)c@E+v-yy9H+?6{HZcEDEa|CXOsvPNHnLRkf-ZhIAzG*HM{_vWOV>+Igbf79W>Rx7qMDOv%OMKs{3%myp--!kfne z6U9f=k&{)XIC7ys2wxgNoiV9+oa z>54v5WI#kQfRQ5vr1P1KjQHwfwa49BZ1dkq!&H}*6j}Ld>s2C~BGTkIt6Zc``(KP( zuhgWrKb8#5>&#Nw;*ldfqPd6MvE^x$I$M$}_yPdM1n^Q<1nynxhwbe0^vnQ%x5{QW z^BN|6_#La|y`u&*-^Je!_aWzMGVwHi@3pJjW$HJcrWV&Zb2(msdR&_lp!7bmP3$Y@ z*)3{2m-9j^%&%8nw+?J?_$*fsDL$rt$-ilxgVPi!iP|4BHEFF^`=I-OE__9#y@>({pDlgvoe??xslYrzFE~gQ_)h@uUnQ$H zE;15Lv*g4G?VgN}5*l2VzBvZGD2Z{{aF$CqkA}$lfLEbbhs!P9Y$@Z|QXq@)n3zI> z7o_(g0&WJpZenuSHzlNBSmgdt%zLh^y&M6FRv`;YHZ;H5(DJ?LvBX)KNj&`e67LER zGnRDAP18Uybtw6ixy0`T1Jc=v2MN+bANnwB(DBa{h8Y)^7@n5Iu>Jw{5Get7lCFhaDnj0edA{&8I6AN4>l@WXaIE z;~jG1ns+H*7hLwnhA=TAMWRA_kdjtp#BKVr=qd1i! zZFP_DW$v?Yf4n6!h?^0Tzfwu2qMBv{kI$XHJTEaR9V;Ve+0G@l9wcNH{QgI$UxT6V zXf-fYDp(?s#rt=9`k4SQ=*Q5wj9rPuZ##a>dWV^ZW1_WoKSb;9aa7;D^>RR#Fhc;{ zRmvggG{8`5Jo31dQKp{DQE`eQFqsLUA^@7qN=6D?5Cfagvb;2lL?4TD+D{(%@-TXU z1HN&9i%4B7fX11{*V^hWn%UayO2gueg9zG}_HL8KaoG|vs~uOE9{}~H@_r*X_nuvu z4Uh#tK+Q8mvLiL-rLWEkG7q@~qUSj?QfnqS=6_n<2$RI0lpHMB#nL0+aU;EgUuth8(ZO-^&?lm(u*=mgpIDU{7Vmiamq`MSTQXI+} z+uoTmS1RiOtXml}+8@CA04NpKM*Lilw>a~YM<5CUa{~mB%i~QUiav?_+fxR%30|;J zj~YO~$Q4B3yxs4rq6bcjH(X}>i$x>nPV*&r%xjldpF_zT-tF>saT^WC>|!#M8QwBX z=ih~VF;4%|WS2zvW;Dy2H-(Bq*W}o#c7(yY6$(_v_I510yk zK$*fHuqhCqMD*94l!=V`Fb8A59f{rNtV}s-Wrhu@36Z%YejUqc{5r;Lk!E};1JXu{ z{V)Ac?Mdnet+;JO%h6cl%_(Dv2AVzR#mKG=9|ntC`HF>`jqt@E4jgru5z75Wavq{o z(R?HZoGFEtbDK+UzpX|q=94w_g8JWKMFSi-nK@FHfP?4l=t*KeD(h)AYFv4>m1N*7Q$8UIBhjOx57MO8?lOhVhuFNM9o-={x zP!^Zg{F5r>pEsXeths(#Je+>_3l1{2z#vX&&0){bpG0@oH}ewm;l<<|4{ zCt2Q3{WG`&9?Cb)qBRqK|NcxxyhqFB1)S6SAO1?JBnL`TMhynyymGYg)K)B};MvrE zH&&x2DTM>B4{{Gd?31-paJf9>&_>31(JFQ62?l-hSwZAtq4vx6N34Lywo}8(UeXdz zWLZ3S{Z4ZyDVJztf#t&X#^v{Pttv+^9vSfZz|S-$rDp2bVllmOd#oWYY_%J1)m(Td zOt*lN@PF?h|HBtNA$db22}JzP0Ug84fZ(NH3@{w99zh+t$KqP=_;#v>CO4ac3xYdR z{unUIfwe}h(Q0;6M{&AWAqh*@KYR8kpR<~UBnt;X*Gl-lG4R2&4|B(lgV;|8HF4ed zlLG2LG#&h1D54kzaR0O9nr|VizRE$tmyKJG0P-9d54JeTg;(B@15a!1YAda(pl|GE zhQohS64yR5l)8-{ofnB>pNL9yvohcYzbI<;un-e2!f&*-Bi={vW3^S0}glm$O~S{pE_UITySSGF@p)=B(hAsB3vXY zgE~w?Jt`bCAdbg6%%*`oP$=-OYsDjzV$tKy>so#m;QouRMVB4pZ6h*mM5@qg-j)mL zEqU|rj&|GYB_3ZGw(WC{0@*g5%6F_IoKIBDff@E>i?hRe;Pi0kT)?M$APNkrEl|6B zh9o65g}U~yieAHi+rO?(6;ucUbc(jAf=;T_{OBbw6ttWl2#(*p$vJ)f)pXpo3fa$t zx-f6~Fut|pZzz@))PL!zd@>XBgo{uCqd$>Eiv7v6G1&g704y*g{Z%PTM+chiPa~mX z=Vu?b>7z2WOp^{G#lCp^-`|mT%D17>jwi1T`KTnJDVzNGWm(0sly%>}!LtMl-uLm# zMHM|8xw2f;sT5;Papy8JjP@x;Mw_WeWU}z&^qq3X#Wy*=oW91PMDQcwWi~U;O;3aA z8lUb}1|{g`XAQCiz=*^h zZf1vX_>KS^emrnwcRi(T>@%$SZMhPxfYp>$>e`m;NAF|TDI1`Zw^crD$1x1Ti82ZW zjXWPoPkQ`qNB6Mp{@wkR1&6X(0NH&OXC@i*24`|-90;tcz_!W3^K~RLadm8THfdb> z0#!|wr%Gq;DM94 zuK-FH?4!PYj(Lx<@4-_+DDuCagG3Z>pN(`FXvi{QP;xw1^D~gMkz#sN=i8;T%bG+& zsEUWTQ>I&;lWZK8`5!%wZCByv`m0bq^PcUfjwnyrw73I_4&Egbpn=EJrkiyw>_5vLs8wc?wcHxBE=nYa zQ~$c2+_&%w+-2&QIka(>ntHQHUaV$PI+~gvD+b#tY1r}5{gCd`5d*{PHKe>@4e29DhP3Gcv_mXkj*6>9_knR_(^%v(9H4vCr{8> zAT`zf-G!4jFQOzO1DBa|=S^}o$7d72VOn0Pu1c#PH4c;gbRK9kQFw6Xod}S+kVJXV zGQAXw6x&*4$|OK3`1$cQKze}0Q)-o{K`K|t@ztX{1dfYPb^9rPt?b)I2a|k3C8%2_ z{5Iw)@baE&=IHyguQb+p4%YN&R{*vVMIla$W*z^eI`xgyXCu%_BJ6P+bIN7~C8pF; zpgp`A6-dGJ@|~2l+1IDc^Zz8XH@;=3-z&- zGtAZceo!avmKaAu57ciDWjx;SEc|;qZa_icr)4Y^Ii)lf4cti^9ky~rmfKG#-{NOe zH5D!3KL)ek69*h)9C;Z&JUpOVt1eJn$L>dDc5Fs^L|pD+;T{%Q zJpU}(dCvJ<6sej*2ubrr;Q(GOr6z}`2+r5azLld{G@f%7M#zI6fI?{? zh#HT12z#a7>WPn}NTPZW&!QkJEi(idzy{d4$hJvnFPE#?PGZZoYPc5jVqII1h3&H+ zG1Z1j5_+FPEmhE}5kFvw?vp~q{276bu0}F`Ru*2K%?|sCnWovvD0(F<P-(|G z9OH>sK{@R)F)ez;&R(b1X!bqc;~dQ68emU^ZTSk8I|e@n5=3=h?FLv z$~ceK@0-`j{k;BHO0n<-dvMKS|Q{7mqL8ojUpjRmf^8Lv0qn z`LloL2P1UeQwq0T^XN{W0LzetFCKG(nlu4V<=K}8%f%a*NP{Dj zzE-dd7CyREF`0d*S7jutVFV{m;vS8PqRY4G+W<^$u&tUnA3K*4n?1HmC(13vLibf? zzn5QS)fW~a7FEJzx?es^3F89N<||n=*Frqz2g%!&hBLVZUt^y;Oh@++t%gpFv`gi` zJxqubTYpcq+w2#P$#o|q*y9`H55^V(&fZ7pSppV#NT!=8 ze>3a*!xqL;I#{wZzsSkYS+&6}e;R{PGW9_~M-O>y^KDN@DSTJ47(3(DuSQyW@tyiN z!>#WH($b3e+vh|7Ic9+g6PCXCEqNd579B)-Tn-)@2yc)NDDy52?mZPIAA1xz^axE{ zizg~vX@~>f$QhtE?;h>co?xPxl<>>!eA{HwcObAQ>M`|kf0`p7$1l%6V#HZNo9Ceh zfs>4#-gb@G@j4FenVt$}_$ZT*Ffw6Nu9%@rwUV(MO zht(VWcnDCy$3Zp?&u{jcFEfaB7AwWKIZ;+PM3JcomB0uIqMs4co~L&cb)SzPl}L#t zg?@A@hO2k$*&?h}L~fHf*-gjd6!GJq(l7py5e`W$7$f@dCtJw_LIBhczCo|&-}fdr z^u1p#pn8nigP>b^SAIw{9Z6s7!`HlL6GGiZ~a)PBysRx<) z>50hqe+%{Bw;Rsh|Cz}E!x9or1CV=WPgIDYmJ~3*gfFur2DjSX_vB)H-|ZY@T8_rH zZv1uhf8`3ZnuA%zv^LHQX%MPc@FkM>n$OVyHo?;KqY!S1?cZ!LfZgL6(E+5g}WjrFF!^iAsbeFA?-~16k9@YI`=%`>JTx*jL?1s`9^dmm`l_m(fdQo{&Il-$QzpgYI z{*rU(H2($kRH)LlJynAbkXyjHRD@dZ7r5RDUle%RQpZxwlIF5+(wkd5>Yk`&|12sZ zHQlI&pjUa;X_?Uaw*C47fGa_fh9Hx4ipy5XBx=idKtBl%fU6_~&7Hf&N5?aJ#T1dL z&lAb>Z2&0_OdED2`64&m-ibBm0uLw`??o`97L8Mw1*WpbdXZ|*@3w3dDlh^(hqZic z6Um7`sj)PE@sE#W_z>~SCBS1}dv&9F?%xZDU3#g0xdk3OU^;PTpJYP&F+m05{P`Qn zY?FY$2K1qs78HE&e)!^h)Mn)NNmr$aVVx6Uw(#por#1TsVY4ny-j3muF~u!A0)ciU zT#i25*y@^?TCTL@>Um4pfa{NV8!S!RCR0UY`nq0&NbPZ1l!@9ZuywdaC?)*GeJ0AR zCOF5f>`zsqG+;Y9Db02rPrrNqN{It?FvgGK6%fheMaih<_k3T!UUrxRckN=1i`PWK z)<2lvGn#ES4;=2KI}q1ZI^nVS9CWvI1mNW7GyO*y%YkqJt_@g+2zVx1pKTX#8f2E0 zf5keva<#MtF&!D4%(dPA`|Ri!*{=TmSTOxz?R6eIIC$FsutXHOT}V=D9a11QMyb-f`-=&^$BAmgIHz9EIN(!F`NazU01zX`NxYPlJ0(QTrFHbZarQQ z` zq`Eb4(N7+BzM&=>G|ymd`4Z};X|5FYS=)iAKL1DFQ{L|>t-|7b)-rEBxX8E@ZGq4I+9Z#ktH z9vN|%`oYRgD`NF8iZ0cpD<`JGiHk;MUO3m@f5rzXeCY2IVB%Ek~24lv-@-x;MxV6h0IPk`7T9Jz8X(wW#BH5UR zTU_mE}=6K9}tj8EM@+ zXRq~2FLSU*gi#1jHurN zAPhLAQeVtJ+tsm*a{`A_69TR3@_=p5o(biqDQd^0wRdo_k$P~&wQ1E~nsya3~FHfI$~N< zGVV4WO1)V0*yMN2{_yot+3=znGFbTg$C%qpbp zjVdpP?M;4xMxiK@Bzx);CrK?cFK`D^I9DV?AtK=(gDNi&C`J;29ZvqmhCgDr07W1c z!vdeh-r5yY1vpcMcwTDg7Ku{#&+^7 z3SV996qF~u?Y{z*$K*l~c1M5Zdd04#xu7B(uVVOR7qja>zVs_R=U5X-?Tm9Uu^4`- zP`NgXd$`q(%ed1dKsjkM<9m2HSsV99r#s_nZHU8I*!_hkEulrX7dh;`%u_i6Q9!py z1KjhYW$ci~XkamucmSH*wOpvcFM?nB^|awytf0LUl&G_<{EOG}$p09o&z$FTX zi}PMR4j}GG&I|SnE5B$}SaG59>`q`s5?CPdqy7IgiH=?h0$);zdZ1J7B|&z$;eRF^ zC-6)FY*a4+yCvC-lGaTjkHyp+j`Z9U$DvA~o!EmF`u%I&^xK77 z`Q@+Vz^(+V#4kabwEE)*A|LXJsDWYGGeIjw;l=u}k@nPgEM9JdxS32FPRgHOma7DZ zgq-TN>vveP_T8S8#;t_r{7RE>|E)kt3=2iy?1%gojSMJV`WTV89YuODS<<|OKD{w8 zEu5atG!vrf8_*y9$v>%Sg!ut5;MW+>aQdo$Vs9+sil(0-whdl2J~=7+aqYIZ$+V(VVn%=$R3xP2B!|n$Q@S8 zlE3_jI)Q6zb^9e!y`}c`lVDH{0f27F{~Aka1qiUBN$QF)a^CqpWVU=?@4o?3%UEY9 zE>M-(rEY(C+8oH{>PqUePBx6EoH|nxs@RLO5`K3Op7wK#7cFs?CtJ~RySj3C7$^xc zWN7a|@BDuU1~%Y!RDmN{3D;ha+)OO>5sIt~Fz)aalzf-ATbB4J@AFq9r6ye{Z8nt( zm28Vu0#|1qtlAmcV|Pb45bG}5P^7SHS-;LFlfx55C3O-&q}bYtRGnBMQi>|Kj+qvi ziO`XsA1*=u`@K{GR)29%Gan9Zy>DE!o|NlPWgI0)MxcTO)9_b$3w%zngDa_fdl}

oe!L@`>{(RLn)cciEPy9O*^J&qEXeih^!UAp%iDoys zl(4%yR%bAqOgeR;)2c4v^ebaauETGj>nw5%9>o}V$Vt&uYkqg~_uq??B8Qk$26hZ3 ztjA1Ed?v%gZj4+uif10_JO+x@7QeMgFe6xO9UU4rHR-%N89HB5O8Qf#Ek}ADBPE$y zM=C^CKH?mXVBmU({l z>$d28WB$czXo{60weeGB65uSs1O$qoslkNEXh<~@qN)OY$C-Z8eK(KJw&|l_2VOHn z>sFsic>3;7xJ0-DNk30^Ucqc4od5U+tc}t%Jz!5=Z+@GCPdF>DCm%AjZX&kVP65tyh@Fj4H zEBNn#9KQC5BNVVu60>`#)9a^4wS1+7r};m!&Di`Xwo&FU2PekXQsl1B9r_uA&eRwd z?66y0S2_bF9;Q}f*Ivv*gv z@k98YFPkQ+#OgX!kpLHDinEtq=P_n!Je2g!^$<$^Kp{YYfLj)oxR5(EsKlHMoig;u z$T`ub$jk_ERj0aOU1O1|ee{u|j8>IPDRI8iiO))LC(7U`)TrN~IA(o`<1s~yI|Yo7 z7etxhdsVVJ6}$)^{1MxwaV>V^zPLUwii{@9pW0L&JKtIUyxuq8>A6+?HQZ+`gyaxl+UJ{81z#@o&W=uhz*RN_uD}3013enS^C)b+!KOxx^SE|f{TU41T5T4B|9+{p0R&n5i zmenwv5&Fq50)*+o0Cd!<-fAV0FvdoxMrk=!8IS!+<23m86IAotdoBm90{tsFSLdcLBm7 z+mIe`vkpvu!)dlf{8Y>GeE=!*AT3ib3ic$>d}llI=Mhb$A~4K`KAm~pWT$0=502eF z-$I68Y&Acv-q0`fv019oNtX)1%FuX->e}SB%P3)v?+yqJg<29QkR|sT+>PJmh~G2k zy#?qWrbZMMT2XZYWDH5Tom$aag7G?$r#k{KX|w?8Vu?25c}!rOR8&XI==sL zk9w(yuP!7L2zdY{a^S*XICvnk0xuw)7GbO#t*jBgry^;l8pDjQ|9 z3bEK?MS$Zbpn&Tt!Voe9F(AMuUkS*GxEqUCr=q1jKK}iS|Mg0Nqe}qdSMHsMDhJt4odaiZj`NodU zgj4{JB)~CF{aazYz@RUT*p|<3dp`c7;l9{#=E_dFr7=CH*l0_;i1|Gh83{+gK z4BANNcLxMP$*Xd^7rZ$KxPYi) zuB_WL^*-dmT?0Ar34p``Xki{{;rbQ=d&3F`^gtqO(qKP*`Y1ut_t6!frH4u&M=SIfDfVA`6kGE&DIg-%yzsU4c`fHonwI1Ry&ORDZ5l z|L4xf50xu&WqwFT$z!B$J5c}qnNKOUC=+~~n)smdpR zF8L80m`5u2GV5b<-YOtlQ%ZVt%23fqLzTSxos^#xLYL1RO05zCydKnmuYlItdVu7d zD1}j2kx_cJVXu+bC(jXnC}1D!fv9`kUbXr7IclpB(ND%=lH2~*LEkW_ASmBivR&_M z`Rjc;y-4y&GMzOCTjV9K3h?H^0}|hW4F$}PFy%NR6oCLRk3qn-A0auOgQ1>81A4%H z1nq%#f(d{lAjge|c%T$^QieKFCBubm+0i9bufZ|;B>UZlgl=9LCqD%_&>Tmzr@X3; z3RN~4Z1zNXtjMQOUl@@-l{Sz)lGogh*i1CH?(iPek^AR+^a!x8pj~acVTl$L7oZ;2 z`F(kJRUY#qhfel9b-6ZX90o5iY8=ol5o_2kIVy79nm=wMhNaOaNQWie{Q|4uPj0qh z0h+zuj*sw#mtCGJ#^4@B{ne4k(-oV!$O?`_zPP*g57-$D z%bAC5E%m!ep5KGL^))4&*^N-NNdz#bwF{BF39YI?j8#8qxTh_8&n&LA?!;+adXq_P zOE!)a$Xg4yj|kBiu|xNM`^zQn0@-GT4eF>9q4QYmsZMJ?mX2KDnbch=i z2gsWq)xp?GKcjtE`X;gCnB8b|h6saS_@aQ>R;Z6&l7kTP!};I7zvR3&i^N)}tym(OsZF{{t-JZY`koZn%Ih;5K^yS213clW9F7)Ab>9vEHuMSK}Ecs=Y_q zg7kDkI@+<4)z0(-R-Y*n-8X7)4jfQ~1SApY4)%3gvtbf`C=fg3v`+Wdh6M@Se->=_ zV4}JPrTVHCw|}w$XyU6=%){W5H(@ZKL0Bczea|7T<8ESRRdE173i0Nc*FmY|onW!sP zgF{zuuQZm{%R%ZjUh#0;2z}uH0eO4St|{Wa|I9?wAzh$!wLdR7G(y zAz-u!aF@ubM6>0PGv)Z;t$)DG^T!Wv2pkV6Yej}lVXB*x<+Dfshoo9Rf0AjzmyFKa zuHY~!=vXJSp`sml4U0&cdR&j@m} zj7$qMq(QworR!9_E-pcd1RvL9KZ}qB@8ktJxe#Dnl~MyzqC&9oz^T@56!YXlfqRUk=&N5%0rl`Xz_{8zj4b3Lu>1+OL`P)B0i{)`-!Lof0E}sV9 z5gI^tm>~CUfIJscqmo6_$J*?~n%s+}Wc0Q#Or+HFhJM=5ahzEpEbZS;*o}+b=ua2H z@o;1b^1_!Lz;ehQqyStw`jvjq&X^Yy+E9r=sYF|fR>Vb)Cj&B9+h{2O<6(_wismH` zPcqX}NX|#R#_<+I(^P?`GIuma99D`zT5TT_`A!=39d3XquU{W<`9t1tZ?rp3Y$m@o zW&7LCh%)mcmG4ng7rnt`XhR3;jR&Pnk4r_iwPY}Nj&^oJptZJLTq{M=r9>cgKTCrr zC*6{rlvZ7x($drkUs59G^TUZzM$Syu=v9;5q}VaNvIe zJ2P@=KjK(1dG^QaXS4BjeeFMv33fsZUS$d<1aP>V!R6s3_TslKOKv`PRr&8Rn(q9c z9JOAHd(-#{N>lq_&+@K}a!^Uheijp+_0PJX8wHorjeWvc{=3j9H1<@)W3vr|{l5PS z`$z#RrN=LE0-_QI0lSlsV2)nqC;vBh0${Yk0nQGufr?@S3-1s@9|1N&i*@AH#>Ba* z*MBxvk05^lg{vo&8K1D5<}9Ws@5UF6v!IK)iY{+0U#uAQmIzYuZdSufy>9X-wgB%+ zQ%6r3UjQEeYrons4 zQRTpX{r-8M1+b19KjK@HFmE*+3?Ny~H_#(TJLpcM3eSDB9pg>{OCc}qSKXbkr&K2KVkm@j&Y0nsZv9R;sj*)SGALoiLCirkHQ7UkOvI4( zg1`8W#)T0I)tr`t;`rh&XqU|ihqKevnPdkJ#3@tSSLnAFA4Fe3_3MxpW(%n7MF?6?- zG$=?2NcV`Klz`Hb(jav<&wJkU<(yCFT*psbmot0zUi)5a-RqA3&nAPU{{AQ$(^H*` zsdefE7V(V<&U*qfisKU>?8y_ZwtR2MB(_AI%m(x?>%2PC#5ab-p;Ha!ifr_v20Hcb zq8Ql&D4CRWSZZowcZ2IQPlnNo742W>1wVa2k3b<(JRf@J%ie+jA-9lKB;^0%yFrpb zy6DW}dv>$yXkmI|-3N5eE85$1W9U1&owMXwug%oRTK0|Ec5_A*lQSubft>-v&RH68 z5Yj{6G$ZNBr-jDyu=d5i4TFY4;)XPVY=i(bwhtv=3zl z#qI4UWB#2YC~Kn}Xc>J(#F^>BufNCxU2*;EJ?Fl!)o8`YFMSHTGcPj@|^itSCy|4m!;SjLPh^Uf1~F z#xl~iA8ENe%%iRtBH%ZrO<9rXu5#Ou_a1gePYuJcqdg3&U#gF7ofu4ihlo{~>&I~{ z;n;*Hn*&*0Lc*nUz3xHf!HH*kt$+PA0*@7=M-D+>0P!OR>5k82ZSH(>Y0Ik@5qN{E zbd5`&Qj<+v@O!#|(s%@JEs0Dmx)=WeG925%Q!p*Fdzr!&SmRciCEm)KdJ44ModO+T6rdNecsy3;*eVT6tV=8L+k4Bu zzSw>pro-+boVzcZ^U^c`>$B${^%atQs{1`?sEu9WiVi8=6vJJ({XVb*B$c24HQvil z$0-Uqc-<`-agHOz`^Y&yx_N*7ym;K&#*|o%c;wZhc!DOCopEy@uBvg6mh|eYCMO)h zM>#ZR_U2|VaB+QV{achk5#2@gJ=f9M6(hgx$@ZHr%Dm4!P{78cescCk}ZP4#e_H$X#P+J3ohWC3L8oyr!Q^5wqFN&$n4`_tevzMfxZdh%eBaJA}xfSJ?x_vBqfsn@E!vl!{;Z^l`q#JC|tg7i+T=!g$UDbYnU%vfjC_vON+B1N9H#6VT4rUL66Og;gV% zKKhqka-^z}$k?j@h{yNr&7~$mF=GL}H(=(kvoUG}L*9!1@r{1W*s|;6k zAs2pWq}@3#JzJh7sUAo<}=gV^yi#a54{>t^# zdG1fd*A}c(+74F5pa2RlnZF{_c^^179$ivD)oe?yzaDTN=Z`j8aHl!l(#4{VVt=tr z4y0x5VH?hXPHdL|;eMAzufcH5fN593m$sv=@Y2}L*$k=E<<%Phcyh(ARp&2If})V} z^b`TBQSoOVwl#2!w1_<=EO=A#_g%(~Cyma(XqZ0B_3*MzZBq%MK-%LC9b6 zgAxl37gf^Kpns31Wdv{)?aiSKu4dGcx`V(uDxM(j9`neQqzc3(5(CKTWiTuf#%hCj z@m@5JTfKt9n{r7M#W#?a1qIj5;@1&NYvqlO>)qMmZVOytNDKJ#tEmt7SWgQ~;dr=& z91~rqZU`JdS4-Nln#g0IPFvJDN6%g z+E9rcI-5A!y4%d3LRKU}InB|Las(g?)H^|w%d>Z{2}VhB1aLPR+5=bmH2j(~_DwyB zdY-M3D@1!S0S@r;Hju-K|MbgaFE@RpK+&^AGoHMGl&zZt-XRJMpb@mT3RQF^^#ZFM z9V4d@QB%#ub4|gs_1?JE9s7s3O1z{So(l5}Js=7Q96?Cn2zYZrO7{zGy%+tbVV)cL zmUs`UeobWaZG^C~9Wx6>;%d=p=EpO>syDIq-25KHj&Bd>l}W(S6d8B@zy8uTv?ms6 z!}qt1wb^Eo(ttRl6)pSL!;SxkEAX?!fR@slHn$&!ZAbeSHb59^XazsKcqwG*H)40R zS$j6U!D#GoeT;KoG$|lKCUb>!M>{GOeE%+!WC5pkU$4tI(M-RQ6c!7*N4n4=Z9|Tm z6ZL-@u$wUwx)apM0cBdMp58MJc6tH15~ZoJfE;!9=H+%~M(tX57DP|F`+8Sn;CP6C zT3?F2=&vNya9pZERb_$bSkb#+rpudH;&>Uf^raUTi(shk=wHR4ZnQM%YRN|4+QQbj zf7^3Ho3B9|i6S7u<(wX%sEh;_LwiCw(_R=#BuY_k8xCU#*TqOM0QwT4Osq4>zBaVC z3DVx!Gk$!4#IFD6rTp#Igf_DIy;<5u!sJm2iJ;s*K#cc-{f`{?fx0fyPz5KY-aA(r z1ji}>@Kkiw5^kcC++X}HW0H@#Jn5|U6Sc|CDY`L9xCe+;t0(FJ#V|jnwA=z1i(dMO zw=w#&#{f;~my9QxHXnojniZh8ZjU`8WxtNj{G>69%-f6MH-H>D4*eqA4Q_ zlPlxr6Py;FE!)}N#3ncjL`r2sorR*Y39SU6fGR!9$wRC4D!OBv-Kwd%E}jbBoW9t% zAuz=Vp>i3EY;M(0e$)xtf8GW3z9DfMM~cedss1nLtKmP9gNRGz6$%K{8bN;{akMMtHPz9nfK##v z0wT_n+Q@bn(KMZo;Ie$5G}A33>!~df+dEW|RqVr1v%L=$8u|H?LRJD{^I2RmG?WJ1 zgl~}~fUNT|1;i;QjxB}%*B{%wlJv(<=srFk%LJ6niD-v$s&@>BxQ6P%M zk3wQS-te59`+>#B$q)%B@)Kff;lE`ywhGo)fb{<#p80%Q7=S@EIFkz7j&Wdcgw&Bm z-<}s*_i_?UhiS^{Q{oRn@k8Z^kR)it;-i?MWShx`e_13I+Q*b3|3KqB@6hC7T~S4x zk;YLanMIs+EXLp_K!rRqj$DrnBm3wrzKF2vsPmQspq|~^4<~70E`ugCF)Y*bER=cl>o1k7JN&-8aQ?3Cc0jtp+*Qo(cZzG zYSj}rXtCF+RLv+FV!J9W=~cz4D2Lh|iF$$mCQxl>7ftITRjS&lH z0rZYAFpmKq+5V^&PI$*QfONmJQV6yp$K#3ucU5!|;oZr*--*=6>4#7OfEu%~UcFdy z9Ngul`1=rGF5%F_O{4DXvG8kl8YK8p#lgA1!9xv^JYL?e8z?ghXa=dFC>nw zHz+(diwcm37g}FKfB+ypfYx{l&;kCA{7$_bz;twr4k`afdp=DCVn~$8`yxPig5;{bH@Q7%HIYDlmJ0@Cy) z7}cAN0gw%{A|eF8Xq(O)zTt=UkKgmZU^1~?#Wf1aKU zHdFvc0f!!smfT7YhYNhCkB$w&0d7J85sWv3v7OG>>f~V%Yie>cdsw|cfCFG>(=P#|Uz%hhT*hxk(!g>pU7s3gu&p>-Gz|CO`X~#26169E0T5TpnYI;#O@(BCn>CX`%I~-XId-G1QS$?QidXn1(PaE34U{ zp!9$KTkll+|M9o-nCqPhaOfpM5utZ;Fa$s-s4B@ffB;4iU^hX;0OTMQF77+?Y!du&j19U~-AGB~cJ10we+8!qGW6faLSt z{Hu-rubVPYv?jlUm81g16m)b>H%mVfT`v!Dx(`gN9EcKkopBbHVkCeK0?-CUrKRf+ z({vk202@Z*2om#}qc?4NVO`WP8$4>^B%@IPr(=1<&kj%4>kbD4v<1U{Ao14){2G9m z0AAc5TYDX_VG^yGB}!m@jO{<`f!0jBAVeO(GtdGY5^i-=hF}-4UE#tBIPn_5z`L)? zfK!tT@*J=L_^fG79C`t0ntHGgVCwP^et-zpEs8?6Fwg;;l)1fW$Q^>GyaB+zpvLG~ z$^SFfY6=EXRR$J>ga=!*3OM$ZIEh%axPUp4H$X!AVuMp4$jEdEz*hkqvh>DwStwW# zs`64>D4Pkw1iOHhz5mJ%sem(ocQfZ@aD=Aj*gUM*hAs&JPJHYB^Yc35d3o$?>ceR! z4X_zl0Uk{Ws*j0qYz-SS7oc~nCueB5Ucz(E%%^kS*3R7^Ro(;#G?Za{XoaUK@dYN0>Y@kerjO2G-Z={LtA||&pIuyetw_vtJQo>U|$Rdv$KVvf^GLd zXDw+uTArDBnXUCBT%jN|uzd7(M!N_Rh3pNTxt_$G)ydsYDXyn0zzQ%4`Plq3s(K&} zu1?4U)z#NOq8=$X4tKC8;PpQ>4ZLdU@i|>dRPQ_>f2jv_Tt7+CUAMh|NIlP z%T&Zbk%5^CT8F!wQ;)CoZx2Ps(4(_jj6^2@k7ot!8(5*aNAugzQu1lmAWKxa5OgQB zT>z$Bgc4LRpacI(nS6?u^(?ELU&S6*nTR*TnPYlUI7H3SmHvR6PGMAMl=gb>*1Gah zma3?Hks7eY3cdc__#)t2$cxVLp{uQTx0Xg}NNR{U9ge%~B^FJ7Ag{;Enefk|rgV20 z6(3+j-27cL(lJJ*d0BrkKL1rqo&`{0!5;#)y(%MaA_$mDPJuh)@@i5eM}(#bS(=ZH zUG#c$E7pWf=wK*Fpi&(Vq8wR5$NDez0iB=?FDrq(5MC7bJTlZkM;zTp_u{(R>9CmI z=5UtTKP?^{+*Ju6PYh-Wx$4Zi8DIEe5JdOvkFt=Ic#ju9vbM!-LuY|qp@B;;WUL{F z6NDK170<)J?z=crlOM#-$cIFP8l@osvamTlOoOFFZj>nR>Zn#?Z$#F7C#rKff|>E2 zD0QUc-eq3}gQUmvCrj?OKOR{8%k#^yb8Juk?sdVN9S>GAEuaNMC$y0Y7IFo{Qh~cl zITAi9r~kg%;F+rR4ni}abb9&SRwjFQyq^h z{|S*w?mqCfU}a;AjWm|u_&{(f6KK-JAO^`1zy>yptY#zSF_ybMnhHO)ySJ(r)fP17 zAzdutyWpJ zy^_v23JjEKb994bla3&@fX;jTPw5pHsqrNyI)wx}XcV>YhKZ zVhtdXPi>%x39%sR$@R4zx2;qAkIKSanP8<bJy-AOqDX z?!MU8e*{~NgII*HCkP0jFx^V9wXKE>9^uV##vKSaoR?}nbe^-c_|kr102wKRoOndZ z+wJy}zm!Pv`p5wl{N11Ly6MtcNc&wrmslfss%K|hMtT1dH_-1D{YIWQ=&5XyQOW1{ z6bJz@os?n4MgqxuO&>3|GM_e_8R^48y1=v(Po!bzVY~7C<0ZbYLum^)*q_(n%1sbEXg-B-Bpc~pf&Fw?$YJB^{TP({Wv;q!04$2aTU5gn~d&} zuaGhiIIcYAOycV6!iu65egZFkp9@oz+%yC28Y?UJ%i6-tNru3<1~!LX=kwlQ>0N)d zvdVYgIY9LW+KMKOFueEdi$M>|a*q`cmt=;TwXPoTo7f8Q5mkX`1*DHQgqqtDK&z@& zvoF@ELLPevI{Xv)hgF7X@e$DEwK@%zfy2J!?8zx|W=MEEo_y{`q=G0iSW>XFqcE09 zetG@NF6a7^j^y?DATco2euZ`?wzfVVzEH3sT}ol?^v9d8epXZ$nKAS8OH=*@X_*&h zJ`j6o6YoOMcBuSzb}$LvJ<3%L03k7**?y4a6L^@!WKAOEPu^UOLL* z8nRK35W@_;R~Oq__9qNy&fbyLxwiC1v#o0e02N-xSYZ!F;Mvo?1-xkf9jhO)v&WC_ zTd$&RP@CIXnC_2f1cFeW)QVaj3j7%)8uFp0Uiu!xdEkxzF~0w8xAgfR@_C&GY)j$^ z?GV=hR?RpMyn2z4`-8_GX9fQzcG}NMKS-FPHf_TY`&0Kmt>;z5&b_h~Wn55JW5?6A zmV>x4ea_^`-}=I9p@=SzrsTEX{1p(9H$L6WpkS*l&qeTL^c_p$qqK`l{)7#?ji1qq z@6;l(MVrv5RPWwJ67b~tZy$reT3z?w#S#9Q51;T^Ze<>9xJj&qX4AC~bDHt_IEl@@df9Q3`4Gg1B&0;7>dW&!`a9*J z;xd=ts!FXs12{2UYzkbKdrN#Pz06A*n6JOzMFfs=cwS<2fewU3N$F132%`5gk4rwc zY)$Of%jW`wJJ@>#$^a8UnCA%Fe=qnXikRmUC78$J1>C|UQ?)r~#EZX^KB9}ITgxcq zt7OCgb5PD7Vhyg)v6vhrqA2h8pSKI{M@C%BjYKf}-#)S(ltPF_RLv}=;o^(!Q5dT%!tcG#@yW!(cXjPiE+SJ#!7i>u z3+ab0GMK9XmWs+`TN^U#XI@=6G|IZ4IFZ~3viBHAZ1ZRGCml1D)Soi~#6`%R)9R3< z+Zd@C61la010X*R=h?p{X|K-_-v5x`gUV+PVpwA#SNr;10=0W~0g|*AiS-{({uy{Q zHp(QLF;FX&TDxQraTJOj3KrsC$c>$Kk(KF~@2~oNS@_~ZToex6^fQ86gEKYbsQIN^ zx8RaZx2KBRI876bHBql<>SqW9SVet8P}n7i-$L0t^dPTZyQr7z~&%Mz*1@2M;~ z;|9Iro-lB7#vufbBD=Bk_RpJ)*l_Th7xT*9t9vfJo>6f(1|t|+n4UXz;PW(mTY4Vp zbqvkqHm|}G1-203f9y-+gerjvetCNqAFCG!$Rj%P3oFvq5<#%w;1s0X;8wZz1?T}5{dYO6qD<;zza{ZdZDk9GUHJma8Id0aO_=Z0q zfA+W|8>Sf|6|xBk0iqEt6`4Xos~OrqLmdc!bF4s!>q`zy{M_54ap?rITI*;lct{t7 zY{{KTY-8K)IR3dn6-k8v5dq<=cb{3i!c5$~PH;{P4uSXNfhYUgZtX9t_R1%I|2&_v z+@arX@vwI|m5Fg)mm;>YzRYoJ$UM2N^^i*b)zVoz*TInaNgT>lB0yU(=8<@?{+wq~ ziV|3({o0=|uss#ye-&0W_eukP;vu|~oBb8hX%CVNIP?}>q$%?Lo&zDUsEGeJ?DoRv zwBm)p>j%U!knMIi%lKsL#D%WY=oksYJZOF4x zky~p+eont4WLv{@dB`lk{$i(=Ium&MQiKU$X7T0u*%%Tyd?1!|tbZqIW#`zY)cn;g=hK1B$Xyp3J5w% z%yJTKNEi>;>@;FXe|nC-&GGxzXMZvoW@H#;#fnWpkC2_j@b*BX42%bl^O)vdpd;}@ z^g|S^fTCDr)LzTvpFa+)7z#mxIzbkY&FD58a%O!kTBoSQi#O_%9cYusB+T9Q>&G@OzB`zLu_D6J6dwk%UZUvhdfIW}W+CWt0rPr`AoaC$Bv% z6T)sVBQhCl<_ZDtCPMtJ#N&RhdI^rJ@ zr%G>hMhXpz*HYe#Ss7^~$OXp!SUr-i)sb<%9upq!tFTp^L_CeUM$39nWF_HhHT2Thu2Q>hA~RW;IdaUF<0i9g z?&Vo131c$pI+*?ksl-oaGP-2G$}?A_Cfj@8wd8*)_Mb$!`V;3e3&d%eGSAJII%$H%MeYm`Z8^@fDE# zX!|Y8>225aD|<(H&!=)U0}NsD%TP#3_m>qV>*oNfq_@#BzA>RBmWt>)7HAp_h9F_r zPW0M65Nx{bd)d-_NU5z&Q%OowAppZNA>Q1577Qnv)DAX|?h=h=%i7wmur&^Qphm0v z-l?dghH1-4S>L2r6fz2fF%u}nZuR%#bNqFJ^ zIHFb+=W%{ZLJZ%h@TN3ny^?HW;gL^{EYl_~bS1-5|DFxh&G9i?^|(||J;JO_s2&aW zla?Ua33S)+fcypf0!CPgVxGh#=1FEd$cl|Mq+&P{CUnhAc9d{$qi%!i`J{OPC&)Nz zIcmOT^_v!_D+x%~nx@y4Revu}Nsp&U4U|j*BWNvK7#q6BJdCeRvfP!Nu)awazqURp zJCYvwSJl(+9I7S0E+cBJueU$+8qK#_l~Ic ztEOx{E9Xxy9F=`)BWI`2h;7+x0hsLgGulU?%)1m#1_{UtvTQA8Uj-ozZ^5mL0 zRY)!#VefOJ_PXG&h%{>}<9>@u2QL9zryuHj_!^l%#{Qb`9&29Gi<#U)iPh*PqH-YB z8XI2PT4im4Qt2<)6}Sg^sKT8-;aaxdbTbC+m*(Jy{;F-3?Jw9P2y~lpqAS(nw!&L8 z;O?3A#W>I|JONxu93X6o10*7J-}4lANL-zS6HDB@V-~!*2%UHy7_8XgFYf0cPJ+!v zcjq_SL&2%ZWsvOMj(c{d0nB8hTZ-?C0e@vTUH3=`XXE%Js`Q6w*1bnv(6m>M@y92} z5c=#tdCu6ft@SZuGEF>^)l2fFI0KR1x+F#At8jX75){GW=JPjAR=BV+UC)HjK8-zv z+x;#3kDu<(MHx)lwebb&N~CJMU(`_3zCx|YY9m%ORG4hM)At2 z$w3J+q}pP@sE4L}>H+RQ?yp!5n05<3|CmG~-`;?S=Y2TLdVV}Kjph;RQVutOr&y0( z9`S!#4yh1{UCfPtENqd^+TuRVYCIfzDejJ8^?6qk_wPdc>tqM_LVcX}%`YMuq3|_< zRIi|rJq=TA5 zb-tkdZq*i_4RB}I$PX1gMb}4?sIpZNCH%Zr>AwuR=JYndNr)Pj7FaiMitHy#z{a|ynHH}IF@2Y&w7ireNrS}z~RxJ58ybUAXz22NWN zFwFn(o1V9YMAS$m2nPmAw{KtP9ImjQ52h8vsNgudW?iB&k$rj);})|YQjLJbi(;-vqPAJ(RUHv&U*S~|{4 z(ZJENY`aueNXeNLS)YC3CT4a1BU`ZbGbvmFgqJoDTo;$BTNBoD`zdAwBb(emQB@*usr{f3GYQ@t=ekAzDBgR$$e>wZ0?X8WvHe{SGrWH8s_KE%e5;e?|dV z&&}w|fZ%9o5hv6RKH8o=$tRPr5n(@Qo__^WOetRt;l(XO2%(^QLY(Ft8nPTo&{D3e z<#)Aii($!J0!l(=)Z|dLFYX>yJsacy?$eVptL16*Z*zn^r0f!{tU1$yCNh8^O@zVR z3&$t!)LOErpqe%1r_(HuiD~ z#iCXvtxrl9j-YNboiYxzl3-3`G)g2&cJWcZ{6p4R`)hL}d=w~yd%jnXkP731$#=3Y zISYt!>Df*U1|tKct)2&EG3VED2(H1y0B_3Gq9r6^JV-Xb;{#cv5p<>iR#pGS?_vx4 zb^yk_h!u@e#CkB}zm)vRw`WY^v~uZpPHj-)%UZpGNqyI*`CEf{$wSN7*Fa+&p#dF9 zQz8matCX86Bs@)q>0b{WgR^?KXl*nO>_?#g?F`&C3!>Z85>G*tGtg)1r}k2v<~bcbQaLTHO-15wMeI)(Yv5FC?LF zcwkrc`9bmY(%Uf=hw;DvDZwK;(ER20PC+8${v*Ryine5{Yh`_fw4RZTAuif8(Gl}0@C4-GAF*gTl zf!CKRL)lq6LPkKtK8v}ELJlBrERA%V_uTpLXDjD+(s6i~zG1$pa}Cv2W4l}?YCaYo z+N}_xWR(MHflUhkbY7u2KDJ6}BqCe*ht)U`Yxa4fXNV`telV-uRwpxtV_`6?@zi$y z3)&u`5dHT!;OC>_69c?X9bm(w=7q)diH)tT_ByjET; z>$Ei8?>f{;ys7?k8?N}XSBf4XX=_jb1#N5@kupnfZ|Cf~TS z4KVo1W;-64dd`{aFA7$@<&6ZR@a{5DYB)p6OQv@!wu2?R7tz+qd7nB%=8f0@1>J zpF&N%F3BaU#$7@7XrnY2AsE5U;bieeKi%}Ha5wubAGXy9g zt8OKyEX4Z6Gz@$b>hR{xo5eu7NBpdCOIs0AK*!Z+xS-!R#r5!;K-1jCqEJk)%d|<3LThs*lPzSjm$tBa{0w+6{3f+Oww5syp@-k)Q9Z}QWM(k z5-5Z$xrG&B7-OB%#_{Z^58pxjS+hR%pczRd8xHym{4D(Mm!6LCC)EVK>K==pIGr7S zqT9QH0xJ8Tsezh}wJ-S^zmf)83FX^!kZ?5-ud4n*^F*Ko=|F747Y{m@-w%{E4BN_%w#_rGk4jB|=X}nX z{J!~h@wcpXXxFWavg+mq2jkJ|2?^R9$9BGzEE_Em`H<`XO)ZbuXF^tu)OuL2T&f?9klVQZ zy4SenGDXnu(w8s#?yqntjOY+FlUVGGU%Gt_$+r$8k5X~Grju>?`J_V9j~#mua%jL-TW zu3G{gR50Tz_WX6MA76a^k58uK=$TbW;O^8t*w$-)Ypbq0^UAv4Y0ST4UdqHtFTvh# zZ4b8_2p$Or2L6zc%5muCy5}^g%5epWHXYsaznNlgd^w_4_4q@k5w|WkKK0FtugtCN z<)pL?uIIds^p>#bG|Qai2IEK4ov_ywnqa15h| zh+jN?Z|G}^^OIQ)*TpgI#{QZJ=jDTZtLkHMih-ac?cD$@j{HC=zYafm9Ir(f9+Ee| z{;k8hcJ`>7xd^k=u~kPC#t4b;gDp4$R79w@v(QOG5%X%5K*jFe+AcX*?nAdiIn-b* zTJTdltD2sJ3*4@`w=m>Z4!i$i-yuoqg^0&->&e%4#9_0?_KGXkBN3GcTdLw~i z5JGAYT8`^WiCi=dXCIML3|_=CsS?qLPif12pC9T-$vJa)qdsXWpWghq#N?r&N|>PB zNz?Qys`|StDw@5`@-nR%TAi>AARcY@(n?Te)R!Lllp$PS*qe zxKGf%kS>k{%G_Kv;71I5tw%7KT*=6=AQ@U2#)#0@t_AaTakCA#LoZx( zO5b)xBDM3m${*S{CvonuN%UHOc1vz1K+!!T6bzfkFBc_&AJYQJM zH2Wy1L*yOm{hW^PmFwx;QEf)-++5SU{#g-9Hxg7;^uH(yogd5+=8EWyoAH&OCuivw ztJU>Vr&Gf1LV*t)TJKw2{N}0u{lrelyLZmM;|AIKq^Gyu%dIEb;(J`+Sj+ZJ)^hBb z&kl3Y#_ZF@jmD__!$pAL95$_vxTbdVF#2#6?S3d;TW9_LGca7g(BWxnZnvAxdhbXQC5)rEg7N{efI zlKVwoSb$XL%z2r}XD?>2&O}Q>7_`jDe&En9-s}e>hszKJn{s|2I6K}uK|d=SDu?4s zLZ_C{wLucuS`#DejPG_WNs(cYzd7Ci4v$FT0~-7gPZ?zd713B7irD`>e1!R(Xsjr) zcQrZldR0&0kaN#8fN@-E2VC>%+~$dRphL}K5KSI$)t5zEh5@GMaRv9S!z7kRW%b;4 z%o!TTO0OLD6=yuAbO=aH!}A#5*S}_q3Sxt!5l=V^%o-H1II`RZiSBAvde10W>d}JT z1_lOKm(~XUnk*$ak39CBXI(A@J2M1`LAtMSJsyQ2OAWa^ZITxf)~=rhjm-u<&eOj< zUOUcBV@rXcpiynmRt-H^g#~AO%n)HN*lt>WPBCiQcicAwdn4P6NmQ>X?_Txp+Pqv?bM>Hi~#q~L>Wl(bgp|S7; zrj?qAMYFZAGxNXKWWt_~!s@lnk8Bw)8RnUNrTv(bTxRhHgk6W?X3Rh8OKh(Vcsnj* zjN5GC$(dKZ#aGu8PmSJ8uNb$)Bmz}%)C~yeKsb!vabUfe=~vc~lhwXvf~_+(bgevq zERC)K=VFS+=iI4z()^s?IACaewS?Wm@L}>s+{#DobvYO`1TXKJZ#v&YBspy+Wh^id z+D7(gWcf2e-Bg3(rtZMg_N(bhi7Qia>%meI2AujMtRM5fSlbTwDK`#=?yX#ScUzVE zA2PX7zf6ux-;T_cE7A~Z0@cgGl*^-_9s03!)`o9^dMD0C&Dq$e`(~p*1_V0XBms2Z zGI0}^KCjO6`8=(K$9iMJIW7C2M{Atm&GOi@P#GFfeWrvkfy*AnSwq$vBmdsho#r*Q z51D^i#<*Ar&GiH$-bZ3dn&Vq&()jYuX8%d(z?3ycAJ|WF85ccu@|5267B%*#+ zq)zumf{*vhctoyhZOF9S5Sw59g-PdX={Bb1sY;?A4gl~IdT6hwMoW$d)LJdy6G{UY zfYB&TC8fTg;MnL|aw4Uy2LyHB&D-h~FmKc}3Dpg3LsV-QM(cwzLgDa2y~OrisHf~9 z$kbC<=N@XpA&j5y0h`WHsPCd#U~=5N284qqIw9NX6E63S(C7c@y~JdFCS;I zrVkBf(?{_*4C$)ahi|>KzA39cm|EU;nVO)l)0v#Ao((#*TJ+s8@28Gv{Pru}ov}l> zS*C@$QGNH-)2AwzrydBJ*BP=gfArO$FrhbFu7?V?zV5h~e0diwD^Go`F1X^8@}lkK zk*{`NiF)f`)?9S>ArR}P$hSF}`b(BSC3B-1=?lTh@}9S;E7?b zGK0-7(gBn1htKWDgekUY7u)W8;-KIi39n!P={ZsA+s_-|t-M4|QV z_xcCplpD43xjS}}=Qbo7#G?x2j0X|JZgV6*BNa(~v(m}h(MMXcafRvm{jR%^lJ>;X zsXWq;yF=%YFncs7ClsHBnA0Z3+8ByQ4!&g-EgfAgVJXy6BGB+VVRH1VjMo%nQmTDy zi3j2lSX;aNv^~Tf=sCkpvI);|g@(Rj>k78TSow?SFSdm^q+Jse!aB^d(T4g@8GSaV z99p(f466Q_ROPx+O^gxA9QtX8kQRz)!i}-f%B|jVlX#2#R7t@~L5`T^HgRpMkB0u| zznCR9)@`{;5cLLd%zdj5ub1Ak&B+%fg5Sm{<80^*_GUNd4KO?2qI5f@qd(sBfJr3s z+RKAIS@>jE4Je0y@jv5V*7!;XwO>7Mx|%&C@%_Wi*KUVXOe&S;k+y?mxreiC2j_i8 z%V2DCVLIhmvGFHe_N_H80iH-1!f?S%)WljmsB<0SxMXS4wE3Dr_`Rfu?Kj4t)!vob zvR!_y-~W=mN>oz+%(y{?Z+uDSbG)UKebL()yIhq!QtB5yM%crk{P=I?A07RZ#h6bI;I~}JhoTFknygk+REu~kcM> z^;5=Cy|$Gh6IE^9T=y4U7#Y=sX3QxEG&X^Z!jsa61UN8| zgkG`|9=tIaM$K}PJm7kuYWrYDNA*S7&m_w4mZ-zrdz zUZXpge1wCfE-9Iw|8xGaVC4W$P9hJ{xk5d!=?qgf=Ko<*#mv|!XR5{-3Uo+>#cpi~ zbyj4y?(sB?KMN~=!);z4tU36;JpY^}q5X@36;7V(Vb6Nd+rijes-Vy&G|I z_%M;7A@5X)1J#)E!+@vr!G%13i;r_Zhyxf2Jj2~qok1ZYI%07SetZjgpd>ei#JGR- zsncpoqf_CBpPoC7lLYSEAn;pWmQ1ja1xU^;)#1!+M1^VNkY4-Or#?UDIVRQ$k8yf3 z(-BsO>E*036}>)&ETGyx3ADO84iXYw9kR+zx44uJ>VqI~>K>VP70ArgeEi$gJ!eRXni*J zrw{)6{Y{>bthYGJ(SsO%H+;9Q?20oXanyKPRfo6_>4kP7KM+lbJhD1|`Px#{Bnav_ z4kPGoc2h%Db=mSucRfsKS7p($p$7vcCM=>Qc!qBWcMizh`X?e>76$BGRvtwh_L|>2 z(s7|wVfdEqcD5M7$j&hQM+MkfNlRy5u=GX(eFdD26nBp7fhI3(4KDQWKI3S?7rF%5 zW1>b+24xjFS}rVQ$lyDxXIxN@tQd(mOSx3a`+cXCl;?ucn1HV9gwF^Pv>uC?l{^v$ z2_mAIm36IBF+gr+I z^x_bOw7(YJ?>ym7He@k|Qr8Vxcqzy2^yuxfLPJNr>f=a6tL+up6;NJGEonS8pF`T1 zd=tM0nUKy}yR|;aOo@GHG3v7y-S}xQfAaP7=|SnIIlTpJ7~5$>za+hQLL>_t#r?5K znZiI*Y3Uye$&FgHePXY@4@JUv&#-!$Bw~{T7bBbw`#-k1j;<6ML$qiFyv!h$*iDVMv?FHDdGpMNNT5;$TwP?FqPeY zYntzkM}ZuTM+5uLgRqE(J~b2UJ0vkF1v6?jIi8F^L|N?iT(Cu0YAZ&SLM5_L8}0C*P>!C|7Tnm#R;q(PYS<{P9vQ z8c-;r0UP_SabYBu+?9n3@?h~-$A;}h1`SAvii+wskdEplEBu)R8_>t4Wz;X%@Y-6J zoe+-5EPNmTz8$HGFC>3`{F)O12cyBX=+}<+MNOA;41RrryekliL}7 zo^1ToTy+20 zLx@6rPR5YzPC1(OGhtFv3pZg2mR|1n#17tE;sHrH6Q4k zuLJqDqyuroTw{4kj<}8LgtD&& z&(+Ouco+SzsYQx{>iO@Ptp6m>&^UYKh@74}7Mw_6n`{@g#ZIi_IEjtjM ztVlMr9D7Ml%5=kNhT^Q_PR$FSgSW>fPW+Cohu|ms)6{xV7EGMI!4AB?Ehxsgic5*u zr97ln7(H?LDV3eqOVWX2>F-7YZ7}nmb~>f#g9}dcO;l+J{o#BMsd;hX0w;o# z%1t2_1+{NPKcv)f>(N*j6D?Y2c+avtpJ4z*G5bGA#KCd8KQzGbRuQJ7x`lG!cgFj! zC;JI2SM>RXHYW=$zo)|J0Poc2AD)HsI;2rO%6fV>eY(nv(fjW! z-7*YFNDd4oAPn6x)X)ejAd*8WA?--ZARq$_-JmoEEnU(bqO^2MNvCi&-{0?^d+#~t z&-=Rjk5Tq(?>%ep+3Q(rJ@NiPa&Rln>*ANA8`4;a%z8A^ABNz^^*m8+DA<&B8~wQb z#!Jn^rQ;O#{z<|g1>_q;nNJBJXne2$x}&BNhKq4_x>k3Bq$Ysh$8HMB_Iw`WR(v8O zblVkhgda3_O?C}AjFrflbQx8>G>meFR$`rL-Pn0KfH6Tc>JZT+Gg9nB)G7(2v-==3 zn@;S@-i*~0q`mlb&L!qIM51Add=@S^8B|6AVO!guYBUiQiV``Q&g3;*A9Y;#!vtG% z@SeBiWyeZL#CE^<^hwk2EQaswcW?5(fqYQYiF_=c8s*A)wV~w3Sae*mWL~*G(Luh;xcf` zGyBTeXSy@hG(8%8!RQLF@yTAB^XL-tKTyBgU0`OIZo2zC#~7CvkDMN^)==OhX*b-S zDw|9E%ZuD3kTsxEm(Jmgo?tP-kbmtb%_riOfeeu#ycmTH$`jc%doEqOrJtykf74(b z?s!~$rQ%6#p2vpqYlnRnH?51nqA85o$acOx+U7UTH+&^xc7Rl2%%jhfvfKZ4ING#v zD8FWQIK@J?M_`6!0Mas-u}Zgxzp}y$3PF(IBf2zbKFR2t8sdpvS!PZ@r4~|4Fu`Ty z1Cim}FF5E!)_8RB()}HNJO;d@{;SM&M+MDS*D1)_ zwTyqLg#xN=-@naHwSPbtrw)3lKpkRpOqq6q1}}1wE4^Yi>Sp1bsAO%CS*^@U!NI97 z++-+0uS?`4)M%;*ie*c!SO6b>mM-fPCn}rJWKR8^60f>%mXRDT#+)LyYpvUK0n@ze zM-9|lrmv_7R|5x)n`@;9WUF# z(V5Y{ENS6!f ztT4N?PNNk8e91luZO$Gd;Z(I^0oY<#u zkK)L9(l#utm_hEHhY!mD9k@66 zyD4+0MRiVMW|+CQU zQTBjYpnR-FOkmV+pSg%p#;@=iTuBMrBt*WQ^j-6?_EYEnv#CMPjTT|XFESY=1j}zi zs6V-A=|GStmxB8vnMNKv{UNp6fBdEPzc_9OwoWlM9)>jrOwxN#dHY{{`=|<3{X8vV z*YS^PdH&|1{qqB%(Abuh+2v@i;+MNck0h0ZC%bkCEB;y0m3`+rbvw5; zavSq%L2eQ4+U>!J%9l69jKB0razdZwLn}UIY*L#q^xA9H7UPEoop}#Yf5h(Zr^h?G z2LtXyaoRl8*z28N<+6VNIG=k@j6D`;;w8#xV)czNPsNRp)#I@vMv_b!v*R1~QUCIv zSSkAKYFEd1-SKN;wg=|x)PApB!nR@brI7W{cVFa-_}bW-llh6M^6{G{mV&;jmo2Bp zxR0VH%9l19M&;I40Ecn*(cSo$;pdc(aQvD`?;DSFWSAW+&uZbC!N+7c;~?HBcU0&g~)^TC4$*Z+WV zfy>IsaOT9nM9!I9WGz|$4!PP-?_EW+9et-~yoC4H2f0J;PKd2-}H7aNM0tOD8UP#mVp zdEIq3x*{NAswFZll|o}wifycEd1=@Uvs*GFORq(0e#<1G%-)rC!wNlCPTGrxJopj2 z9fU*~JtUoK(RF{t1AIJNwI(; zEo@(z=1rXGBzwL}c<@sX`GxBSAlr}I!fu;7W`EkIa<;3X?6m`z&s$l*H|tRFvqZtm zgJt#0{2aVkS>Y)QEN+#E(sE@wz4BTwsenQND1>#eVgo&~(fwq#K^lSs1z{TLeaj?V2Q0NL({8V(u$tN2?JRGEGoe zhwOw^ARZWaszC_hPwq9I>Xpc@XUqES?Og4A?HHzg?Ue;xVaC-n_q)#p)#%upI(-%Wvv&KU9c2-49L$2=e<vwjylB>08mP5=Fp>;7ynqLW4z&}Z zPU&j$?4mS#&*+8H2L2A-E~fbo^TvZ zLZ}KENh&QnI>=DBWY?*>dmr;0>AYKa>3w~W%qV$Mby{Z`dTh)Qp1`<|*F*o&a=V9A zhIOc9xVi8A)Vx(G^QF}ChQ$c?;L5Vw@bbr*a+To|1Q(<)j{O%(jy1+V$Ua?0s3oN* z=j`E-78)*4X>pNq(U?}$AyFPh@KG}Rbe_KZ3?+87^E+MF`BSfG%)||fV?zFbs@$2f z{&?dZ6d0${o$-NCRIKRwlajiPH*;V2w8N@7oglY8hT7&azjYt`>xW|n#e~(bPO{p^ zP&9c2Ejz+bDV)G51V5`yM}2!x%r#~DZP}gmft0^E*?BJ8-#i0zF!ANMRDem=G~Mg$ z75n_dYeSlx(Ku3TFd-pU_0i3!aY_BQ=I-kS*j#4TSYV>XtEE_?!%8c;M_J1NRdAi= z^P7rQCGNky9Ziy}C!cFkN3>tg#?)N?9VYsLCf1Jz!wivSI1#E&eHogf;$n~ZR}%*P z7rAunRvFloA+56-7~dEmbbI_td^g&+Ppy!Nl(E2hVNE3Yn0|4tRM9u6o=xOYZTy7!Avdfb@#yt3L0;BOd@ zW;#fZ+MFWPPE~}Hc31*S15yTn)u9wjuX8(DQ({LeVyO6UF%=a`RiHMua{b%7aT9d! z@LcOT-FydfdCumCEPd^XITLEd)!4qcgeS4*-lHtT-!JKXf#QO8wdY+@$#Z>?l;*u6 zdQH)S%?TEzqxV225RTeZ1756qECf>$a~;ZkogR zEu|6P|LMPbfoF$5o(Eh{J-?p#EO|W0d&E)?juf1Fcg`x;oxA60ovmQrC7;f(K0}

fJqE#;ky5rV3tv4XTJoKIES1&VC>CN8i4DbHsx=}@pHe^eo>hbP4*hcnt`K(COz z0UvD3`*aL4xZ0_ZJv1Xhq)7rSKhT(;ve_3uga4$QsfqUngQ)l95A5&OZ}8S1ZK?$; z>WheQ>sqUMShj{|m+ikWEAs%tn0s6#g=lL9wUK5s0p2kBP$(_zc7ejh zaF1+~I2hN9xqh_8)u#7*f0@c@Yx1|uYX1Jx5$%}hUkR(dKRtJJCQ9TSE?!BCFtSZe z=8OPQ<(+Q=M0+)2nMhqthDU8dXD)>B4aJ$e$J*KBiiSEJ;!mNUx4NVocDi(5QsQ!d z2?CMgGKQIdX+a709T-Hz)v#r03_cT_SDRhxMO!i$W?+Ugzb&2?;Po~k9?phHh`5sv zb`c4(*sW*%)&Bm@3ba*wY+q6K~f%WZTU=WFfyZARKZb^kO(<^5skveU&kDFoA(4 z0%yt?E-qfRITCWs{AMI@u)OCg#dmVR@SR@f!;m=tF(vZ3r zFr!qqaX~5-JRasb#pO7fQeU0OdGG-fTaGQGMue;U8{pM;P16C3>iI>q$erImvWRMm znT%209C~zx(=E+aEnJ3j%i*ptQ4vBfFm4 znBeqF-r)`YSfZsq{e*7grw4O@Z- zzkLTQO#PG1n&d6?FO0_5q)EpM{WMhN>SA+pw26NA;#JVLFpuO6@EsKcaoFmTlq-fa{CdJnUpA2DRJVu-z?`OMFDC^yYUp4RG(b@6OU^0p zQals3M|}`GfS>~+VbqVP8!LoG)g?GsAyvwhg89=Dl3x{B?OT1WloW7!7V-3@J3%}LgXRfMC#t(NT+ywJd-hh?L-r)x(r408ZMJ} z4U4BUy_OA&*&g`Pl>sOBOHQDR5Mxf=KVo2VpYtDZps}sSDaS$+7%Qsz%YOfTa__>%S$+2&oZ6FwS{* z4&|4=`(CT9KWZq~)WhN83_6PyXUB|8R9Lo)Th&>6IPDd^&57= zyLye`#J!VMacJi<*asl=m?FEYA@4YroS3{BVh|mH7D}dbZHS!EY?^eK`L?OXPDQ-r z!No}px4iB!s=H|p8!fXaTkUIVCEi}_%qV?E*-PO=PPo``OM?H_B*KW)4o-?ob zlD62(G{g-Qac6?Ct-6!!_~lp%gCU}r`PTf2LA!={Z~M+&vAhI*;+}}vVER9(Mb}}& z%56RRX%1YjRW&6gd}C< zQScAI!ziOR_^??i!Eib5DSd1nXG{1{4bi0(?uyJ%R2n!xayGwtMe2NU7irw$4NYgW zN+%#E)(8T)8IrNY_&Q6who#FpNmhk;;<<&?5sIMOM_*k|0mcP@FL{b-M^NtPf9bWN zXWui6o8C_Z+u-a!A?&~f>U)V50jqm1!Q$&f+h6*P;q${$7K1j@1vLD_^>Ksb>h7tD z|BU~Xr(!T`?%B26bI(IV^2u!nan@(*K=E@q*3pUse@O=5BmsCdAGbcYaJ1B(+v(1Y zB^+ju7_7rb;E=^?{3hzy#N)iP7r5~Md=vLWrbrmE#6X<6T!%QgRC7fN4FWhRY|sFD zyd}o`1S~EXNXZleo}g7b*7jQYkH2kVFtTX_Jvmr3_C&)9E?BI$_UzU~GNbS=zUUJ=4I&=Hee2X>y3u0x4v&;Xmt0XUOHC_5fY0lsMi z<`b}aH3R@B^2@}TN+AIH0tl>-<_xt;e+o=Bmek8(WQaChD3P^gYy##jh_GW~YONdF z;Zvb>>tbsLfN^YaVtz|Sgr5SVRyg2SxUsn%z33qfGXR=N1Gs$^G5|P6krRqGZ1YnB z!$_Tg>>^5lm;*&Jrk7Fy(JOI;H4dZ?-N9Y~V0w zKmkh%Hq3XxrE!bN0&?G>PRj{G7VK0s0Ng3A_b|gIwi7{foBt{i56X@QSu(=etbt%; z#DCyA!YJPEaC(k5ddR*MU=K3Ds4V4h8^Di-qwycFiMBa^98FIJxm4^r2^{(^2;iZe zfgz)P;&DNWsnEU*_X8U^2A>1~IQ{3#@PW46w$BwBAsF95hoJx%T{#HlZ1sG#=E}YP4u)=)T!4rU;xb z`_Y(<3?Tg&s{kK7@n@t201^y=`=1BBqLRfOH)upGgr*0Q(SRo2PTgZ{AM>*TPaO)S zjqQK~x~>tlx7lX%itwvfamI=W_>w7c#2z<<7K>{_Ym5NTYx1)_BWA!7Ln^TRAPY!@ zFaVT-Xz-{tr-E$RyD&Y#Eg?0mae$OyDw0QB)=B#WkY;TJki2CBDGNuRc>@>ifZvN9 z<^@%@0^j!#XeGY5ID(J>I00zs?Kv2JXvB>aWK}4o}J($ellMs3;v9bLBz;DW6wxapFKC}CS8viWWc#F;Lx=|%9+PgUE<s0f%KzEeeQWgk?bA<*g)E&EgT9Lg+OeV0Pym`|8R86}_i!=g=QKbh;nsdV zCJAQiVoG2Oc4p!Luz@xl5w_?KUucK=?Pzh{O>&DVypaO?D9^hXu}pFS)Xh_5zScgzfol`EzU!l-cXPcSfGf)F!poJGyC7mqD-*%Ysupuk>6 zXl#ujz%QMmdFDITRDK7zoZlPqHN6a&eV-}67aLG0R}Ao zNEL#(JK~vW*b}Q!{D6Q1g2pVL-1+Gy9&79IAxy8UutaHYdGj4uH!VJ7c(ukpqxEa4 z&the^MWn$%1R)X)lo_=m;G}5K|Fh9R1?vC010+n31JLg@fuC1=O&LF$;VGLg3T@bY zV-_G%LNw#|QGt^oJ%;l^DX~p{fFz4w|DJeofT^&Y>ifly?w4g|NO6K5di}uJ5bPJj|zV9Jp}Hg zC%Efzs4Df@c`x1HH*-+|FHdvABTQsOxLSH=8>71}a66bxL1@|J`7Afwn&!FC;eY@E zO&Irm3>93s`VI#P@BjS+{vV#jZTppaEb-|zu3{>BbBX(29}h)J?oNuNj39YtzKjKV zC(6b>Es)LMzS!yq|hZ^XnD!6A$K0|-PwZ#9XpbSXA@ee|(r z&mj}dD-@LnZIx9k%vu>^yEdHpJ?AcmHmcXpZXiQl+dz6vdvVa|$=!dQfrnd7<6L~| zarGG!EVb_~qTVEMnvvE5;6M!=nGyR9gzn`FJflnx7Rr`sH5hEv4uy;L-0L=1zrs3S zrp{vV^)Vk37-B4XLu+RH-u)K0omgaibdRq2dw%y$cSHNo+85<_KT`4@t1>3QP_yx} z3if>N(o;~!1wno&wMVWBreR06B+!~P&x`o5oV@x`92W5*s8YNwZN_8ZyRze5E;WGI z$VsBjjk6Y#69L2G?~nIW)88x@+FUAs526T-K8sSrY^Sa zF6k9pf1`@tlg%&uSUy?)ZDsE<4pDa0Hu#i7(RaIM%gV02Cza_GC;FF;HZG#>5qsBf zZM!zT3h%iN<^ItAehm>#1k0C`t7$7E`~j8u+2;f z`oPWMNmP9H!BmNq2?mOrz8VM2&8TxplvWN4|1QZ*xNjZFNxiyq7;0G*UlVu-rP@oT zc~1j2bSVX)T7uv*TC{gpX4aWHX+KNE6$I<$KsiTvZHvbXaCZ*vskhP*arkj)G$nOT ze3S_bPAtE~$9%faU&q55_G-hk1Kd1@t`5?GR~vNaa35GZU{!PmZ@hTLSQCPO;2w4< zbj#I5*eo}wHq=2B(E2CHXjLBm#hBz z>6UxGBdkH&Q(x`x8%MYt^ zf1?UrE-2d;IYlSwn(gdBjtlPK27>YI1ZyqstP0m_=i1JWfUY@z7??B^HyEQS#c`m4 zhIcKUe?G|M6I@?_ST9ZP55(|Bw0a8D$71)dz8VS1GxuEcd0F-GEd!Ee4Dh!$1Km_Z ze4<~gSzaDLsMyG)JO7s{SaA(>))o_$M2GAvd>?u7EMC031hj`sA}#B|=Zvow#Q#Bt z!*4;qv3dH#7&@1=(^BnKGNOnFj4KFTc#g(%-(Sn3CEo<*rTo;>4uNbS01liQZ((&Y zD^5D)=hA%TK1~=9*WC7yUs%S=1|cA;qY|Er(oq}Sb_L3KAm$erKzZv|_K%{=s)!*T?9_E1=4XlydsJ;?EmrQAv-SJF=33iPS@ey@A zqAGK!?MGQ}ar?sr&moUV^5Wc5WUT*6E#n=^JU-}9%5hOfq+Q9~XXR>Bd*C_MxZu{P!1 z>#4zQpFUGriIXRB@}`x&&j_sXIo?XY-uG!)OOv?p_%SLo8cLZe@or4FA*JlR=KOkh zi|URHm?j8am0WuI!j9{hW|jPQvU8T6BM+}b&Xn4sQ*!n!0Dk1wU!GNRn=Jenl89_a((P) zHP&t{(A#Sr%|T3kFg5Gni<%V=lx)~3XXg8rI?JwM{NgfxZy`UPoOs`!5I;p$BGj6+ z3U+*)T)T5+c=l^U<4e^zn|#Agved?izlnw?un>C#11q!fqmu2jUcZ-EhnqbBn6nyG zv@L_bTW;{Y@M^3sJWk!$(TY+MaUfQ9s($B$r<=oe=@bQGD(}sV?0d>S4s02yTO;SV z@5j-s>DdjiW+By30@d`@EEG5ZaaI{2wG)|U(xi@ezP*2SF-GY#1`;GGjnDS!QutY*WjAWK+=}`auJE+_dD!s{s|K?*9-DR=)#vQ zx`7FOMRe#uR%JLn`n3XeWkxu$5`tvQ`I|sC$`+hX?qJi^um?CY!K~Iycu~LW#~vrY z4aNN+9C)_FW4_xYHP0j*)CFiT+_PNxwYYx6_H{xg+ikh4PZk zqhj5t*TpgaM&e6{jW&;54>&XEgk91j#2eE|qIu(-G`)jF53x#gRqfOUw5 z-wOchjX|nFAnDgU+^p`xouyYPFLiIEf5#&_v1oCw=D+wgG4*LK+5aeYC+ibsha+f1 zq07B8C5zQBU276c(Ns^Or5+LdIFYE^pPoTAILZvo*mGzT?KO&r!eivWWW1;MIQRnBH}aP8d>L^4 z&zIp}+l17D2WNO!G@6H2-Wz5V?Pz(n$U#4=)xpmVC7D!VUmn zn{9Z#1Z|NDo*gge&%|dNp9;@^ZN^|3(RYyYJWzt^^+B7c9m>TV9f^WO;jh_K(ecCc z(RxR_O-!gBhXUQ1Bgn#f3c|4vtWnNl)~$#q8Z zT>=wANO+4H*hF3CpTZck5a9to_i&#gv#0h-u)VpB<`xjGQ)ta$>PE1ftGMf8q|_cu zt*P8Y%*?NJy>wmQDcAuY&OU(e4^_iT^IEY^dD z6WQ*|fOCw`COe-?6$CGa#aO-)q^iuoLM^GC^Ay2n#*kpgK)?54yH^w~wcCVtRZasB zIn*k)%q@`VUJbZi;+9THajgaM*t7Mr2t{_-*7=s?0^>R?KR;MB%@(7v`QxWza8H~n zS&`%iXuiCF`}c?#cW)_maDOhg{B?k9bn^k}-Ki=%Np;P?n6SE~0!OE+9T%r^bDths zm~$V$Gzdb{6Whp6YBnHqNNeEM*HJV7kw%+E2OE?DK)X$c&8x<_kLX3;M((kGw-^Y> zh`q$v?9xTAgbTVNlDQ<$FrOt;PE+0KEN0wX37Ph_bmwx&0=@ggGtYl55!TZgkmm6x z4lbwOG)Fgd34AC{01c{7szLG%c6;A^E|h&WH8q>bpy7wcMP0(vBxYm%y;bUtMnOxwY37Rvr>6SSf1hBHmZ&pwjpR>tm%t)L$)XSQNUBu8bmZh!s1C z@rR0uB=_XfJldM)67j3X$f`FEP&BTA<4CY18#AFOQV#R zxa{}Ro71B#yW7m4`*b^;&>yL4Lb!cm-w8!pn0wNpN_8eZT6BtHV)>y^z!TGtWa2>G z)lB+(R64xA{m5wl?@z8~_tqFmkD5iNrqMtA)a9y)G}tphn?f3>y*Fa%d1x_{OmM6U z#*0o#$gw-zU_KS$b+zm_yPIcG9OX_k31B@~wWL<7?Fhd-kAdb8fCYbhQVb_OU2WZI zX?x+tWpQw~1?cL#&l>R`NX6R1Ur4VB<~7N$9);Zfz=OmirAa6+LUA--hQy!ushRaw zk~5XRr&&|zj<{rPlRH%C&rfC^s&^jt*mTW;M6!`|BM=6(dj7FK%9MRA|D@=2HZ%ux z;=KQE4-oM8S}gSOJuLLSWWR8&WL3VjZ@l`sSG#mleDp%M*oF!ecgCiSU>h#OUCMRJ ztx~MElx|8sLe?;cjl6~B6xgX^4_rHdV3E!f;^0s2b=ptLjiKluXTXyUD9Dt?;zT^) zwMqq>vRvae@BcM=eUdNHBZjWhA2w+6wpo#vI9%o?q;li7pXG?$`oEqY zwkd_Ur5QLNQvYszo84d1u9gLYSzd#iMJe!SiaQ>!y^nNc6)IJDVO&@=V!ML2y?Q3& z2_yB7R)gh0A3;}6Q;%O8*}{IAE_t45$NcvHCUm~QmQ=hgTKF_@E4$}9e^YNURQHb` zX_MoB;-@P5dm=)4s5zJXRopa88l%Gv**}d9HzDxZ8Gf4XqRSju+KcJZ9^e3k9dI=) z>o5=veK58)yb2pfD6M)hi^c-JOK3R;uuR_2HL1~slz6`U+P^@B)-rCFw_jFvz@B1S z#-kx^V(WAK=oJ*c3J}HktXR$lGQ|Ry^#vjYYa_M zm+#@>9g+7HE_V@7NhEQ6OV`-vm29RheuU7y{-KE9crubX>pyQpnE5-q3!fOct+cU6u+XZY>Gi+c8|kkD>>>=T zwb@8wCv64ZIoC*i7U#+f&hNU}HJ{V0Ui&nvV0$M08?h<6WioV8nr@8jh}dopFp9&s zi)o5%;2sxoO8&Z;N>3aFj6qmX&L>oq!1;Jg^-8XJ;m&?oYGWQz11kz@T74fB$he$B ztqhmma(vk6!IZxywxRHWQkdHY z#&UoNjiXtxD)sJCp+rmP6*-_sF~&~N(z&W|B|p*944ywfcXayQK&I8z*xK3Bj6ETR zLdqV4qCs$@HMuj!fPWuasR*oagN^D|lc^mogu>)}_gY81Ce}W8n|-H?c?-oS_2L8@ zZSdHqP*wmkIg}L;jbc8o$J6~QFtFyJr{D-L2w1C=LRRO)|7*Y*mOUh&F!vQec40og z_`C2Oz=_I}GYF&UIiAFwiE4M?!?!KF(n}B421q-BwYo`LQdnju*Wka`Tjwwv+BQW+ zM%EsZ5Jn!|`|Y*8oYNL9A%>;tT^H&8vBNa>u-z$*6-aQS_H-`m%i|plI(9+~M1W1e za)8=L#OpH^xk>Ile6-?#G=gw%=(OdW0R9E^A5*Kbb^rB_51?|#aW9FgcmRDVxO}B< z@NQ@R`|p}rxPNtcw`*;dR60{zxi5KMKrg-fCtNQGr$EU-a&+yxk6|Yt>`TSF)Rk$C zefo2258@y+5~eY@nWUb=B?GqG%0?nDw8_5ahl8}%nmf}48iXtlher*}duGKA`G@Q^ zii49z;uC#22YgSRr+>kHlKxJ|4}bi~uHilxup+H1w;4985J;9rNWP}ERSn98v0Kie zuH5g+FTo4!zcQUwewK8fX=Tq23cM{aI-h&4 z3_W)UQL>i8k49HTR~Zjaw?{8!C`+iLpz1+5R^*O2jyTAy+Vo=6D9fJvU)k93t;dyw zU;8xQ3<`p*LvOt$NZn@>tuI?-03F8SG7Q3&Yc`N!T_H}`>E`Zk^D6D1N>$l__Tz!6 z6;SkVB-^o87uN7z5gD(en{BgahZwnB6_K3pH<X0_k*^^0eek?)q8xCzH`gS~h`NOZs9E1aXB zKkY=lt8q>(n?hcz<*9sPbu#PHryG|3XENK})r?=X+b(a#Z|=eSTBv3^=r!WdGJB2j z)Oxb9vctunKj*$U+8C8R8d1(bt)*^Pjp?qSbct~^uEeS%-eQLrqb-;^%O~_~5=&J3 zq|i`^BzNQ*9u2W@bXO2O7(mg^owxsDYP{q$#^EIB^C&D|n^Rc*BXYMu>psj<`6H-k z;7t}0YsPSvx^wTJC{QrlqAd5({Z_8*`IMNkGi$szwRnb{XddsK_7BItB3sAmb-vH2 zom~|GqLI=1XLIqv7d8(iGRs5?<)(EF&2YGRd2a?K zs_XG8#D9#3)E#5LfKEBI;?D{k7U89gNEfNNGg0 z1S^qzH>_POymar?A)B(=`zLj_g^ z(&|!aYov(u9@)MdxdwCA>4Q_bef7psc3hA%|8?6tI7C17Se8;=GFvWYI_?)E1XrmI zrMn>(q$A$~V=dh8Bs_XWRG>-xXnQ(LY3tN(d@IKNw2EtbF5vCDUCB`S`i@S^+g@pQ zIFtakd9F?`apHAQPxwPcGQD$B$}ZqUDAxs3RU6XB=(_YJD*B1I-GnpY=vOV)6WMDn z@4iqC2Lzq_<+=KP6F1&*?{gPvD|=nvs?36VTwMc$>vUHqFCrV~yst!Vt6yhE1WLJZ7K|S@yqhU=IClH7N5;2f~Vz2?52Cm!p^ymB8-LU+}dJm*Y9&yHD;|J6G1~&DJ9+!opvO#B14bUD8g$^*? z?eC=9RaEyddOCsMEMm>SBeT;zH&b#~{4S1qJS~Udyswmf^o3laH8q^(fOIua#cjMP z!}mh2M=>t0deCZ!i(|@jOv&>l@5oP&duivD=selvFW*89iW$>m&RDo9U{L~*sO^b~ zgRn2Gmn^k>eBA^q`QN`h;vYdq)y)PR7tj71!lyr?2)NFkw+#!Hdxc@6!Y6bZ^BwcA zJ9=A!d3i}b<2*$P)C6@X#9#|wjWH-J#FfYQ!cd}?pYVC`x50StG6r^LP6}zxiHN5X zkZoNuOhYyH&%4BO1KK9JS*_Mf12RMIPG)*NYmJ@+RNrudbyy%8U^_Vi*q zif`3xzV^|1dToUw=ib+~d&Mb1I2z%n)EYg#YdW@To;;5qOtv-Z5&OkK!%tIW;VlBE zt4m})A9CyXKEK4BXMiQ0WS$`RoQ;SW!-8@(B4d;HnlePx|7B^GlR!vOq3#Abl3V6O za{pLt*fca|)`aZiW1Z?Z+3LU1IQ*$29lSDu8)RvXPs59UMh&X_#l*i$=}PL9J=uDB zt~?&&PdS^IxQu)7!*ZO5cB8!Oxl7B%3SXh^^&#+i3TB>(3d3&$(QDTdhN2a zhZzq=Fh%dBeu{-lWH-O(U}*rV>K=hUP9l{3L&xsEP9S{(C(V0MS=3F7rY|OqoLf8D z613c&%{t2TR#1@KS32Oy@G2WhZfS4c`sUVK%>8#{fa`vIczi-%+oraTk?jd5cg2ms zv1Cl1*S)!bmxM<;J-IL`AO(upB#8K9=%9~GxO1sggej}<`=)pP@1Fe8uF?lB4Qq=+ zmC(_f80J%u$e(emmFAhz2KrY6IFL~d#Lu5!KnB-QK(^6xR}^xoBSKVM9H=dfE9wJ4 z;9Y85x*0vSZp-xIPW091RodJn2g1x=pUd`>Oe<0Vv0=lq$=x#IOPF@`GJ|Jag^KL@pjGk7H!G-F-&Xd66fCWwdF_Qm^uNx- zFHKu+S1UgS#~NQ#+1^9YM1&H)5yb%t)YNi8mfst+)BZllHu1H6_DAc8sh)DHO#5nZ zr}1Yq%jI^9jNEzrmD!tPv&0BWJ?o9&LiazhzUAI8gB#fc?Aq*uAV=Dd?Q7*Rv|!pkui{%&vQG`~7{u+10VW-SSJ&f^j>Ry1^11`C@E=CQ~ z`qn2^bn%INklf_ogdF<-_?QF-i?JIwO15FwrZ}q0Rs*FffN_-L>n15 zJMT66P{LR&l zoNV(=$+rB5dqRK?Yo9nh_LRN_z!W)ClQ?o=5G=WIgBiIwJpf4FSd-Ym`@FIZ)GE&6Z&?Qhz6kSogBd_f~I z|CiL{QWj8B)$xDn`e(~vCHx1jR)LPS^vgIZ;=bM>Sw7{DJvoJ?OGFboHY4T9B3~>t z)jNOQgWLy6zJEAqR_y9RfFIAg^3K=X%A9}H_yJhvgID4&#JLa^2!{W5pp7A({?aKp z>fLF9lz@oWK%{m*si^4idKBl5%_^_#zbn2kz1B&!(O%-ufo0=Mj`)}=Hf|guc2=|o;!Orbysz*u&=p}a z8TSj%oqjq>$d-8 zLJkStf4a@*9JNYF`CrIjd=I47Cf2LgLC~abm~toAL5(@`k*a9KD)?<9UjFY%x1095 zt?%uUTWyzEEniua?oS+6$Mbay{9~tbecNb#vx(eS>M3a7GNrVU~e(w3k_UU#DXkIgkT|6R$}76?d&gpqX;DC zB(el4t|&=^C}_iVX%WV2zqkXt{VTPc%J;awG`UkrwQDL80$z;w&|5DCbo8sKM7__R zZq_;?r_i*<1#p07zk?nSSNNyd@csw!Y8bm#R}snjAM#yY zpLq(-UoHKr>PDz?4xzm7`?}OZ@N`>}?9H0538$V~OxB)=vx^pYBed7rb zOzo;V5uX1&T)p6kR0FTEa+a0jY7k4RvFB{HT4lWHeM4TiM0a&nF@rk$#456wsxGxM zL$sgote|(wt{t!>tj6-suZ8b|l%Z==GiHAlJ;=PkoJ&z2~SpekY*9)}H<%?J9_ z{q4HP@wvT_d`Y`_NJ07ERZ}U;n#fIsE6JhD>*%V-!WCF7ep0z&Tezd(@Al=;?-^&Q zN(oo@3tc5J{r#~IKPqa?&sA-hH=lQYc8rOAubFYUEqXHhN|`VtKw!90KK(nR4~GW& zHt+kUy$hG|Z6~J2+}6!kMn`%4qZo-KzQI0Z>86~BHOTxI!AZK)^;VD{jq#vS_WE!KehXX2cNviw=2out+fsBX`FQ%Iz4P@ z(c*c3(p|A$ELlnyJ~E=R{G(IlQ&F*~E!;R~o;J+Gx?#v^LSnJB#SyM?XSA(@SmS=` z@$B#ChhwUbyD^vqQIoFh>jP4XM6J60g7i%)wrPBVq`}uIolowe>C1Hv+vw_6Wll!| z!btqQ+rROo-&|;~HAQ&}l$@@^75EVA=Pj7>f;?_M2*{^Q&To?B7B#`a8Z7G(>R$*|_;*;H` ze>iFNF;)$O5`{=16c?P`Mv;c}WkSLY8w3#3#n8jv2ICPO^l-$C6dQ6|V-i9^DGGt| z$nI#{j&Q0DASb;{Ixol}_NS0jx(0c!>h;}A|MeGYP1kG+=e-pC_a##+z3&rKL>Vvn zb3Lmn{$xEQ(z4LFH?Lk=Vpas#A4_+p%+NF$aHImUF=`>YN^IlH{fioQd}gnE8n!Eu zY+Z<=P54Cp{U7!FPGYa2>%UJ-=cK%4w+byk9ClFCU;kj%&Z=gWz{p`-b!HOlQF^a7 z%g4^nBcm|PC;0Qy%dq=t_e~`K2X}876=l@EeG81V0s|6)!obkoT?4{^lpqKq-2xIr zN_R*M-JnRQpfpG$-H0e1(jeUp@83#>8_}~nDkl`aMSO+za!tSlJ3i>znYu)8+F4txA?(MpwQ1AbH)r_LpiPeyPE2U z7{kzNsF76f2eWDhUR*3w3s45%jt^{~iNWoygbR^@1m7V+qJ!<*3uO?L3}kfji%ca(YbjMxTBX~BzCj<8*@cGt)Xw*-IQI#wE}5t}jggRV zu7Y{4ixaPRk%RSHH4Uguk5Tm>GOH2HJeT?6sS@_mZz#Pe=hCa$T@SMV{xU1vJD{MZ z65qsYa_uw|5D+YPJkAiXlS+H%{tXxg)6+kP_g^kEzS`|$I<8%K>QZ|y@gy>v=!>4>g1=*W_8q~*@*Bofh*bj6`c)u5YvgZ$URmdK?*X*4r*JY<@3WO^+L>GlaHzt!+AhQ+SLO4q-$-8o}7JJF4$j3&iE@L~p>#m;mO-TZFHo{BO{ z7|wF)cSNG2NOCoFEAlRJ;^d>^CMRDOsAct5+Ki;~Tivf_O_0x#@<|nQWvi;Hx{XB! z{P~Z6byw7y4D{c)<5<=>n$uc(^~vD(3zKrvg0dZKJlgdwoYeiRuFsG6MDNeIi%*7S zO5m8b&oL4tcChUHz2S0gfSW1!%bMk zRO&O{Tq8}Mj6k#Yh)?1jOeKp1lqw>Vc9kEUKr8pOFTla!j&X|9y=76<@Q0`ayI5N{< zxW(Yr3#a7~)(o0zhL8U+1Gwx&oG66MYeQ|n&6kB@Z1S4WyB6oUvFP8U0?f$9(2Ll~ z?62Y(;kdxK{thTIHLJ)B28AA{hj@gkd}cC~484eWbO9(=y7olmhLqB=pv4MBNv}G$ z2h%7@`a)|Y<#QyD3s9_3rL~IX;mgxHgU_24LiVQZaLDSCpuufAX-3b$_E}QobaC(h zZ4CzW1EtZA%AVjNZY2blL3Y880%{@TP3=KL(p{~Q&+Pb%36KyfcsmXw^z|!**%f{3 z+Zk(i3S z5N~Q?PokvGYxyO7-BQ(@KH$%lG_FxQYV9Vu#7}c}AnvgqZck-+z%?ZKmbOt?H0$ve zw9fmO{c?G4Q3-3w^R_N3`UfR=u}RWP5EZ4P{G$VsV5Fv`7y66&{}_k4OV<9pN^d zqy<_1Ip7Pmm>waHT<1(oZ>j}2Y+IDAwX}caruYu@7^U`>kP|KU@Aw9N9sLIDV}L;r z@&2lhZD2qyQkfh7UM3Ow3qMfRZcv6UhzuEs%lm7czrO4MJ@tLzV%2HG-%QVY(Z>6r zP<_O;E#lSTAFXiUd`dbw5Ye(sd+ zq&?l#PBmw~9c)PA0{`eJ`fuVFHv$h|8!Wwpjp>_R{$f?h0iiFS3g*x-yXFhsf;q3d zDTWt!^i^hPRz-t@{mU@$FsjRJOdS8?R1~4E9;|5*ahKnB@R|5kTrVZB1z4n%CQ_+4 zD~D*D2T0-bD*cv&r_|l)MyuChIVSf1Y^t9<5xfc| zG`X1R;=7t<|9&`$Gj95CMPvvDhX7?kpAv+zVF&eNB#^q}Di*GPI^F)H1gYV|Qs zpiYToN4cJ##ms=haG|ZR)cXytOfme@2+x?2>ZloWicp^&{psBcZeEWy{%KbSLH!)T zsF-h7+x1UBv1l9j|HF;s$hr}V{!{gP^!aTWzezw~xR9jKTwH*UZ-*rJ%)pHL7A=M-SO;3QPZhPa%(BgTaWyLVbYPr^pzm;Tb zM3-+|m(kb40yYesU+E9Oe2*n1Y9NKY`NHf*)y_JyWBlv8&$!!9&dc5NceNH_ahsx_ zA|+x)An=w>Tvob0DbT`L3nM1LZBYA9mTZus<_4295K&?T3FEqKh=&XD(edQ4DH#XJ zLowYTn8xsDmMT%$^2Ega`@L?JS0e-7CMUEbG^*@-!-UAZVS&2#mSF9PU}6ueV_Oab zTl+5$SDeNieA_nNQ%c{&K1Pp`S^$yVgR-%e_uMx`?zGNK%$qlNTxYOL4-yYVR>C6= zxnwIzh$kyQ-lXmU0Uj?i6jv4!V6U7M(Dh9`jCyWuU@t}8;uX<+Drukww58L=-7V)W zhN=&(W%p0RzsUQEt@PVjzCc+am=PT#l9F|fBe6lECUN{u;`+6upf;Wedi1wOhfk)* z-z+*uEy=PzI<+)koP^G;w(6ia^I>B~{hZ=a=0mdDOP=j8x+n}Kv>>m;>;}gxT_uCL z?aC4r44_b3vSXloh=d&RpDjn%?4Fi4WtNVSyWsuB1yZywAq7arc_>rzpCGZ{nl>*Z z_+S`N3+Pw*w4Qxr*AH>WwbP8V{jvKWOs*#~oqh}Tdo8(NUWfS72$d7@Dmb=7;4<_` zx(|2s1Pr?Dy6#UIwVez~C&ZY|EpYoNpiWohl&oI$RoCaJe#C-7N}nOa;m?!LcYo>S ztd7m`08jujzB{+3XnezVZn-~5IF}4n9Q+^;@?>%H*=CK6-*(d>?9J7%daC0#hD%=B zN~*@Q*9$c@H_0ihLOjkV3{?77rd$Z(amtE7cquO;SL3uKd7oAuTCMj(h*v>}{8qeg z5r3Ko8CUSX7a#7a&_&|q+!LZo?Ja_886`Hw2WL1ugZki)4CVS0xNXwie;$hUtl>`I87%BUOn_h<#;xXPYu6kv5rY# z5v=SjCB*WUyd_ne`bH!m83ZRB4@DFEAIlLf9JXaIe5!cUa#j8J(?{lC`b`utfx%lkpPmSkPoF+G zX^+A(*HVaAo&KWWe4DFEY*p_3gES4S;7DWaYh4jlwJJXX43TeODn z^#B#;JSgLg^VlEltKHsSr79ih*{pMNP-(}-v#a3KqtxBsHcjp)a9JBo7Q$pG#n{^m z{`gE)`dIRa4Y3^Oy`0OgN|LVC zb3f=ymOFsDfRP}lLRtBzv-kjccgk*-s0+DG!^oI!c@<}LwT(euH4)`=LMt22WE#l8 zo*^EFcq)2C-Bn@H{P3kH^Z-fz!DKc= z;^I(F;=Bvz>;UD!XFDiv-B0oTU$873>NzUYRaIm5Ym&HvCjO3mdNOBzQyEo7rkNT! z0}IIBu1GpDXffvu5ZDXNM~xKng5o+77$n}9hCw$mf_y~_7NG+*y$kM{aB`uqiNyQZ>2G7q zhk{N%P#3L7CuaCMao5^d=+KAr7Fyl7dae(8dAv3>|9Py4n)JP>kSie@8e-Lo*TfGf zcQ^X}j(x{&q5GrSLSKa?>X)|k-@jPN&i{mCtonQfE1lshaU6)Y24TU?nf{^h2;(!=ihps%ZR1}3{gbQ%$EBl!7TZ(pNawupZ;^F;X3kn5l zQW+GJcCA!}>K5`ipn^!p#q@N|si7o}>JP>4MS+xE`CjLtiA86O3#Ge=*8T5ctYfb_ zKc^h6Y%VhW{HQ#R`L3MNL9)%~q)Dcb+wG&(1(|3YJX{@2)p(o8$ExYrD-r@(THI%M z9b9LFweC-3xxR*)W`6{p&6d<%NEi4JX3}R}0V^&PMY!w6YZ3(^1#hycN3ZulQw46 z)E!lW3U#CEf8#~C(w3fMyKw$)uwY{xZ}WU&`_cfq(1vM|B_x%eb19N9C+MejcS*vz zi~IX(M2OwnOA@;=P7U%?4*(TmA-gWhCzC;NSVeInkaVS))Sm8xuV&LOnEXyVl3ra^ z%<(h3S^V{{`q`@2aQQPf)ot_D@wC;8>W9C=jvtBtEc4;ahg(?SS&*<3S1=(?I7N3R zA4PZu!-@U-74o4rtbg+fQjaG2r$w)52Afx;Cf~R|^a>f=bnX=u$Y(~aEYGcuW92Lz zbY->p>fb9+EOcwQ+I6`vvBqJUC-{4`GG8w2__=oFhi@miLKCLAg0QYoG(5aK6V1di z7CIZG$e(BH{so?xjI@q}7Zd+hL1oNtdi5)9iq{eF4gt05zR5ifhK1tn5IqG2H5UXf zJqsP(mwV!mP}u5{wZbVzPE^7%RD+3o8~)L})obP3otvWDClcfr{BN!X0js*buut%i zS}00K$WmKbOX__tXTGsYJ9gjr4fK)+}I)@(5v27qPh6mg+7h+37KE>cRXel1co*!Iab-Wfl8Fnig8E1E~Owk(r zz$%%>&wV4+_4pK?BfSkdo_ftADOR<(6;_D)D{IBe@byD=0p}yJ%0i%Bb!}8E?ID-@ zgeNK#43|w@4i+$}6*_z@kq$Gc*JAuoDUWyuHwk%fnLc%BIcKJ3IyY<(?imvwoJeGA zOhsaK#L>^k=bTH5AeP0zcxFGop33j>ucxv0GP3VGh(8rX8R6tQ-Qig2_sCQ%>U8ey zE_1;p=BLBJGCcyD3~CiRRg>eOxy4j1?&Uo_`-!7>ie+<5wzA1U2_-X9{&rtODWey{ zh!+qn5c2(R$@E@5jwj=K>nb2VlUMW7?ZFhF79`Ku@^N>6)i&&3%3U5(#1a=>@VU7V zB{%J&?oY0~{fGT#;5vb+d;?;Qw8ao^u4AktRV`I&wtd^E~iZtH=ij8 zNb_bz=+AXrclpH4RO{x{9dE7uY{IfvX0>^UYd>bXIVwI}|CF(ak2ee*Zavaq&BZ;G zDVGe#HIuX4#&2h1Y~e55GBtanHncXPijYV}~$=%&B1<|Yy++cV)ycH4x<;-hh! zgs&4`C68DdT`0!pPHnGuSLgPRH z$wdYZ)J?8eogDe0>B=n%Kv05$1Eg1!MYwTrAb=PFh*x_(|Ks_znunjiY$==!vZ8XD zQ>-$e%4MN&$|taw;mv*CkpQ%LHy(|KD}(|F2R?__g#~c%W4f0wM69~NWcd9+xL;pm zs4h#~jJhxUM5(nv8yADell)nH>2CCk)cTghS>VN4{Wkl|m0^5umw((U$6#F*KK63+ zDCuB*a?6yfVV{XBy@5zLYC3_S$(@P%WDbotwcWiTdBJb}Q$y&XWazzfHv~t@kPn%* z&OtA&!)oh+rDpHH2nhUTcyIRN+N#y*_C&1NwL)&~hisGj#~o^ICno15ZgeG|7}{wN zEd-YPYZXJ~iCoWr$*VxqS0p=pP%FP0bRHSR19TD#EPR=eS0TPGPDSjR<88BH*PF!) zGewSoU>oz!k0)A^-g4NnYatQxccFM?=jLXFLcQd>OIt4-|JC@lFFGVr`klTInJ1X~ zH7e?f)aZADdRzt2?zMRtezcD@blHBcX#d3jXUjXH*+JDBDa4V#k{xd`4vT3JT!*pO z4)?X`V1J6oac!aJ+Tcd*e&<{~;dESE(_2g}H|m~gMc>|7zazzLpL0B}i(j(duCjUG zcFqZD1tVb_hab(Rw(S}&w(WjbM1=WyV;fy|4kUK^MfY)w2X|hStay!G1seI;LQ}l+ z1AXN}`7D>L&t11?T&29$1dp(7wj0C`*t_Ana> zhc^nlVm7tI^!3Erdwvn?v8)L@YxiDLfgf?xS*QK5!iw$jf$#f)eV!i{>kf+pBJVSZ z9GCa$rkN=uXQ1?mYDj>0gAiOIq ziN@O>U%Bi%O$!$>R3&u|ME@QW)(|yjX7YJM7hf7o&lv^Q1du3untQq0^tz`jgqDrG z?>c^$56fCP{`@9hG4XRdvBNr$p;mk^O-{{frYys0`EJSqqRVw%59`4r1;am}6`zPC06uVcEaw8L?s~088gocy_B3jEk4km2JXT9GbttS7B2B=0cVUs*G zv^t;YI;dd&U|SUq?IY)+FL^XrS#exYFJFnawxEW`->F`2Tz{;R8*&eqhw}F!rr-Da zfcZrQ{$l;Weak$u2|94SX7acJ!n6&MX3Z{A{8dtU8?V`(n%j7F_(CmSw4iO zP4A7o^Kg1*#byoX$3?Q)>N&JYp6%Oo@fCP6@+#!{o696lDEOQ4M@J7luM9}5G3f4D zo$Hq4ZcrYz!SzyWOl@?VN^{z9Yu8hVE%S1`9GA4tJfM%2y25m5kb0MLeJ-Ldd5t?Z z2h3lth%63$RfdGp~#PwBvq%!-axkIf&7X?wkW5?7n3%jH@e zkA-V@n@CX3#H#>m^NZ!-Hg`X7=;@Y`e7w&xY_mIT>+)%c_ZqsSd1OE^i~HPtOG&#;B|H63TGsU{d~n=a0PEZ(zZ&H(R>L{mOEoZn z&cj=xs(sScWH#QkLs>mn8*oJ=p6pIBXf?`Sa&UPNyZ3X3NaHBYfKs}c;b(9>KHC@N zTPPa?-ra;JYgK1zn{`tXZZx&R32s!%_t1jEAK{F6nDTV-7C&v*guIV(hdI7ltJnAX zo3+dDOVHm%5Njgh1L4Z9a-!$08KUEizvPR#x{w)@T)2zY#r_Bxp$`|jOgY}7Q%w>% znihDbF$qG4Fa0PPaE|FF>0nquZe@mN0A_yC|9%V?+xg|`&3@)$r{Z4h@!0KdLYD$hxF!9O0>v7 zKHQX!`jJ&nBG0bm4UM$insA1Q7R7A1Dz(nU=4}AVcmhkfQI9-pj&v=!o%ZR%t`ao&K8rX#JGGRx7ZD9L8#r z!IhEIqU!#r^%vv75^zc^g^GRqlVj+bWNgL=KwY455<~89l>hL@X7e8m5_&Ip_e5C1{z_B_}2K~ z-r=aWt zO-!o_#m|uM30-jb z^7?a8Zc=~@0YN*nDK)5Hiv}@VdgLuP6@V}wm7P%{U~~X@RtD@WL(rvx_Mn8dG7i&* z-p&k!{8?eD(f5FpnlnOn-16>SSd=P3Tpnw6S+uZBJwtc(eABh@w*W;(>icC$dCO9!LYM;d4F-S$-=>@Leh-}3On@FH~L z0XvcuEDeHeU@gT!FHj2fiZ@!fw}a(f7&yPZXP^%wZ<`RlcLJKa+B4^tb*F3a{~lt3 zg}L|a7QJUF3Znw&(F%qWkQ@FF2o?jj_gD!a8}=UK?U{g<1e)?22;Ok3@k?BuA~XPk zVj)bcZa-E}7LyuHoD+2ml)D3#bgcl$`V#!DDMMMo_Mg*cyOkPqFhjuS0w5+hv&R5G z368;xx`)}14|b^VvcOwrWNf_r2aVI!e6p8Hz{Wr~39b`%`}A-y=px_=K#bf0G$+Q} zH%leMuOHn$shfsA)x9m*=>ovI*xSQR;!i<@f)6SE&Nt|GXQd z)>s1m`*Q0;#{Y{xl*7vG<@k7KK}gw|%Xlg|Nafj>*jsR|W@MBCfF z1boJ@Xd4rNswD3$&^Yays4V|ckfiznM7nA$?X*^InQzuwmKi$Wcm}=XI7KZ>>Wn|; z9I)hfo(jnp@fp(!j@aqz?h@k?wQFFca%F?p4L~wxUih!`-aHitRiSZRJ3qa!B zL?&C9TZ-akAOaHoY{5;8pquvr0|fwb1_<0sq(ZmB zoE_J!j``BUKzc66q}mq+mdX5zeOp;G>G`4I`cA=wsv6HTYoT|wI^BdORg>m4zEN>ZiD+Pr|7J{@DG`1ORG>NB}Ug3vPZJ7*q4Ue;vPO z{EnC(la@FB^woc6N5IF8(+16Kr-B0;9(*sO!?J(N;-x;gxd&>A!4A)aIwZ<8?vEV@ zENb8;6#|wWg0QkkM4m>Jw+iAi;dU+}>&6ebUrjLzWD{;0KII$t=DICeHU{eiMnqHQx^V3Lzl&L` z0a(zwPL>InW^OM6-M-2XP^nOu;QrcIvs95~)wgddA2-_aYbxJfB-{iqLcK!vZ(#d2JIO`NOsV=HiZ(Ul6Sir-G}NY65ef8DjrSUD{^B6T>L!%LCUYD0JVQQx7=Z6 zm|KOSts6BT$A+lEMIEHtpsh`%t&xF6r0 z@uJjxSo39XTzWd@I34WTfhQSF>WLX*Y3Q?NlI>g6o^I>T9FOdw10K!bHv=;s98B;3 z`R^K?7%m>9o;@DcdnTPRYG{*2YZN8Fd~^zPl+(b53q3_ zc&^2S>Ap84T+@@wULC*1ZiCmr>5Xks0`IlzQ@84uC*mz(SiDzdPf#$Y4A29oV-gKge>Nc*^wi*W$Zw?HP1HN|_ z1qL^HWVFQF4N4|8&xCC1uZla9QHf9?@Vb&NVxfXVo*oBbA$6ka71i;3q)<_E800p9 zm&;Orwv%{lL)=KA715V>Bz9n0279KSJPAeEFTM-kPW8-ot!S)?w~gB(U}(CJO-=k- zzddLyb0D}&htGWNT;Mt0lrG|O=znve;Oc~st*khA*-*6ROKTaajk)5~MC+=_%<-6D z^YgzpI%o_Tm)kZ?*w4JLx+BqXMB2HBNnJYOKRAvzHEs-Av$HbccAP1;v;)hN|FmzX zkQ+Utj*Y=7y)eLCbV!DktDVrZGDiLPx4G>dx9s23lcc?pZfrceOlI7GGxgclZoHGd zuk1N1yVyK`6F)6!u(Y6RqLwR1{Cd)HjJlateG=Y+GhE;f{{t5rFE&-tFuvY#n9td7phUUp5)A`6G0yu@kOW(tg12O*5$IZgaYsmms5k>3KWOOjipri)D$q%=h6nB zwD}F*CoOR7*U=ugOiIM%{V1_Rba^>VyEl29@O|gdfW;JSL5$)dP(Uu{P(ffPt?-;B z((+eryosXn;i@O>{*^!+4Db)%n_4gr_m_pLiQc+!-0op+*f}5~ zj2fZjjjdHFneDdvF;+t}p}R`h%6;TKUdOM}4d}2*AfQ13s~up(&k1K!n~qumd>O3* zp!~N^rbQEQy5J58=Yb>%LsypiotwM=P>U_A3B*OW)MM>Mj%~^dQp+u8sb(4!u0eUr zoEfuBUI@3-l!Ia3f(&tvI^7e@h-vJD7pa*o@4udygt>}=aR@@r1Pf9|rF!?qrcJsE zcScF27+{+}S7yZTU`scwi&-4XK^(m?t35uocjA+8p~EZ8G$%paQtDeRAD9JV9{BkY ztY$i~Ciy5hy&8KRXw7`h1XlQaHk}1oNxNQ2wi;?eDMn%O7x?nZvFoyLg-)o)^nv%I^p z=ytzLufEe1&|!kL)EL#n|76ybm4A*<<|`73130|y)QhRTO!uDW|J-iyKB~{;3}TwX z_eBYD%|U#Xby-CIS1xlZ&$jaHm&x$Pi*V+`t9WNEs$61Bm2$i?WPyAQOuW1e{kR*u z-KabS!m7@qz_ug(Bj2pV{LRTD(YLFrHg6YWC7R0#VRRVSnLOxExi@t|>mwTNJ?~q( z>>zo7+MhU^`C}$lO15xoaDIbYn}He7@J~~-WbpKUyRAPpdL4&it1bHhrH#Xc1@b-u z#!n@79}+X}mpl3AAr;an{G_wGjI96eY6<1BL6(B$WG=z>okNaK=lxzjPA%#fTDS8n zMAnCI2_IUNSDoLVaUvwx_mX7G&QS(4lTMxfSK zm}Kh*YHe9h(bzeG7$pb$?s5L6r#W9TC5VDq=;Br_A237FFW8p!;=Ul{J=Lslm{W8P83tN(W_ji$U?{z z{La+1sxNtVdd1?)bFBA#D(D{}bW2n1bN&M>?dJ~&!h-`@giGG%eWi3ATi%>hglB~J zXaQ8a!!&=uUTg!RFw{Qv>aVU^ZAB6swinws_38K5AG2XM!CBam&QD37QfJ)3U@DQ} z2zR&S{Lp%5bo=E(PzbGzvMxr%pUh9sd%qV@U)8(*XP27}VhEm}BN%Bp@)Ir0VY{qq z&uO~P-?YZmZ?*`Il>9w6a%h{+7)xL#4LT*u$U_>ez7hCs4t}+py&d*Nqe!rS$B#pV zqf^Rc@!Kimg6%c&$?zAp<_ueR`8yB#7Y6N&1ari>AE|zR-s(?m9RH+Dx8;M(+@t0; z6a5p|L_4u#FK?Xgng2#tW`}`;IpNHA0tabdYEoJy;yV?QBzna5s_)YHy||__-6+KE zzGFGl?=geD0$qSsOcDw8s`IjFp;K4USC<{B6#XH|$PG3HQ$Z|D#64|2e%isEJ|%aR zmEf%NAkw06ZH@p^9fjvk*;mkW)(0(^y7NR4BjKN$xoucm&K3oEhWyJ z5Ajqh59g(0242~$FiaS}aATX*ZGaSpgIu;9-ebUVyK&*lj67}WF>o4X07zAh-BMrStkDa0J%OT5+V{EX(AaIDFbRv8LVA9GKE#u%i|TyKjR;G&X3Nk zq}O6dOU&cgX&B{J5q6~0?_3|Vab=wgEW=wqRffN~-X$cO^TO$})P5yo>UaJCrTG|_ zmzcp18c}I$*wgRKo>cexpDAFLFCE~D#!;J+z00Xj+VR^cY#>KXrYpno?8L&|@X2h& zo@pU7kFv5v8HN3r;AVW@ zS8pUwSiTieM*Jbf#T9&RG2kuI%*{N*n?~yPk4UYUeiARjjj5epu&OengJG!Oc=pNYfETFdV~xnF0j^|slSc}%J@69emf?>I`|^YTT3Z5Hctfm{?w!|}UG zyAfwysLnSel$e;6}>=un&VS)xy}p%KEWFwmTN*##WCM^+}$E4Fe-&fwoYl zoAh}G<=yao+nTbjXB5N9I0)h*B=Sk5Pu0s08+N!nlFftF0y+nNxU>I z%ntB6@yI%QYez(PyjJ&~yV42P#1lW-lvl=Mjeo$;#;(s&Q|)+Eik13{H6AR2IY{K* z%k@v`z7j_>aDC6NXqwK@%>L9%|K9;asRwd9(XA$n8(P&f#F|>WClHSN$H~Lk4_dcA zQu)pwd5>Eu9?zABT0C9doraRa#YC3j4?c4zdK^@xczVt%yZt-TzCTyMt@ighj1}4# z?$wpk|4DqMY=)?lcR`<8YZ*+qVBikbC}wID&x&Kt91K)FS*$mjxRaScOH1f_+qQ$dq z<);SEG6WNWEVe5)9pU!NU?8GV{y@3@Q{%-Gp67oAiOp`e_Mq;xz-f$D`S6t$_Qx>V zr_UZZ2NC;OqLE25IX^CV7otj@?Te8b@vS!8>n7T(=2Da}Zfe(u*Z)dJ}Q zc-9nK9vxiPklsx{Om$2@A)Uhnuk59c!IQF|VFvf5BCl#*CZM4@G7IV|$`R(_F#0_! zq1q>e0}}kpZy&!EWWX*B$-=#dHQ_cDaH)DGVOaMe%@Vt8KyB)m^ga=Zaf|2O4$L!g zBFELJGnYrD(sR>aY1KsUV`zrNj(7U6(IG`ehHJq{LRcm z9@1|=^5grso!aFlP1zOhV6T!y8i_GH$V7!GOF!IpQOI@_BM_R2-SM@+a#VXG0|p5t zTt`FL3x!TZK@9ES6CzIY!kwJ1dGW6pLVCC^Je{Fv?cvjZ0-aHf0pFLCy=^pv;R$f` z4+I~pEbeZvBmYsG?iJFX4TDs39@KQYLLodfVU)E|(EWFpE zs$P{*<`n&)k*A^mw67>Z^sL?1=CL<%O0;Bh^+lJ{c9uiM$vQ>Fju;iE1?fkm#mHwb z^~ixRRL{NogcsUn#+}@0j(ddF^?zNCUzP-DqSAb+zsXKv4SXsHfa$*(8V%C@`k8$s za^N}keT!B58v63|o#v$Ca!ed7dPZD5`FBQ33;aXNNrQ8LBW+8Jr?NphK#UCMO94Y_@!S@#5g~tPOWlbq_X~CVzyCPI3OX0-0LRyPV4qsHO~DGuI%mpeZIwDE;9S53y!Q zfvIry+7ti~goB-V@*a1G$g&9g&(l%4SEzvjiI+93&8PDzj>;~`(CX1z;BD%8xml;U zUVee=yEh_7`J7#OnTDO%VqY22@$w6Ty=3Ny-*!ldd;b=&KSN<9?N ze=HeF5JoFs5;ZiokN>e#vb(rdAyed1q-;?vd92Rc^oq_$g;%QLD}V(a#3mV zLtB?<%L$x{)Qb1vb2)A7+>&hz#nexn?PT6JAW&Ly^zS^kk}S)udFaA>qdlbT4$a~x=gxc@ zf+R#-MnpddKjSm>JMuZ_oC$=!H>ZJmMw*wUDZXjW5l)UYP!~x&DuS|7@Zvu8j#R}F ze+JWx`YPesrmHZwPvbe1MK#`xQ;wwEQ)hxf@o=H2f@rhfZJe9Z`-L=TN3t%v;wSuj z!=9VhAD^E65V~4N@AEyt!C$wqRN0ZwvBw!^{AduOsjpDRX0@K1wDh&{QxS=f$a3EK z2T&;#u-_xSP*M#oKmHgcedTS)c9hHYyc@4QapYyM(}qtJ%`q`d_z@XD zo9a6~vyzcCk52c`KPdO&K&~x1KvsXVr^$oj4y-x^Rp*f}_Kh&OwlbNxr&+;S>*GMSNqO7owcLIoe z9_(wp|3BGkQFIciZO#5KE2ghm#yj8Nl*3tcNxko;m=uzGby^89VxvCw_2yW zwihNm30OL}`_E2Lva`M|lP-g*|Lz_RbRrZv9M zS5Ca*_m@V*N`^*#Mhn|;`f}zYJFRrB4zeaJk%F|Ifv8D zKDcvI9=JI=^Mh%^yRs%MbC)F_Cu)Ursy<~~`T8)TXz(g4Wa+h)6Sdy!_VXwJH&xHi zAyw5A2?@TZu93w;J8^wfo&$1r{F_X^haC^4Y#)z3_Iu1teq!D~F8O&SfiRq7m-c3b z?>ax67^|mXNNsL0!^k6CpGkdb7(~_nK4cO9I7#5SYsKt5>grH>K-9^1p65`y;O_2t zRex{OYxnUXJWgE0;GO`t`8hY&N@ZEiNZo7z@Y!Y4Kjr|z0AhZ`%O5_ZLn{sMcHncD z88i(C=M5*V2Lef?7y);JI3u-HC0y2#Tz+491^1 z><(UH@|OH1jyt``{FEmHb4Y# z7b;&52n>|b@nx`g4<0u;(Z7&B#Rg#jq4z|V+jZ#*9!v}G*$vj8s_hRn z_xunq8S>(mP}dSAA;#qy&(;0YE|(IswBMyudKD*aS#*9^;^dHq3=!m*+Cf$+YP`LL;D<0Q&c0g!8Y zu01x4ni)77ej>cL#$oyGCVO@KZHXSMFL_Gke>Q|cf>(Re!D6YRjCMo3&N!oSC zkB|f6g-#Rp8+==lIehN{98YLGwv2+)&W;AmeUlpS4YZ}7JV|lpLMW+3~i`4wzUtmo6pH4-Q#M^jZFd7<(h11eLj2MPjL}qm- z{D^3X*ZTBrC5URwd9kXbY!Cyd!q-PFKi&)zDpDfTZQP;UTiep{IQn*;1scuO^52uuWC#OHt79?108bl3Ash*rYwWgj7a?TEy{R^VMEeOk|Q<|X{ z_U-YS)H6>X>~j!j@Z#Hc|feu zoQf^+v7)?2EU+6*1*qAu4mF(XE5xP``fw9k9Zo1#yt%^9&bcPmVm9bLYSwROx_CU) zQApD^YO9lw!X8X%?Y%)X?K_~WpzaeIdL8sB20D^_{qv|-hto^!9JU?i|B)q7Ey4L_I;ksn>%lu>q~mN8t#))f;x>R!8<+oyLJ z;^5pi;Wez)(uz~-@~h3|s?~i0wHn>6nQKa7Zx;kKzQn*lvh0Ux73Dh5=?1gY$YbUJ z<9P;BkADBN^s*3Q`cK{7X)$RRU=<4{`s`qAiG{2p%vvVO&~ zHwjwyLQ+tsyo`Q0T0&s?wPn9R7LHpk8(`^};YgWMKkbf4e6Jx;v0a}zU#M!XQ%&9# zT^DTTzNy%YBEyUaY2qFl9?SJ!=+)?qzxOCs=I)H*+HgI85)nmt<*UAySz70jyV6UI zdIxJ_htIbgFX#+wx2!JBmkbUk|53(FI`EXJiKNrcNMuwA8-yj-7%lZskXLL`6_%;V zj^iDlUtv2B)(H7GU_#8zf_OoxLVQnox7Yu}+E)g(;RW9!0fHyEyL%e6xKo@0#fudy z?oix=y9X~)TC8|+FW%zrkhT;rZZE(0zP(Rx-uyF@O!6g@+`ISg?%A_@2+jL)Vv}b* zW30sxIq1JKS-D;fqO?F#e<{)Bc?dym^QO?nbx4tXfChB>hD6pq1yya1Jfmx~snc1u z7u+WCyGmyL4dPeKbs0J^!LCazmmXW5vPvm=`DfX=$qy;%$%RT^K}UE%78Oj&uX)B) zFYP+rE;#@CYG8zihJrr%W6Z~B?k!(jml@al9pJH*J%E@2GHcl%T@N7>|w#|fpZzAssbS4rs z$19%G-f}yS(JYr4e!r!!Q*)w12GD;@vx&kD3ZuF+wB^^xABHaG1k1w5cj>7LVKRi`d z6m;Xp^pJAAlS4yo0f$v76f)`0V;CPuOyqcuoO>ZADZP8?{(UC>M5Ke~RgVuDKw`2E zcGlD?dRbGu<-Qx`hzZt@u6RsnK1@2rwMda1(F>l!;0t`Y%9qCEUCLih`eqG^zU#D- zeowz`l<~s7Fj4&E#m^oXf*BPzI?k(iX_QP~=*ei}J^m_5;r~=w`G=50Xj^`FJnH;y z{5>Fed5BjYY4vf&w4{F2=WiET3PRM!`r4Z9Yzs4;!sm|-jqjRz%W*r*eAAtf{@>%v zO3k)N^y`%*DaG#>3c!9w8GpK2`hX~2Lh;0)Lvx$897-C2Kk8Set*8iW+`lqpp0<*K z=)|>oqsNuWTaFRp5weWoo-oP}&z!Xs(n*VP-hdU(-mlqhCqI?CJq88-*lF&>;lBN- zmdymA$e(A)@K~Xu=3M+|nb?i~qcn!n_o@roozKW%j!ei_i~7k-oRt>CvHK>zc@nis zcBj-Izh)~6A@KP4dr~=PJB%japL^h^7?jk8JQAbwiaa^N3K{Rj6a|tZD{7}PY%BZy z^2N=q%PcN}1Tl-(#uH{`{5w~i0Aq5YzVZrZyWKp zAJS2y!TMjD_kZFXMXF2+D$#xBkC5H&Q$?i{H?E88CkQ#bNmA{Ee&nZgNaAC(+3=J6 zP@Qto_n?!ytwK&_vFk|cPs>L=?Ot=Q@Ot%5+N7~~o>)TyrFEqLeTE0#B>nAK)YP+1 zi(=tPRotD6B@5HFdJ=No@d>1_iISF`ow@vzfFQIC1mv;7 zVClSmcB%DAe>gF>54CLS-LyBgTVZ`K!8?fE!hndtc6ILG;5%Tqa2u3@gh@0er{ub5 zC+=+5uf|ZhxB!hOAoiZld5>EeuPpe0rM7KL@tYSXQAC50h8$;QO+%`O2K~Y>aTMMU zIqr6w@$yKr?|GDGZtEkbQ^UNiSIrCI&#%6-?GFq4qgBFFkkWB=yy+bx{2R3vQ5xW8R@ze@cB|je)n~VVbjMMhkFh3Il*K9)y+#gM>z2 z5Y?WHGuoMtzl|VfWiq~dQI;$QSL{eQ2tNtQ%=6$bc_ZO}W@IW@gF%W$iy86=s5RUT z_|iOzB7sP*GMrr1+L%6x3sUjNU}kyZS~W}!H#mI|Pb7h+5`A7`iM33H#?JZWfBd! zIQ~e%2FX2)^t2{~a3VElQxvMrVz$$d8LlXMv2;T;azh7;hG3?a`~9tckBPnx_*Tce zy1DB%W&{$KWJw!#;+U7USVaEe6zCT9pUgvC**2aO&yOAJPiu7@96wohP5RodGR{Ag z*Pg5;QzPn+$vWx>Qr=5hTQaBDIaSm!m7?U+Aypa@eUFs&gSgXU5(ifCccXP;>TPRY zVOna-aBpr`KnX46R*HTy_l$&o3$|_%Pg~sC8an` zzSXE^dpBLer8x*uK=^+YVl6vs>{JyoufyfccRH(|_|ZRHmOIvc z04m()o{K)J z%ExyfLkGEpIZ!w&t-u(g2iC&0aP_#b{;iEUOLg%Gqe&zeXxcL&MInZwWX{y$wB_FI zH02-%9(}N z10V8FCR*gHZ`I5;+v!E7EZ2E`EMpkw1Bd&S*vyyJO%xSSg(X`g;;2tnlB@6Dun|(n zAg7Mvml0S_8mHs+7bElh0S!C4-pD5DGUec8RBzNF8Kmsi+yheLp__j9GgVbm6ERWI zP6krgT5BuAI`-XeCtd+&!>&Qkz^e}DaWY3Tdk4+AIm~kaBM^k7VzKJ!%42bYtUp%V z=h3+B_|pjHJlol7ZRaA)`*0}gJ1%MTU?DK8>HV&!rnS5GHhRo-YA zwpx-=mF77^3o*%i8P4&63mp&tek1&w+HjebXk_iA`kLYaXa5^B+6VreQi4TGq4$z* z@KK^N#*M`h=16+7@ps;ETtA*0NQiaBYD(VE)J>C%p7#*$)}#BD`f3yptoC%lv9%Nk zUhZ``HNRnh{elqyS4VU^qL6MlO=2_Zym!W|?h9pL1v378U2VZSRx>FhL;*_i0D?uH z>94lXyZ@X!Jv<}6ot#|5_uxp6X9)m+F~Fo4G;PgE-#EAyz8TjLzt=ZyQ>3)rG- zJ9MJ;=8jtkE7m8;ptNORWDyfX1fCq;5xW&TI|se3Lp)zx&RuuNl!ja6pjz3V>douP zU*H*ggs~KqdurId90@dOkXb<3U+#OI%opV4xN?(ySMons#6TS^vHiDnL~^`rMUv&9 zRUumNS&6nUGB@9Ir7EaO2I4;PVK>;tZ%m0yN?vdQ}Vwk%|Phar-S2Mfk$c-%A_mcE4#GZnkAUp-ospfawPX9! z+V&1iv18vq8V)sLo}7J|)6;rw&sxh>Ht4V7FTq_tt1ty3PfwyLBykqxV8{s*Wi2w1 zt!>Vg<4ca8^XmD`(ot!Z-SWu}D4UB*_@u14p^5hG(>Kr6!A0?az@#H~gktjh| zQc1I$!4at<8$-?}e+TK4H{xF7HbJ1_NF~$bt}C9}pyo_4!gS#G{Xh0{RMHq=4yA=C z=Zo77wYIAxOkv7z(C*)6Y+71wN&0whOjVq(1WHBOOx{lfA9y77v}P?N$x{Sv+t4%z z@&5pjCKC$~0|bP|I()E*q+IbuD@lw^LWu-qWJuw<9#H_|@}(8Dj8IfGdlW=N7FsM$ zxFsg6q)%607k?6JKZ=p&l{F<)@SEnsc?iv@sBAuaw#&fxy;XOOAp`aPC^>1QD-<2U z;YI(CBcYvJ2Z17uf2ZrR-%orf4R=M))2aI40X2c`;Ne587MXR*9BYtFGk8 z`XicuueL^x^;x#6BS8Dm?tczz94`HVDipYiMAtg25;NYY(=U4>} z#HNuDnZo=1mAh>)#OXuu$&VW8N>T>gV5j`KoNSz`UJ&1+00z4`j7~e&Ay|F+iO0TC zrRT^v^i}DL1u8+fu5wYYRK5=eE&zjF&iywDpA>Sgh!_1pyaA2c$%~ zlRd|RS4;e6bQ0c)H;#kZzdHKHutvxCs)MkrxZcN+;({tUF+pMFjZz2keEU_Dng9Wk zzESn817emMmiLC*f*ztW3MlB{;PViZ!Q_-!)bN~C5}X^oIQ5r_ET}Vu{hj0#K|dNg zi&ipL5>HZ-h6TMdcT`SYMIQEBi5UQt`b2 zXqmpA{(PNOcAWcKPP>l;cHyG3a;XcZa&AfjAiP25_BU}{Kt*Fu>^{mq839o8o-t=NgH;adfdEup)!x7; zuDH{4vw7|64R_4C7gN4306$uk;xt~jE$}m&8=WP7|NCL8gktRl2eS!0cQn4~y~;vM zV}Dko&9HSs>9qD_vr+7rq*Ax>p}$?0>~qR{c3opdPY+D{;-=rjs248I&8D}6*K?1A z|6-B}Fu@hJBx}E-JCk+!larfYN?0Ck)A-KR`E8#Y_(MhED7G-l>bP%2R#@@x4;@Ca z+ZSx~oCM$vcFC60Vfu!^oOm}h+i2Knk17Cy4yXi|?_*SS`;f*wT+zkFBTBi?*E}~E zADY*y9-UBax|riIRfy{(FTkwb{ErK9DS@cOtk@XF>Z4VqLrjVgmbfztDgZer^le+r zSxD|sy{@LM%Dse|F;S-|NLvF`6fPFe!PQp5I`O$cts#X$Ct-ZDqB~{S!+RnRntWx< zvR=zv@G_$z&x%SX&p~T^qEhTSuCmJ2g_Rx;HSm>q^_T>AmPi^m7sbsC&(Z2g6OWmu zqZI>Y8q;iTIBjxgin;5X*lM)sTn38w(MAD2Pe;FLG6OPsTaT2vklkw(3=~L>(8;eq zx6H&!OT|YXeW*)6s>os>NOYM2Lqia6*UcgN+7E^GS8hq-zYRLwZa;TY(rBVU2l4b3 z&9ECH6q_%b_99IWUvLRiOf5Bz)FXPicmNZMqNq@L6k^#4mAL45yguUWxr;wtyHx=d z86XmYiAXQiT+M{)J&lY)_9^?4M>dMN&8?UsBHFs2on3ToWue?BlQb z8fMSo&52LD3ziR~0Y5h|NcvEj!eOC6=Wt3BI#1#dDr}yh7-FQn2^PZ35`phnpJIW@ z)bE?i$;VaRd~972hzv)P0umV|$A7%-a35Hg#?oEM__vfGdCmK^X(=i2NRO>sD*MuB zIrFK2`3(=RU0JhggO=pXw~R{HZz;?ADI@YOs6}Kie?GLbxBnw70+D(u80AR%W4>x3 z=c8a?2=^rbO!USg1w!mi8}RT^<=r%I4CY9Pl{NEU5rI%A1c=oWt3Ej2`5X@PI%5fV zWj~7gJ=gqVK*k8b9LtIvs-Xp%_Q3GGl8P#urKcs&Uo#=lw}Fm0xbdudKEGt2Cu6=| zY&E-ARC!Wx$Cer^u@$h&-NdOV#6q9ER$SH=GDdEMQ%UvVmL5ixANw*^TSR;$I*3TVK`m@Mj;dr1$s5 zoZaiXSRCC?+gaFzEf#jB+Z}uvXB9~etjDXGxa}vh4*(4 zn{f+15^ISxq31ey>Yk+8y~}8DM~(9Ah?eKY=ZoccF<_?|j0%?4QymTqin;Focqo;9 zRsMi?Su)%DN-qMxMzEb-^tQ@Zg`61YHZrbIdUr5BSl$(_PtnhL?_&C`UB9I6?{CwV zOaB^0uTwvasWQ*qq>UKiUSh=Ldr^;Qwr2*SfMe_nZQ@r`^Tm)H%%HR^8;Hq?bo7PR z8WkaoLw3B%-XP3Gs=#3LG1B>3IKBL~**3Ive*P8F#YZGcs zXufBX7Y+7m7J|^G{NWU~3`|X6bOjLjf83Bxou#4#`L;G1diGs#LoGsKq4BXZMobC9 zvf}jv4&)wdaC49CBZP-dQM0JsbK=<$lXF~bsVz{68Y+(zWdgUuyl8aWS2hIQdw>xJMxGQ7;v;yRIfX2Sj)mca-K|26}hn<1_Nd8qBHY){2HHF3(jB$$PJHm}iq1W`(oi%( z2F1RJG|{;5PhBCcchuttbKsepIVWTz zotiOc-azcuE`=SoEODNJ!aws$bSq4zoG?m12ppJOP30rD2aLY7$W)x3-b*u(wnm^Q zS#5ShoU`=!_m{;Jik=TRd}?f)+bIi!FD2E9R|GqQkczjGO3rFnuixHA6J_Xk5~~wu z@qa2AKHfdG3}N)JsIJ1^5L39xEBk(~-B-)Zznu|uy}$SkdVlo)v3z|3U;$avu!Srs znxL!sgkOsUxR_|wawJ$%Z6^{+iT*`huASinA~pTt;i5kPr6ey8r{P{}4eF{)G>)KN zG^)&$+MuGCAD5!&dpuln9l%+c z=lxW1 zF#ZOUn^xt)R`?`X+bMqN^m-_aJ<fpz86I)uro>jV{23 zi#PZ9uiFwU&D@D3U#B11WV?iH;&(C7fI7&M)SZB^iVG%>f*$$Ii-uMmCVX3*!^vow z2|~-7B5DrqGfS2l>7R=6xV~kd8EBmGn%aEi*ib*2Xh+Z~i8*SsZk@65+*-Y;>m*v* zp9uR`oiKXr&X)a`GjIsSl9CYaj+QP3*OdBXF|eLwJJ*uQv2|mYV1Y)#oyB9Tq=;>^ z&#FSCjZfkc$ZNo1m8b3GjLBs`o5oMXQ<5@{?(k-m6ez3H{Z92Y$7>$8HjuzmYMip5 ztOh9KBgN?yaG2{AFi`%Kg+#x>icVE{_d7biHb7RpcUw^TD2Ctta9-qWiCfoU)XOer zfN#4v_{4pCh}eE=AN#$+R2YSAIPf#f(@#bp6&3YkZ#b#*BnY$<#)RLP z=kV!0a^fM2&IApefChuvRIyo1Fbkl%xDmBU8^A*k7fpg7 z)~2Gb;p&?&fU!FhKR;I|)WLvEXcaeJS$n_7mx9ilt1u^I6mIwiK;(?P_&g3Z4EsbY zIY6dZN?#;{#E;Y5&a@MBhJ74m~ z%afZt(Y}cY;A_bYV*WegBTN_h#VCHy;icK!Z)cw*0*|HM-CiSMBIZiAElGQjLV})= z^1`3_^s8>#R1Rl#Qux3e2o7Gc>-~pI7GiGOXiSVVKmI0gLLk$e*LMrs zFSaaEG~<)HRM~Q8y0wz`wzjXLlW4`$N}?3w5AF43ZwQEAFZ*~^O{AIU{RmkMS`M(M zx6+^R4?f>y+!;~8(^WiGnWdrow!<>j9e`t!+#Z%X?+U$2CY)JHvs&*`zWB9KW@Iy3 z*$G{QyqopDwUg?&cWa@@-d+2AY+2L|HrFlxMQeo}Wr|wb`(RWA8BzT?C?lf}+wJ|L zm}tnQEfVn3bH$*PG4#JXoyhB0E)NIt7H?M^K0umh|GR^l+%yny_zvA4gT4P6qU+`m z=pr?}A(q9i8&t({p|DXFDx{8R_U$h2{*-%d9t2y~?U?x-V1S87I~-bcY3ue(pmHc^ z{AO?TYANza_(WrcWPq_h8xNO(j;vE8wYA4kwU35rY>&LKOn5P3oPb*4_Zp!r04xhH zW(*xiP9=$NJ710Q>A8Mb-Ga7`clt)T+-RnO6VP5;!Ti3P?!$)O4|50uhtxu8w z@CLu_MIqLLf3cW}Sach|h+ncj8K4aA?fcs^|FWqQLMkNRIUyFw-+h@eJ?n=RcYZ?QT_KkD1JW8(A+ z#CFzMHHNAk1VVp9ZjS%CDQTm>(uUR}E0)#KN(5NQugKwmZUjcQj*0BfBx0ru0cG7c zm_r?83X~C=HamO1FyEyZXX%iv0N0LqGpr(&A}y zUoU=+H)r61hePft&DIJB`C+^>iMzM&;oH8w>ASOs<%xJzpu+d?mpJeJ=w~aeE_T}= zf9~G4o_n@GRmmpos}xd6$I&@FG22F`%g9BN3-k^WvvcSC+Y(wke_(1^zIThJcN4gG zZ6@G#Racw@ow#fE;;Dlm$Yb`M_W^Efu2H0U)Jq~SpvJL>1Hw3%zDp2$6UX*nXh4Hy z%lm%tb=bG%+1%M~B7D@rFg8$Tu_yVA9_-ADVso3O_J@Mn=6c)K4znRU^>=PjaCdTU zxZ1Agh5yx5gGBBhdBt4zbGq;uB_sx&R%&U>f}@Gf7stVZirfr)YbHMk5$WAg5GW>C zFqv?dE+Y;NP1B8Fr4rf%USJ3}lBr&_`Cd$yL-`!{iD~NRi;x#}fdVlLatx87xuL`p zcnY9yOUxWg+Z-e=Jw(b=~G%&3)^w7{HXZ zE3a;UlQ2@)nH^nS@?e$U?B4zcBnw)};XHWVmKD|cu%^~2(wH!?xLROof^CaLSswO! zWCoLCDP^NL-dpY*kwdPsM2wz`)!O!|Bsrumsd)Rg3oNTihz9~}b|M>>pW_^8-1nW~ zLRJFquLs?lz{Qa4E!H11hFU;c6{4a4fOU4vAu_70`E*{heqO|5VTX0hr!!In!{!{! zOVjU9oUR||5d_-J2F}{6GG8g2se+x;9)NTO%`_`r3aWUvv8wlaA-;`0gL~3JVKI)Y z4M$n|Kil66R2KPDG8+@G_?{?gAZoqpYCrO%?>MSuX#e}S@-N%e>-adZXf&I4I-{ot zHfV9M>~&v5@pd-3hCAUwT@f&W2RfxIIO9QV-T*Ftqg z&5d1wdY1H!@OW?O@cr`hV&&N?_)u1d@d{|cgfvTJr2asN?Tp75hpu+eJw7`<^|9@p z6v=tu!xePyk@jGET4x2SWmL%s_u5Ub@@3dk3?|;~jqtd1d zf|hJ1q_RX0l`3Nag$d0TXz_*R3rh~>p!grDwsh;d&od6#~T zq_0XtA6c7xB1(V$he22CJknxTr{LY!h|{h4B9Pb_OP!_haU8v1thae;Kdhsu7xV8x*y=wN zd=}Y0F$Ef?a0`n5uPf83wY1;$GA-QknfZH245x_6X@-}lvF?t=qc>evl0puSR;S+W zctYd}=!U=@mqU)daQVohhiur54j9g13+WP}>Fo^)@H}^j(M~4_G!*P4o&dNL&~s`s zVJ3@arn=IP-ZV}Xn_M2zG-}|#m6_b8^KwTTYQupPK<;M2daq+a)9DhY27T$T zQYjq3Vxap+p1dnM*KS?qYkbVcV8m-=MJ|*{Dp7c9Z!){5c!S3Ag$w{BE0{t;szLdF zOW|f3n5LTQQ@E__virr|o5tg665g)tD!gLNFT7(8l>y+?j2r23{6N;#{o$vq%p`py z!(X!`4gla}*iV=A2r+-{ye4ch;z0n|GIKDc7JaFD8q=^FJ?L)XN6A-e$!hU5&GM>0 zGr4i<;#tTtRqF1>c6saj-_eyzIEosE8X&NO;UvI4DTU(Aa=x?AAN(wB4z|HhL~x3n zpTmZeNaPzLz_@rL2CY=zuA%g%ku?_>P=~m;1@iJs-*b6h94!S_O8zootqS+-C$z<6 z0(msqi{;aMpzbCuMJj3)4sfuGX1+g|Vm~mQpbUT%@ES1G13FR* z*Q=`>T=y=-zQ2Jw%^CWfkft&q%@?<)BS1=-)}JZhi+R#el0X0EI6Z&<)TyVY^*tSD z9HV^BBl%SOlTMthJ##4Rv<@34uW%Cw+X9e)z}?wM{0sOwmthJ_G{658rV<4|LBl`3 z{#amlm9Z-7xJE=EbzwV2w?M5g4^qzrWms5H)iYEzd z3z#?eVmp5*MY`tf%uuG;J$dCVS3X?h8|0{}hT3BM4kj~-5)`@(vB_H3j9$g&yTB=5mG`IBnxp@r~fn@H*b zgoa6pF|4+W3j#IWGh#KGir+=vLCsplCiIi|%H?g(cQJk;eJ!Rwe;{6a=7#5Vi>CkV z$g~Ier@n>bCM_pUxywv4qM?aG(ZHW5Y`eYCD~r52>x61XzTLC7arC3`6M$s^gS%ZX zcAH1qoYzPvoSyAAUhV;=qG9l zUf9wO-eMi~Au8XF<;V+HN_faHNIy#sn~7$v78drADL;gbE1#%k<5h*j82YuI)D#|a zU|Vo>iFKbF+G{7Qskkb|K}`WD5-9qVRzo@Q%X8Z92{Ph7ip@T|-`BD1+eKpg-NO ztD^Fe=kh=_Amfxa5fMlLm3Y_DN~MLKeeDS}!svH$Qz`s1_g+M3!Mq0-N;gS7ROm(X z6KMj(0}~+d4;cuDR2;1HYaTlIG(0NwQ&^~#At+oe=lTriqqW^PC&LI7MZ_spFYZfM zA_KEvaQtTio6nC|0DaI1p=~raFq-G>#E8z|T|u?VJuJ;D0mhuk#~8E zeVupyTzyOn-EsR0ulV*doV(Jlt{E1-&BWX)QSnumER|_m`i5ux^UAF6NJ&PX4oM7q zN)<>s>FyJu=T(m5%@Y1zr?t`#cE_p(w;!>U0{gSX6xa8ud;IM=*1_GVlnGXlK4q{K zYG3Mve>}qWP5r__#IHY*q!>|pS>5^gHf3+W%#=T2=hcJ-M?`;hcz(U&Wpaa~vI z+JK+$W79k}%SlZbi##k${XJ|9|82P{@&yeI29!ot_@a@}S)A;dj>2B%JPjQN1svpP&|`ndMGxfk=IPg98tGDhli&Og#P^R#Gq(X!Y(w)lOC=b7{n1I&5 zgXnHf{qVehv;bPffwuz{#^h@)u|3IzLEhgl)`Xb-Z)Q2w^HX<<)m*k`QY*J_kqZs~ zch@zs=^<)Y*o4JO!SLnPyuDd>q#|_F=3&U%e=CBlMdBR~IowOY(as{?ySi-)i68pR zt}fZ_aS*IK<9_h18*E*GA}$DTXD_oo7IC2*hpo&#UB8%u8_is4EZ)O_7FC#YiVA|z z+mg>nN%j2PpDsYVMCy?S@r7bWq)#0buqI{y^6uZ71B>tad~W=+pQM(VR9-T>#!e)J zdD(l{WspM_KZb#~=zzs!BV#`*`?6QzOfc4*_){Ps8WhPVlIb1nrBQ%CR zRekrd{DnzMLPZXBTtH0ZwMO23Gp^9^&wf?c-FM%Zy*)#DC4J%&O~@r1L6n^_E0&3* zRX3>Guq9Sm^>bOpp%H*&K;2AMIaE86h5Wge6jUTaWr=NkcuO)MS3%yXRFZ@#{UhWJ zg<_2#4*Q`5XYXfZ0zl!EvPjbH429c91bU?YL|A>Kmb8Q1Eax|`&%+Zkc+gX}iRXXl zS*?Pz);+X_BiK{`_kKd_9AIhOwtdbMCREKbJMaBO!eDQFacn8hpW^!dD$06x#6~mw zrf^LB)s0YHrLw?rT*Rw0=iA)mi{1d--!ty)KIqs!3}CRf6G_fPvMTaZS|5^ zg+WyJ&dccYOjN}|Jzb&~gx-RMZgd7k9xPBPv0NRjlS#~Za1N2W8$pHSBT3`9+LHS( z+mHBJu>-kjt~z@7Amejv%?!C(%6UO&<8#Fc&f6?DISyHHpc;56jN;i9$RtPYUI>hV zfhOE+0lacR73*GqLIThm2v$Fl)Z<5Njmlp$HB`|5fgPn6{>eC-$-D3w1@8=!W-^wa zEFF6I$DWVM3S?*Xeltf_bH-11C5Li{CLCEpqa@1!XvL00q|LR;_*uyWkd|VoLBqHy z*Li;{;juA&!+2h_HsxZXCG)yaxSBwj8@l0F5PR~FI2saAK+dL7-j_WaWSfL4e`U4W z)$w(|m`a^g2m?HU2bPuZRS>`@5lUgQP(a4_n2Md1x3eRnJH-t=My^_#T@UsI^evnX zWSk_$;|DQrk7Wb7H(P$kIc}U-l0V{uu2;h*))xKte)s6iJR=gi?UoLOK8{kE9N4^a8*Fo;RWzlUZ0E>je=M zfkQS4A*WrfPv6#D|o#Bn)fxWgfSGTX*h%jl0`BE^uf|>Oct2PM1zu{ z39@Z6f#*qZ(x?8r`NCDq)2{o#$ocofGEg6&uMU97!^1>Bibjka2hxdHuw%N+5yzx4 z_(9b1p#o4D5IZoM5*bwd9GJ$?^ zm}dcG3Y3NlB)4N$NCjaf2ess=KR;5e{k++Eq88mB3-I&xk;K?cMKy65zrsp9sBdeqbXu;OaqCNkk0EMdyfuT`YU7C212Z`-}B{rj_yikmG* zbcbUkMr*TgV3usA+eEm2dx&S(HUv3!iSxi=4hZyc? zvtzzd&Q)!B5o`ksWf6PR)Wp;cAc^j3Bl&RYp6I zWLDG;HIX}S^l!cRW22Hvr0Dq%fr1zp%8^9kw^j@1SARW+_Y=gNxX1K$Vq>kCtG+J0 ziE;m}UwAQnhn{R6ggMJ5IZby@*ULE2Qt|SrtQ`xB;FpOIW0#k252gT@yDUYX9%+@HwyuNe1rc56FW&@y3M6c*%WU>mLw|&e zDMNTC@;O;jH0-*g_9XE6Lr8E>qm9_IykS3)Oc+YEh8rq4n+wSGzS8IY>SuiiM_Tb_ zV{uRV-DYF|ruVJx!z~+cOg|iU?HF^ES)~F$qRA~`JF29hY^UtQk&n%j`|eu|0s!9U z8;Y%Gf2r{W4W~Fu+iQcr+Oqg-zPG-j*XN&e;lUF3JXI-?rc1djIcsC`crY`l1%t)- z5(}@bDrXc<+eK-}URlwNF!b%Yt>$xA@>wZ5S>yCm%vZ19h3eLJeN&~;RIp#x3|!%H z1&Xv@2ed&iL(ZkI?fjNMi@rl8gh}1qht)8zdClvutCp49LJm_0ZR`06aR3e{7fvec0Tg3pL=4F?7?n+ zJJzE!oj*RVDHRtCcnp$ww_CvTyzOiBw0qcoG#p@0aZo%!X!CGKe=*w-Ao}bXGKe3* zxBV*{-rJx|KiG*%H_DJ&hWd%g}3 zLU_uLS|$BqRXP~nb7THl%x%;~u#DO$=u+QQ)cAe+=G+*t7p@=E#r&EwP zw{PwTfu;H@k8XeDxkZ~`2G&>I-Ty8UMsGiDRM0nwT#`lpq6T?RUN9;1^HXalVtTsV zfvbYwu(!V*YA;-4ed+Ajet9Lne62yhvxE`m9EoxP!j3Is#3;`Ri_qGh90`o?d3uTp zJRp2?mbondgDeHeMrq_rXbp*9?0Ph#fsSM_q0P?8u5S#KJ1%-WyVM;FlH-NRP;i5^ zqBzTC<^(@aZPW9$=a-Nd^=&sM;7*921wAxB6&!4QMh=&yzMYB_&y}zsd&DV4)0Z`r z(f(9g?fB4zvo zo;Lk9O|l?e>NBr(N0*r1tyI{YWIw(vdRn9Vdpiof{S$>aH!yhHAE&l4V*WVav2-`d zf4WY6Y(07(l4t`>03o#kWK^8kRU0!Wtxa;A5?NlBFArxmV7E9Mj$bY&>5j2123~9$ zcDRI-6C%g{MhqZMU{`{VpJzJ9RxFj77H*`hhlApe78K@K;I; z>jQ=pJKnA#>?0FGe$?a7PsD+jE2v5LiHja<-RNz(3i^pWpjB*aRcK#UgZuEROy1t+ z)7kFB(6jMmn3_)+<@$HzjDnqSslVY(eo~B<z zME|d75`Evlb>z|nGWI-*KZiwmp}DSqUvLOG?dy4&ta}AbWK>m~6B2nIXTSaad?RJe z`b(vsS$ezduv{58)Lwgb9bMAOV@=7Hq;b9*;pd0vp!jLi zA1~}SBy2V5-xY_zO2YEO#5y3Z3xP>N7g&C){Q*Y7L$oy48(OE8^nTR$6L>2vHmi5Y z1ZDb(-M}%&;r(*cfid4V;;gO@bOZAJF7@2iKvQG3aj&;tEA;2SSTuvm&xav)KXsH} z;CjxsN{=jt1hNOvJhQ_;{6Mk3{<3|w>asJ!&G+s$uE=fiPDgkng#S=^J7uvuVmc66 zf#uCrZhRu(yWJqaSu?Wpe2SLs_Pol@6>`LsM~5y4^sFxj{2mwGp0C?yy~o$Z;fPe3 zHV~SAKP+6}b7-q{Y%=X<{nAz(dzmDHM}-->(ezx=Z}xFteR6k* z1qtT_w7KjTG^u5sarXpMdD>9T&jE4u5?EyLCe0>hY^V)IIf`wc{yE$XQ@2?SysWMm z`scaDd4g!wGKzL`VvJ4U#JG|?>k2&nf-ZLd8R0&A5Dg4Nxwsi5C3=ke(*EFODfgPIXn9?Z4f422};r)4^jX zP-Z*UyCy02mvwhyUgP12@;T}xaRHBTp6BJmqNvR>jT7_WZUa7AyUpJx?=RK~3r==U zGCQ$L!%haqZ0tx{WX?w+apa87*C3fszKHdrTc(&IPvOnSYsWTMCYXiz_Kd*k*rVuE z_Qu#@@&+zx#PR;OOy3zkqv5)TJBNu(2R&V89&Jb(3PjKsqL%G!v0WURcRO3TP3^iB zhksa=M>abhR@qs!DP=?XwIPZ{u7YIgdhq(Zy^&z=Z(ZStMm{wY0BvHISUf{%!vE2- z^SH)!e<{dLdj*XYZ)&BW>k6B|Z#(#JD|xbj+xHTh58t(xgKX)=mj*i}jb3QG&kt)P zv?`%}E-h>)uL~ZaKP`Hm9aSI5IRfzg_ZM3dlN*{te6NhYk`M7BC(>s-B>*v2g_GSc z4UUpusFHGDai>+NZ2S*#B=ae6uh zL=lxZA2%LJPxmS5I%InKwcazmEaGa@*C{puhZOWVKn(+LxJ7?^*KLy`qlky!K>*z= zo6(YyvxUuD;^E`=R5ku@F#4x08Xk@qpHYE99}9 z*r8(jV{-p+qKT!w>xR#8$h)ZpRs-4`g0-zug%+U&JWw|W*<#&%c$G0lB6{K#!Y%Lh++Q%*<42& zvpAg@tK-D^pF(a%JdwSac7bWcy-Qz&A-?n&gvcZuwZ8jPXiw|;AI)@3RQBUpyW+cSrf3f$b;Z(L! z*l6B~~1H@C|ou z=k3h(Dqowu(|Wxt8PY{Eu-}ZLD5X@lpCl*|1-G5!G)7@tT@p{#m-L=5kZq=Z>9&AU%M7p_z8(c~&x5J65v(pkR7>v-?kq&Q=F!*xCXZ5qnH_HV5;>%Dlo%qV~7i5`K8# ziBmhiYM67{!|#n7lYwZ+Q4LD?$+M^4ZQ0#lFEN+D(@?CMH!>jXlt5pAwvaUIR%-hu zHogyrVX(_!WC9(*!HS)mo}X3MV|!!h^Kc3KCB6Jv(q8_c8{UP&jt#|y{m*mls=sN8 z+)b(Bl}!q`M>2c-a^e#H=;d=Ce#G776%IFUai8|njO#MQa;b>I%l>Z*VzeKnM2N#q z0b7Q7M}!j*dEH5g(^ye)BN%R4Ll_3CpD!t`V8da zE?sQm7s_sPgCkq}-MieF;J%oQYvfa$vgBoBFrA{srJpDQVl1TF%#I)4!o*;#w`$gI zVd)+d6%%pL(Ig*?+X^FBCy#XIOH^Ng&CVcB;aTn?z3y#bf*73FjN(rxc71F3wh-E0 zFFC95bXI#jPF;RCQOTk`N(XBNyE;L^2GbcXo|M3i6_AKJc<_vcbvSJD6%dxdP5uQN znBZU+o!hWW00lOUlF{4xT9KRvJ7?8j$@di7`EVyXj0>LJH}yRE)#>3&DKxKek~ZF) zrw{Z{fN{dUT12lI72FZV5_m)QcG&ca|0^X=_5LU;3(N_wHj;rHpd3ZlTFjQW8?)7# z8Pop@Q=+7&oVS-%jOC;;HSh2TPD_j!yc!yI^-3~T>2ip8S*Qo56D3{4sZ){}nRI{T%e^0i z;SN_cG}hDyLm%E+zlGmK$xt6a0z9DwJOLj3507~0q_G*cIvfH2C*9xaN6^#M;bXoR zdqT5Xuip`yBY_jq#gaR>5>_UqNZWZo2fsOht8I>|^%H-Xejj`+UuNgh(k_S|cQ}O} zHW7|D#cIgh|9z()w(44Bh8=M9k8I^ChV646T*qwZzL6$geEaZ`Bbu>M0ZCCKF)s@f zqm5&1uj?DJ{!WiJ)>L9?<#uuhAmH7KF6BqSY8W56xMOP~jwCHk+KzkpDr9FqGfCRu zzl#LCbP3mac>mpIIh=@;m^vH^+b`HA*D9nYb?RcVT*)v>KPeIuGp<%1P=VmY#Av`F0&H)UaSiA94!*l_RR0t(ODpu{dk~r} z276n4P_B}amJWP~yVf-1Cm=^sX> z%ums?w$^7bYb){_KXJ6suIc@aT`$&_MqkV{YrL3zwJek8kP$dDR6Lw@c{+l>GAxoy zD{XbIJMjt|zjEkWka)zQwmqLOHZ=oX=!TiF?a*i7;o*5~Q+oBJch!y2rxn-G|9j7T zDRO+fC4Y?4eRiz8F9cp%c3#-8({Ze{Mawi>YkT)b5ta;aocH&X#f+SL#x>*i3vy%a4B9I{K&^~m zQ(a$~5fl`3bbu!!Ma98EH6|;s!>yldHQ;Zh?6$T(UoRGYZe^;@x0c)J+*onlr@p>K zqMsBC-2VO1^x|SA`RCv1o3+=2LKfccP*ztrvF)I_BS{wKOr!jp58Lo2c|;C#&YXgTSFWWvseiia26&%zWKHcB9|J; zO&lr@87&VO++|M!;tS~*HdrIyf5-~1^D7CCyq)3w>ejBpN^MP1blrIMN(n`a)}Xp|eX^7Q^MZptqxOlx7(BghZ9f=3QiP6ki@+!yk5AMAAofWZF_f7_Ck zJTf`y{w9LatLNp7(q{FzjI%FEiJ>b$!CWH9OS9x?Mep%qCr1Ci;C;ct!53f_Wf3~T zjmGYJ3a>hxaGv<~0)1QnJ_RQik05qarWRX5vlK$6;=H~+PZm^hQ{1x$Jnb1V4hNuQ zB5R!U`gJxV8=pf4L|)FW_1| z)2~v9xA4SmW^I3dnTMtqhRi-Pc8bMial(GX4|f7g{`W&%9Mv%-2uW#aurv&z#OWQY z*6agwB`vK(U}Itydv_<0c?z+cDtYr%&BB7JwRLMUc$3DiJVjO2`imX5b?wLOp|o?( zC@{fNip}(k0%zRNXs5bbLQ-LVlr%NtiRt-w0Z1;;Af7uMl@O38%-TNg;b0Ozw@Lc; z1=wyEu(-U(PiV)=cP6#b$E7lPikh0HvQYDY@DB+@pW&Ya3p}@ZsrU|=%2$jjH*3zA z;)!2j_go1QB$Qt-L<6otp$Yos+p8S$@$rhv$~CL=eJvv+G5}xb{`0}j0Yn}=gq4zP z_6zhV`nJOcdXN;so=;AeE5jl6^~@3y68{`eO%UoTab-j3o#UJ#OGeQ7=8bNuf_*b1 z|0x}P2f#EiHOxTs?(%On53L_T=7A7syOo)F&vP3}cKQstxw!~@z*XVK&9Bn-=(_+& zxbV3^>s^<7cGLIoqTIS|do)kLgWV7Zot*;C&d%`(2}){e1pUL-Tdll!xZ$7YKU)}` zucl*yi{kKSzttOQO>>9*iQJ*+Ol8Nl?%{xhlJf9jQZ2yO|8zX$F}Q7tY@QmD?4 zxFSq9mJu+V<G!*AD*SeD-n_XpA0{=< ze#L3x)$-Z1uUGwOhv!2?H7dN$ygXTT6Y>@8SgI+AXu*haKeA}w0(D;+_&-!fsLD#Q zOiN3!8t-ef_hAq5I?bcITw%=_er$(cP|DN5~D7W0+>eJx447V=WWP3OKUBk}FmP4qtOKMv3K3`=;yI9ZW~tAIe|N?tWT1 zZ334C$a8H>Jr5bvAw!k|!~JeMd5Iq|>qSfOHAu4~rlzJCZegE#v6bJ2YdfQbeVBcR zKHLSJUPv>W3PYDMgE(%eu4#=KCFm+(r~ggeOML6 zcOEZ_(2pN62M!$gkg+dO@?h$p*khFuDlMAVy+fC~+1c4avoQr=NKWQHTRCOOxBG-X z@CVJUkjY@;(5xM@?O^BPQqk1>0JHhdF?u@{GN47X#-wJxS%x8e878M=Z^k}vx7DRt zMB_S#Na#50M@Nf&22FquB76sGg|d!t$O1~=`~S|*1EIcvD<*d15mB&P{e29;5;*i# z2nn+c{8XMoFo{D5uNb^^;VZ=eU|yf$=g*(Q7e49+0ihU5bH3(y%&j@I0USzo`JI*bSm$w1s;)QXaEI;cy{F*S8wJVF-Ux`(nSXkf{;Phk#O2&Y082OrzN&id6>U}d6<1sp#2 zQJ1Os+z&lY^%2pbmh2WldUM;3v9b5N3SHnLa(0yhG_%>F5s8u56e^PrDpVmD+L%UT zr)~;S&h}-BdC2s2Ih&FwOIFDDxO`-?7>5S3WYEZg9sS5JA$ibHD*-1SK}#N7LEkrj zgX||~|0=W1T>Ez4a#f#mYmNaBZwM2pGK~AfHgkUeY-K*ElD)_dgGI#$ z>~_j9h~rc8pE!jGes%RG$}a#+v>PliUOA*ML6B|Tb@Xt@UPNP1dQiC38dub`wmjLQ zwLJE=$G^`EVOBAMbC}s|AZufAF*pJD8)uZ}Pg1;o0KIhd@gbwE!b^bEG}cwRn5(@c zfxxtF4(8aAx9D6GRFF>j?h42%n?*=v)oftGAkr_1Ika_9%1Ne3~1!Z!g zA0Ky$WlLr1n+)GSg>3tO5Bj+CmwKmO9*n11cQBip1Y9 z-C(w$_9P;p8jiTbg!0`r5RpA7zdm0ytHVRN4m<+YuwvrRe_qpgKHqy8Qo~!k6>`H{ z+M!x({POpBxHb8@$HvG9 z;V&n>^Wbv8U2q{QKX;S@1i%<&QNay-_1ss_0>~as$lBq)oD1zCLvvlPb7AAu0LOuh{ zp~wsnscjEr-EIoh;OSQ_S!rAgpuQ<%-%MFyZ~~YJsrl?q*b$NmW^AWHU=F#!oxulm*fqcUcc>5aq@$jL5 zpx}@0zBT-gg=!{LkhJBSK@|*s72^Pag^FzyPbkcbn$S&v!=myY90c4M448gZ&3EWr zr(?7dByG?aY$#rWU>S8lnt=h_O}k67kUr2H1nxoTjjC`s=K(Bq8DQksRQs8Kzoea2 zAp*vULa)LJOl61#N_p!1yRC?7st?; z>vhi##vU?M))93yNn$XjSH92iCeGnaIN#RG59}^JnH$felm*Y)9;7chT9Nvt{L!Fa z(dZLvxvh_D3=9f=b@NTxu{BA|##rTZ%2@;K%VVo6q23~6U)o~!IJ90LSYJd*0j%XX zH`WE5f{Ty>0fEv%VbI{Ncs}QQj~>OfKRPz^L8V2}yI0f8id^eKk?nE=g96>a=vCu$ zw;H^;N4T!Kw(t`W(}cWmu>^`K_#VJ;BN)|l&o*8ID43k$KV)lXUq7S{bW0CQAma$i zUj~H-z$fGy(^Suk2WFMN2Ht{70z|ZKzFu)Hk;`=fCCCt~WQa(l+lMsW_+$({?bp5Qh-xbt>M>tH18lf1J+m^?a@|!BYJ{v|uinaAgN-*; z;ND@R{6KTYI*TKZJ~CjY1J=l^=MWH(hDzp(zmEW>0@8F4Pz?!uu8V5}D%TwD% zTmPPS6Fn6$iC`F(?kJ20K12B8XA49nE*SR@lB0+_Z?LwXzH!qjLqLM^OLhL6FT$4L z>`*Q69K0l&Yy}7fSppK9P>wuZ7E3gtkd!`o>{0z0uTozU?^j{QOb2Os=))}}aDYJ9 zC)VO?LYshZq3f$CV)ks~FoBvknuxRb`odTG$x$}&=>u2_j0}FIj++{F%HZryNpF%0 zo!J-qmMe7Oz{{5}0cz2d14OXNKMw=K3Ix?y92uW;iyD(!_dsCtP*cX@LY?*@3*HOH z;!!#`Z@$r0mcY4lRJ!*fx^!pJ~7-<|}%7>8SlCc@ljrlM?%lYc{n1;co7M4$<;WC-@NNo^G)+4B=poZ?gT zn7;-5O!#(b^vUPbdtt^Ba3`MdSrr@_44%BaWA@T*0g3HoW4K*%vHY;8H0=_fA6TJz zgtnSfJZ;Nfcy_`G-0103d9A;9xuyU{Zso`T9^s};&@0xN!|iL~!l)ITGEq5m=;-6) zZ(5CZG+7_BeRr~N>8KuatpJPIA15SgYl8V7pD2q(HpVG^Ws%OT2C^dy{6oo59aU}5 zJlmjRl#bFNVDqXj&-=9OpD%KFL+=!irf&5L1~@AY?oL4BXI)~!i6@`HQCA*9exw>_ z4I`y;<)`+V#0?WhNGdoM0o5QZ}u_sf7ddDNcMe!BH+ zxo3HItpF_y!Gob-K>7z#n=kjyh?pSswL{*GnAGyzxL4n++vDBkrNPU76z{&~x$*8U z@HtdYOMzd48|Jo(QtMw{9DNSu{X(hsvI-O?$@=l!KtcB)^CICh5bSur{dBFsFR%)q zf}LsE2}vq6xM3cR`=R3aQOjd~ugeRo=dh>y8&u+B-(Fm&fy+Sv2Ac0jVMdZ_3)8{n zcg99&wk!g4H)XFcX1AR#V-^EXPQexXPuj`9Uh(Oj$(lb*)+f+#&8MhdjRB(gbqpMd zd=Z4?+rG_e(T|?KjO{9Q=W*5t?hg$Pg=5U&Zlw(*>8$z&>1@;Zfe~mPS1|WGMr#FLEDmKrv>`?hiH`*h02wVu<~S&ffH~1bFRQ{1wee?d9_0`l z2s!gVx3#^6^hu-aaKSve#sCPGKq%f+hckT)9^A=}qz?hyaBc`pfeZgE?{X{Reg|VQ!dQ5s(mL_z&0Khz^Uo z!vLuGT=2czE9lJM<5il!e?3!}cZ8RbRvVE6B=wjfixjyuV4uEPIvtXXY>qS=@N%S; zKvHd(5$?Vag}Hz95#%HLAC)uBs78T=LYvwKywJY0F7INu9@)7SZUOGa&`=d}mD=iG z=m;IODRE&zf}Do`1PF_;_t~(=f>3CLF>zX?mud-L}7}WJirNxK<>;6T?<4Q^2{W!=4;uR z7oa{Zwjk*bbX?}}R=7HvA|x9>uqpr=l;YK<sK+i+{(&ft}fK7C>2+@5M8`Kz{brY|t z4GFA$=UNMct9?3M2Bv##TajuW{M!n~BuXL^r!@cL4;P zq+vBkxv*n~OqW!nvfsovR5lrj1maK}w8Ny-3KRnwK-JTk!m3nI4nDQF8(8qt7(h$b z{!;-zuAI6&US^u5c?*(hsw-kqD8Z|BGI099J{*=1n6sa)Y>FJ{Ku>d8TUkU291(et zE|35vPBpHwL*0gN7uw8diFMJHRyESfE=%Tc%@)~MdIIV({r&s*FfU_n7eFCWE1Pd? zpkfiK=9H|EB~OvdV@kk?ysi(cB^X8;=IZ9Q-f8vt=&{FxmZ-NSY=Ms_CeA{#G{kPF zz;xc$@Gk*r2WA{*3ZY}C+xrw*NRKeJIdAdc2vAoci5j8Au{iXV?vxTa=f&wkq&z@{ zWA)^yY-~j9mMvRQ8|68uf44LPl?^PCfJ6bZqx3i6z^hu1db*xvClICpR3iar2x>xS z$bATR^&eP1`14L7BpJmChMt!3x+_o6O4SJeQM7NeKl%fr?hT(#eh+90htyrjdy{rLNGXd~{j|=et)V$6E@8Iv? zfZ^eECgc%jF;rq9_6)5=n^ZAC<`hs@X!SZ`1^@h2rYrv~9*7@A!!*>%5QmWWpq#2D z@!W#q75?Tyd2sX*;%|suk`ZXHo1i%XOE)Sb6s*&lQ-XA(S7j$nHI|Li@q|E{e>Gnf zH0Hb`x1b<8M~0aOY#Vgl2ktKd9^G*U8_Ofz&(*_&83jM(*TlpSh~`828E3&DP!YF7 z2Roi}dHyVrA;7`w`m&A6zh~7Y0eY-XfG`fFQSON+Sm%2nd&Vez^1=gQ2OI?Q*yMKI zt&~vO1&R6p_A%53FgZnL4`f)8*iq2~x1T2R zqK$?MLqhRr8J`SaC_BA%$NEBDS7o3Ipc+t;D;OBT+49BjOxpF?D-GF)AGOQGMgSH7 zYuNDIo4(A~_2ZKbbKfv&{h>nv<~P=CE`1FDZu^Di@S=vL+0Y#~}Zkc7&U22|6o z(P{!c?4zSkoF;p#F8KR9XS4#b720=g>L&H~HD;=-q$^c$1 zc^Oe^&LE?*EQ*Noy@?nD3S($5C>fT>{X}DcVixuPfQ829+`*9`4`vOY3Z8ARTwk3m z;DtP<(*P4$$@?$dD<2&cuEBA`j%W42|EPmE?VAgl+38z5IEf+{ou$>C?Oh^@!q{3Vz=%}gNgw_1a29J zV)2aq@`+bqA>c@;PDQbyx$@`jw{vefg8t_2fcgyPNfI^N!GjUGyoj`CyDO0HXg632$k0vahxNz|zH&9C2c)$+=e+u>0LvJfU z5=ifd+(a#t4dM&cNz?xMZ*Nh}fUG3O0QJkm_MNETfcg&OezdzK%UJK+dbVoz=+&!N z7v5^G9Jr=AZ44P@uH$qWa=h~1OS?e)80?Rum6a%A9({7+9nz_a95+MB1GS4j1SvEf z>$2B=W&3ow-b4aO{~*!@HqxTtBOgvj2<9db4nQH&szyx+8diY!4hA+qDeryX|1M5# zvT{ZSvL4ukX(K^GCkL$^sYc8c$pWY?#AB}c26~U=`$u*{IfWbtpaS_3D6`CBkSam{ z@r3>-LP1D;sIGK&Y0gv=zC2cph$LjfAsu5USi17fr*Su&HkVc^YXXnVJXga)6RFHR z;n$g=Yl}hSXY6xZJzygpuq5zFjfv-x&>NY0>R%NHOGYwSc%(kIwH;s%{{-L-1q-5- z&;UWblZlE+EkxBoX?cs9o;YAxVhkqa;{ZtqZ_1;7@8{8rG(*$a9*A_BAga)cJ0Ea0 z)F0V;?3Av*|2~v%kb2VZ)dp~UvGDSCw8CJ0sc_xI+?)$o9ZNU(3{sQOx|(kN*g3NER}o2_m6gUeiLar-abz9RUfHy@3ril(;s+ zMr9y)z)c^A^$RE&Q;nI!ftTC_6bBguh#XSNAsJadYA*ux1KI%98|u_Td1D-ngK`&Q zC7^G)w+_^=TB!OVDWmci`2=Vq&?P{fWCP}K@Yr>q1hIGUI7Gr>QB#3kA&+w{9vED{<%1&UI!@Fzgj3&?h^mIh0_yVy)@k(W zHsJrM$9E26q)FEVpqRaa)|5b(q3HZiRNjL;1AN`Cu=LXGX|4GeEmJ?ZLJ>hxJ4`DI zVPZqLyDxyB(6klkwr2W$^<3$lTor*+p_J*6@d;#vh1SFn{Zv=l_d4?dF`%F51Q^T- z3vDU4)GzKtaz5DjpXdcK5QaJ5=tH*!suUu z)dYod0&ZGUnpzK|N3ehh6E$8Chps0;~Xdyk<=TyQWt7Ui)yHHP(vIBiMW2-zoZt7hB!7a zBT^AX`?88L#hxbf%cXK?gaJu zhJsZJ4L&K;G(@gRn*j;|QP}w89AK7UYCv|Z6@bizxG5}JLLmyXh3H2Uv~L>F@)Q8c z&Qf=-JSYLWfD@33NH-!Wp{fZ?7MR5YDlDZdo4Ap98d?T~_4Sy+8=&?pkpuTXm<+-M z<=3xYKUOD0wG;Qx34qf^VUqM4@Br7+*+Jx%(6t%paqW16*bCH*a*au~jjkC`%2f2Y z0VxE2oNu1poYDJNO8(`DxO~-LONeK%1`udiK@Ur}U_qJ@q#49NfXRdRqGbb+K80l< zvstJwjpV9-*W-|fE)lT5CnvU@3ne>(4GQRq8iu;S`!00l1 zq;7TBwgaxBx)LCHb#)auADYHium+ikQlv)j6z3XXXF9N}HK%wa=n03eOrZ)5 zq<5SHp3(+BAS?rDD#Hq%3lr5Z)VHt&`XUFgxm`m{+6#1uYZPAY87(rCg_;a*$b1E=bO8@jUBR5S9*FJmG8$Mw&O^%&52ngF!g?`UZwH0@ zgPyac;IydFt9~R#gT>2pV+ct%qzmfKz#UXY7#DmmWc3ovGL$0eL>Qxrd-FZZ2M&N< zbM6_fKnxJ@k^_{K45^7bTK@iO1I~+zGFU(d;yg?eh8{fYQq>`EZv_aK5;F^47n`da z^b^Su09VjY0#dacr}POVDp>i6U=t`JXZHo92th9d751S97HG);keXsM0#vI|Bg(LX z+o2HxSffQ5zuO-n(w~7R!rGoh@K~rKks1%n8K{|RzG)i%@~|AwX?mamsc^7@3;+Zc z0y)7DAb1K>1tg#z1_d8#RX9B&{PEV)TEh9@9mRKKSb=uZm@|-O9H$|zs(`w7SS`0J zUxt zT)T$oc;}EdD!&o$e~TCn6|Z1`ictbk5)@1@hoJERpPkkm&V%1dqE8@y(uh1|(Rw49 zq5uGbMOB5!6C-UFBi$57*`Qws$qM9!LMf6xB8%_=q5lR-3BWvYQyQPju> z>I*mn0`wy(nv5aX=tCapfJYwWXxV}=J7%qWHQd#~IumH$0!2hgSvdl?aRp9110xHM;gnJb;+0UV;GYxtA?T*YW-39({`Xs~@U8#lc>nkA>i^|$ zZA=6IXc3fp&Jp`~EWxoQrW|D*tC|4+vjH z&w+jLpl8SS-zbF*!h$$Q&>RiH+gql9Y0ixFf2m%rsXgP{XQ!)KamXoqA2P--5&t;@EX-}i0xgS@EaGqxNWzYs{E zD@}|VQ3Or`de<}1UB-;#lRcaT>p=W+{*Q}D7(nX=1nXB_Y3rK5LEUo^_`Xy~Zl#3f1-%kb-K zrPs3cH|c$s6c9?nNTNsD?0t94KMlG1BT1LRk(urUqtOSOTA`LK>f62*5%clWSO&wG z^?DsXaWkosg^Pv51Gn}AY|))9SrRJ$qu)Zm)@@UuQhYYceqNDlLUB0L-EB@l$ZL)p z{4;g1QnbYUUc0bM9c8^@jTur;r zEd1VW{z;f56O*kdl{EZO_`Wg}l&Uk&AIKOwN$C?*4VjD1tUAjrzcHzKruNrQP(tra z*sS)1^9kQ=2b;Im{oFO_JUGYNc5NchQa>KE42we|JSKy)3Ml3-?v-x(LQ_{Md^DG|;g&#ITDQt~T0Xq@6*YG4)6EXI{*2hDXXG{1wleeiOG$p)PO@3E1}avYBdZ?sjDjc#^loWF5`aR4SU@D z*@i7}a{VIr^{>fkEX9cl+`2j5gJvs>;}s7E1r?I2sbY%H=ftvhN-54i=Se$4RQ{-4 zZ_Myjg8lDgo=pOKnHZ10&$gexU7qNEkzbeUyZ8Qzdv-I!KY%P);lt^QHw-&3#~gU5 zc%0?z;&4mJ8ju&G^2a+UZvk$ETa;XPQ;6^$(Lwi^iwCr_Al2NB5`g zo7R51wEJ2{wU(gZvWmR8SfgO?w2b}BsqE*M5AHkobYVv&@rS9h(YPStuS)|=no4_a zS+%HMX_z$*ulG~vhXcR z&bh;C*NgEXg+JBJTZUhaS5?kjEN$?59JatBRD$W8`nkM#^W<8BZBM~;*8HpMZSG%+ z#ab8zFxq0cHb)jY9k1a2x-kI{pRrJl43;f&C8r%cx+T7?%nRM;<&IkymH8;rX;P-n z-JO!@8ns_&f$Bfu)YvQWe9XUaAjkR9g~#8fgO7S=yb+QQWGk)cN+hisVrjBISr~^* zskDu;IC#7#=trr&3-M93v%8u5=+G0*#Sy=q?W}aprHM&*1O)Gdn!BugCVWV{)%JCE z57*yY7#-&BvGH#GR}R~}RnKVs^ez3B>^;@8FZjlAtO(WL-OFxv@7kqyMTsj(3$hYB z%QBODG&(5-qNBYZ=3oDLy>PZd2P>2Gg3-$S2hlrpm$a#(l3sm4xT1xcrS_SuHKofZ z>U@?S@DxYkPNh|zVU?Csy>N z09IfA%*e@CS0;(Q)DO9CKKi?{yQ_`q%LCVLxsS9+pZieB_}9hks*yM|E?hkLOt#}? zrGy{&Wr33yRMQW0zk8aXS>Y&QTktBwY8#cAktfcWxS~|~V}&ivMQ0^*crx^Aq1LnQ zBz^{iEq;@CM@M`E+LXdM%=a6(>|j)8UAju|=n`h89db3RC;10HN^~q{`n>5j{^Te# zTH-{vd;>(J`)8!Q*Ct;Zd5)G;#9WnYY|snC2t2{wvDGiBG}+tIWxuyYjE@(O{ceo^ zfsnljn3II2c;6(Y-IK23R}87Fie{j!D=Zkz`AWl9hdS+<$WS%J^wVH58QDHwy5j*)S0elFVxu;wnom-_+L11Sq$p<`Jf3l&{zH~+uvf3e zfw#Mb8Dcc6XEdT4e2U$V?a1)|{P7%{JN(#29zag00BzHOnJ&b5M$RebAb*e5&<(Hi=2Ga|?^wbnX1wt>ro4 zx02rWH5Na`4R~!Z*BIZ|sg&+J=f8*6Jl=>hEWKBxzAS?btHrp;50ZxW@PlP#8PjM6 zgGUVuz4br+dz-E1T@R;aldF?|_}yTo_A`<(qHJBN4AUltsgQ1SkJP(7*0F1VHBEBP zDXh1mIAXFTSYr8pXT34-R=;VKy~w&gH(Q}P7;5){*C>VY>hhQACkomJWW@PI?|R5# zBAmi<_TGpH3lrFEWV%0<(JIj53DenuiDXix+Z6q^2h%fiXC=QH)7UaHK`k&_j6(@~ ztlt&c(qU!yuK_ZwrUVzdIj^92*Te~@uLSAykZ}%MIM8j8#YFp0FRY&Y#Z=pZUXZ|h zlAVKH@pv4sg|R4$rcOqDX2jh$bX(3Oi?g!e#JCi(3Ca>PzFv1ly{t6WOqh#{_WfPkhEh^NE2ZXn< z8;9N9t7&TWGoY!T@%qLtSI*Qo(S<&$wdYzHI z-fy_J$5~$D*%rxQ{T&v(lI>rLy|gb19cBHiWZoAjIe+nK&7sMj*yP=RWpC{tKO1uS zm;x&mYpFx?+v&5(rS$Mh3Wrp=UwM42`91SOFSE{w^Ci3LGk;vH5l&BUQVD$-Cp5&a zV^B-a&Kh2FMyoJot55u*5bOQ1cTaYe&Q35*XWf-F;JsD*$g9m9TL_Jva|$X_k86C{ z-Cdjsdj@PAWW%{x1+fB$4@hu`S@K@|&BwYW66exJneg*c8l!{Ph~e>RsyBj`cAvV~ zxLSGYajhTI_NJ#NpO~HGBe`CUxFgq)akXU4Eu)Avbhdu$%2R=wml@tQ3x=teD8uK^ zRuTDF>AHAl&%U&F5W-Msbi`%xMyVbK`(0#c_eeguJ#emNeoBs7c_?i6wv5^_&rp}S z>tRi!46GQH(*iU582FCs!MoD*u!ZE>K60()L#6X=b=39h=lB3^O*lgCOoAXyaDR92pgnG$H}=RYVTw4c)PY;=3~aO?Dl7D^SxftB~-RYOmoY>4wRQTW_vTCV@Jcu3(eoBMhhMB zdVh~eCGx}Rfx1lolh!1P0N$TU&F?tGIeaotGJ9j@; zag!@MZmA&tp1y<>BRVp%o8=8}RS&N#;VCEQ51V>*iMdw@QKCo3(ph` zBQqLQ);Ppl-i(*t+Ut*>{jEw(eA;SG_r5pcs^j&vOZ~EAt!Ji9R3e%7O0c^gN+R(o z%}prC6yt- zVRL8x-ST43vzre%gzM7JB#7Ow4LroGhu34!tyhM|feW+&M$+e%*?u2xP|DM_Rl_J>H=^%RlmIaR?S$mCP-`a0}xl`WO>3W1cqHAiK0VD=)MNbaDk^U-J*|7BZ ztN0QlOP9Wp6QdLA9&~jR|V439dz|Xp%eI zp}PI1Z};ZVp{49Y!>=^HIMoGnIm{^SHcrl|hii(w{*htOEyS<6VSI`3i5nN9@cPRyyut z13@!B{XH%b2Igk&b2$bV{05I4%c@V2Jy|-FGV8h30oH?ZNOb->V5A(KjR!>n_+glKIqHrCmxFe!L%h`Bwe2SB`#?l3puw_#I+9 zQEk9^R3+q_1AF|}0O@=`bLk;Ev8BBU$D?=e6Ets<+9}FHNBz9zDb)_1ioIlBW$ey^ zT^BiU|C!>YG8XpwyN_?W(7nIJ1-*v55VT7T~{rQ_I@j(;r+Jr zjan^vBrJj%*5%kb_w!ZE6i=P`<8?eJr zoGV^lOU%-ih%WBeUh-z@e|wCYW~^?}ZBnntKt+*b`~ z%3rcj3>tAbaWWkidi2V7Gly3k@8lLxy%YP(d5M_?-o(_uJ6>#CTT5EJ+{e1kuqZD% zvFdAg!WPzdVsl6MBSzBqWpvG`d)NkwzfIrVD#ffQAf{`+Oz+evx@|K=JfAYI$V{8y zz>~{jbI1M}3)aC&Pzj^ADLm}mj9c*?50{Z7-OtLs`pk;dPC3^Dsf?-cW-4HOGFK5F1^sfdMd20N)|{6EQpFY zjH&s1Mp&85a=>uj|#&3&>$Q-2}zxu&XZ4Q4AD1R4(FbM{&jRhwJMDZX^XH5R-uXQ<9L{i{3ow zkg<=4RS*8M0X4!6i(Jwy?Bwc|8%cD<@lnSOvEDdRs6KYxo5eXQ;5HqMLsV>uh16l( zf16yZtcS&hO5#$JF{@FvebQnZ6V^NMn7LND|6;$bE_M|+Ww_D5#|28$)ABy9fmPC7 z4Y~`^*NesCVsmg*W9@(2Ft|W>pHvm{NXM5?rU#zH!eS+3=K~2L|D1x*`yz8N9=Ei2 z&u0&h`%~o`X_!E+^i^wwrvz&7p$GpbMZI}I&K=ikjtx!Ruq1)(FHh?>63CAa|Btc! zf9j+4@-$cWG*{EwC2X_N1Ju{nte7-nGuP==|7*vXiv5$EJVwZde~ zBt86!-i9wAAu0e(y}-c~1462MjMkPb@tGl8q8RYTE0@7t*{;NEZo-SYIEEuW-kU&A znC7G6S7{o1ey`T`?vP6y^IH4)yHyRnoLMw1zskt{Nbc)X1+R$1-i!FsETB$w0f#13OXO^SgKDquBAkjXj4Gv9?1o~$3CdPrlt6n(?lInIr zY0CvocOLP=(Jpq*U-(py6_V0i_yqw$WI`gytSx&Gqc=XF{-Dz5Q{JJ)VJR(h7RXTf2 zz-?@VM;n9x$hN-Ze9X(7c&C*s!{bv^bxyo}n8DY|R z=+Lw4T6Lu1-Zx}{^A`W(O7H}XzK|kbh5=TPG%CZ77TR zNRJsl(2dc;(*L^-HYrL^2mAXHJj1*qES=>iv>$6JYK(@1dRStuM#lZt6y2I@Vazj= z!zmKlZ`F>iUNZ>8JXH9eA9rmi%-p`7hmEbelgfv0G&au3{%?IP9DdL5>}u~X;gHUP z7Xz;rjrDZ@J1tBLd==%`63qreFJzx03D-TaSa<4Z@jYA;xVEzum7FxlKq`+-$z!q6 zagv3GYj&)pL6n?}F*QFiX(6<>QxtrWk5MTi;=YFaNWBI7V^Y?o+lNzC2ckri>f0N3 zA6rYgTtOL(+tHm&ZRX^=&|WO+vNiqdiThg=MOk2=YvGvtpX%}jwBlP&K5hPvxw9=m zBdcnho^zeL`|%zZQP*IW{j>FtN=|R)xRGfP8kjY!?ZawhCQ@^IUQ_3opbW7#gFu%f zfIq)E->Zz%thn}l%&fdRpPwZrDWLSYrJLC^c@OCm_fOTVG;@AyHA`lq50x-HMZ9-W zhpi0WTgZSXiyAtyM+LEz+Xe95T={L0|9F;eo8E^W6{TaS~-|}THj=R zKkg*R5}%YnM@Xr%z2NsZtX8Otdo%vXwq5adL}BNvy>(^7LD}Oi+E+=7PM5Y<8;Xhc zR#Wfl9X!bsCPO(b&@i?1-anrkTRpTXMRV1=ACWPSHUZr(-A z0j534o8?)ZQhD@uZ0=v@_{q%By7qZiSYuW-M7!w5kcSCdLPTB5{`iwE90N8DIcf=G zvxCq|`e=4*wL5Nc$aTK|y@R}_kAE}Nl!wYr$1W{pUg|Lz(^Q6aa!H3Dx4k+iA2%8< z+FMf`m1Lo{C}2B&JIY5XG;q;XSmHf>|C3Xx17?u|-@fQ*`zw6^RhMt!ZF{5mfY6&Q zq$?^rhHp&l+RhV@Cn__;hMw*iIn=GDYxflO!Rn)KQms`lCwZLzx zi;g8H!jGTfuFoz{2QW*DFF}{CzWLLf&-coCc zhqHHfIO_P}q}I;k5_5mCO0E_d>$|@X@jWTw(q8`2(dngsLm)w!miGq@4wb|w;KpLM z*K1~L_b%;vTCuj}?DJn*S+~lQ1boturdOw5$2(2uPdY|FU@Cd{e-ZbVaZz=D->5W5 z4_rvYz)%X(14s{ubchNlA}};V=g>$E(%m2^ARlfc>Z;@%I0yhgb)kVHDaAOd;MZ4ZeIAJtA{a9ebSy)`fPlu@d zN4s)9sNhXxh(M0Sul+u|^H$eqj^^6xLvu>AFhBTbhuj1`&+DR;vfqh_`s2#2vLVqG z6pxIbEX)s(;fy$cL@-GW-nSzIDQeQy(t0wS>Ot+kXqEoSl+JkPbICsCIv;XsTYbNV zY{(TbYUio5b6c79h#T^## z<0$Hn!Q1IwBAw|o4N+Zr>6W$c)97xVVE5KdIPHbu4o}taoahJ1D9Nn2O2*clomgdd z1nX+x8Fl{7o|qXJ)0?tH?Xa3hZ0WPz@XmdI6f%H1G#gfQJ(zwG!89~khSlkfd^Y8A z-$zk@+xpjCewk*xk9j`X&y+K$rA#%KF6E(*gkN}cs75*MAG)i<%) z?%yrt@@&O0#D{qcg@$Hcz^_)kMG^T$mc6wFoibe?odyUcyaxNP)_>fhWBJp{cfp+p zH5yy3dxkk`_?Q9wvFqk@&A0?c2=G3Xpj%$9ExKaj8ueRuct~YVH+#9jy5>4Ojatl- zgXD>YcI%RBnLk$O;QYXvw2M&FpP57_-X{SC6sdY<{I^cSzJleJD(cd!Bj1LofUrDV zvrT!+@z*#_<=cpknF(%I`|x(nPr?Ie-|uz7(h?G3Qz+Rjk6)n(DemD(LNI>HI4AbT z+l=rTLvLF8((J~MaUNV7DpXpDY>!pqO`T6D<4r$$`^buM8_E-jsmUn}J^38L&b%BE zJVGBxoTEWDlw-6<4V^M0x}CZAdhnXycyVu734L78@Ba+j^;uOr*3^c|uadB2Wy zcd1gvr}eOcNA#$~1^J2W?+)$NjZ6YEK>&M2hG_>dz5sJA*3hb-9j1_8C-n6`)#Ju> zWvZq%vd47`qLt}<$?4-Ryid~Mw;&oZBW%~ua-#l*r1HT_E)8Ks>v*FR7|*s*pr5Ar z&)a%GIJ)nX!`WACRT_C|rO~=4mW)j_c=SIwBI@;aLrBpRmTm_{BkHT2<{9njCk6xO zOFKlU7z;2BP^6Oq*%)+S(N3 zmPg?eCjnm9)eU-{MLfy&qdLh?vQy?fWHq~)iq9~!nmovvB(C3VH7O82ZFmqLX9}Yp z#}%|piV_I*ss6}iK5T!1h#W+X{|BRM8an4%f6^@ zok8oieQ5ke;#4(~^i2EZL^o#|Xb|>~FJbc z1Bve9$4|2AXcPAuvBpg73BInbfB;4PyX>?#EZvR#FB~wsy&idZ$N0X+C1vc32FtDA zQCAf}x2gOzEjWXc7uXsDA5JvIwVc{v*?pSdl}6#S&PQ;!q(0=V_C;#ztcwZpT$;x3TQ%kZHujx1DBzXfi`_J5j2d`N(U8LVh?n7>> zoZyeIhf~6lD?}$ZeGkr5;SuFglPUhCVYUF^$2~$8%q%b68CyTqbu_Qvo@7p(16=x7 z_eIiT87an;T%e4=^^pue_>S9$O`^CY42on6dP)`XDKv7T)rpt43|aS#so#yhXuu% zKYMwZe!g5|8jJ~}+B^Ov-E4*BsDJc4_`Y7(m%#A)sXpblXT#zpG0M3SzsIM8?_S;{ zQt{7xJjFP?j`as_XR&4^^!wZ^GkBy=gw>@zG+w=WY$rrASo5Y zdk`N?<_NiBT2^ea>q_{7pH>arnnN#(P3CeT}MXZROVgWQERFndvV{oFeWOK3@ zxZn_`CW?1r9`6`Mx6Eg}j)k{sjyY)Jo+;x6mSVP`hYAN*l8a|$BC+$(> ztdKdXX=ZZ1w}<8<>V)u4Vwn_+KaBDLg0y%NG#K8S5bJ~jR^C=B03lF5H z;x3R2;hRM5}h>R70-FUOTa(kkGTN_W+|s7bsZ0f_a?XK4Wa&dTb$U{Bn`c1JKm(t z;qNYtq>iI7%BLBe>w0Grq;uEIBkw$7r;F<%>#~Z=ho~;?`#hnB!yCjBhh16Kx0zv+ zPDx>tj^o#pzQvN0mdok7ySZHvcSWT{H?duoe`#My`i=zV=?=I&JUl;s{P<;ear7tM zeJRx0+1dVVF+@9&4FCx5^LC?9@q(@u{NXfj*D8DM7E-pOj9?L_Ktd0J_(#B)m4AFI zrJ+du4wM1jcH5b$8;$deB}=hSF@p*CDrM?J@3KxXcCwE@w;uyd<8N8jx7Ta>63gJ5 zGZ^V7j#sGMZk!1+!(Yk2^=dBWRhfj+$+76j$^Nj;L8rMXkXN;W=j~5Phle#=WZN@I z&|_3F-nS6Ony)c_oKMyStg7P9T67{!#SKI*dpeP~PbIg!uXHADuvM{CtN)q~rJrQfi-Da7?mT0B{CH=>pGn%eY-ABf3avTx-_vo;aUFjOOQ;opQ2uB zG|p!~`0LR{(Jj2 z&av4q{&Vm8)_8dbo)&&rwFlG(=*0P4dpc{jHh5Czg@R92E!v>>F@YesmFm86MTS%h zj~~I#Ff!55)=TRh~Sc4i1pa8kj>_u?*@e zz(6_gx^rkw9lPClS3acO$naZ8p3M1DFxDPE^V%ADn|_cBpEQxjIndhjxgw=58CLQ- zdGp{fC1l4q>6&y+JESpbAL}c2Xf9EV6sThbnV`)6jVM0O90OsJ7#s0V7hNho_!kh8 zfoQwg5bz6Z{?mfn)pWbJ-3yfpAIjR%yK!G$IF6p*OY*st;`2>{sZ&vvTeKv8tK6jY zV5*6elGQ{{nta+{ zZ)SFj&0pe(%t~c?lYGy)mlvg`cT%?ZN80grB(1zNhC{I8Npk5Yog4*TjX5`_T!914 z;n|nbA{Bhjt?cw?Lj>HBVeV&h`6<7x%M!!yYHjC9hmV13RsK@I$(@WX1-mLxcfOkwRQGB0!s90&daZwU`cj$MLHfNeE>7B=)jTq--JeM` z@NNFL&JBuZBk8gLZ^zHXK0!^&0e1~byz))Or=N|3zUy=_xp@>zs;5!hZU7*9Q%@x? z>KbE~VeA(ZaA9JOf2qJ}&3WuGT_?j%9S!(OyowmwM6_F6&|t+j`?mVK-%q~pZ^SO}a#fU9ek9(Y2Z${;5HprwVG+gc&<^hm5B#5%&UbuT*XIj+kSE=trsJKIWpK->^3dj6?Qy5r;^$A3 zRte3lO=rA~&QqsnU5!yrSL5o2^WB9*$yFuWMr#h+9&hZ?;{$6QyWWwTywXVpOlP8( zJ3q+V@JNg&l(8%Zn5Vi72_W&SM}(LV?!+=oy)DzlJ`SX7F4W^w0k%Je|B@g#(0=ik z%1x=>eBf@s36BmuxSzm%56wdaM0rQ#zB=DdpUYFg)u$KCEUqcdvnu$lx0*Pj7;5nf z=Y%tQ{LCm>d+4Yqreucd0tW^R@R!sOFDySle{9w|$FV;fM~e1-me~?m;kuNYS21A( z6MVeENlHdbE$AT>mQ|NooaIaiNP^UStg8!&B|;J$uDOxH0XQl#^C+Qmn8YAKvWy6C z-|MbuS+YNHzPsA`!Naw;9Z*0s1Q2mx4sBu!1%!_7*e(6j>~O*$nUZWvBD{2aa`7D` zo^;a&6(e#<<7z!V%JC)zKCvzL%znM)vTXHh08s2T%6T(^UeKPf8oxf9^nKSU7j>0V z=ewuZ=sRFoIlbKGwG~ZTa@nzrie%p3rI3A3?I5Jm4Y+s^ASi5P0K^gCs4~Z>f>Pv` z5zu(+3uY2O@>+_V7RauF=_M-C=p}bziPU#ha$G$KDJn-z3L1R$)TPtY106hM*v5&E z3Gz+(xiug|?y0Mftz4TddB|3~851;OyV%?56_m#4lbYF5SpM7fviy({Z$IYkoLnTA z3cqC&??D^Eve-UhzQfO#Ze?vy>tXu)ACgNC^6(s6cq`FUSq2@&wzUbjV!OIN?#ctN zn8YFoH7?0`giF+3*{r0@-=Id;h(B>FAJ9s8-qLqUrEbEA)LSB!Qqz6YbUHBk7GejZ)`EcY8rLt+$F_H-yCw>#x zAXUcxt2@2l)wn5!?&E89d@%!|3_3gCSnx8`xGv&ZoXfE>0YQn@tCj{QqWQVrWX@lt=H2vbfafccciBqu# zU6>!(*j~~K2iRrVKOX$?LQ5zyCW7s6l3L%51b~SUg$UZ8Ks*Ns{@gLPn*Q>r$XONm ztVTHjGEdbrd;pwZ!UZ?!N{u@oP2!+|sD9;46ya0kylN`|1<9=!LZD^tz_tN{AMXIqy#^98i`AX}H85v=jGOKT+GcU=l9x0RP9~P3=;+ni`j{9KkGt)zKIfEEl|T#Lrwt7Rp~Ttblhg%T&~P$YU*#2MQhN5?s^;Sr?Xc z8oe{#V7%O$uG?8W@iZ^(_SrRcE=T$CJ^yHZqnhb{VESP=P@h}(7Zz3^AJoKD0_v!YbH1TUM z=+e&DX>>|_L+*E=@7|&h^t}HQ*4{uLYu}oAktWd<2zpODF!&53VeFS zMvB47sltjw3G_HCs9w=dw$4{YzuECdA&ctlFDx%ht+0GM@zt;9o*aD%tz_1`_m|MZ z9pyOp^iIDkMaUAAhA1N#f9ESH7ed0;D{%3X`c54akPi+MD>fd9C zh8yh2n~SGcTXhdg525Az;PYYfsghhE8Q9LoB<0~XE)a>6=B}?72w+IC?WJj-ppQH~IeXqKs*gz| zzZ}=g>h|fC0Uzp`aZl7WHBV&ogHk!JNXEs=QMkzAjQlo((O#q!ZI z9Ye{c`l-rJK@WE7)3a{S1XG(ZpqYfB&~uNXH`c`PC4}W4XwhYQAC%Zm{!%IO_N*h&BlHms3$P{V%>jvJAfQ14=o5(n zto%Rg>kEMRxDlZ7bYyK~V+s%#@5rcs<#+&f32~tPG0n|Z;vcO=fB}rK78z|wd9VMa zQ!hi6V;c{t;AXs}UIR;sUJowL!vsGDt`AQFsm7)bHA&98dGz@%9T+{kzm-4O{O23KM($tWE&AI4Q@Zsh05Cj%%iNT5Jh1K?q)A4DtRzD{k z8xy&1=s`27+WIiXJN->!q{!@*4$S(9BLHG!?@NdC^5_Ien$A zUl+vXS*JG>H>BSS$VQZ<*EdFsHOQT>BuHbKV$+2X4L!@rqO_nc0lnERmEO&2PCFi0 zC}Yy^jqTt$KLe-59hwcslkWLW1dzJ(Zo;CLvvzlpH@AY+cx2JwkN6LF8j3yBRu$=9 zdGsfwyxJ*(toCho47nsyjQ@V_lx?|_;Q78wGlqCA{q`2=Gw*q`2Ki_l3*Gv8=rez^ z(EG8u6JR~Uz~B~nOl6i`scV59{k+|hT*V$P{;OPJ0J0si)(NtP3PRjd1#i{YP%z#b|8Qf%{*mS0czzpk+Ny5o}I%D^1;EA*$LBS2EAH}b}Q!3ch+lvIchfVv8mrE zdV#^+mMOC#k_uOe4X?hLXNrh=)JP(W?}s|>G%dV%?BODz1ecWc?@9ktZERb&pnH@2 zJ|J0Gi@Wg!W=;mH{4)dJv&TMeJ)Cnp*Dg@T=g$&fetAKGQdrHM*c?6lGjwPXDY0hn znsowxknuxW#dW~luGPKvl+JJCiB{$TSw7?Kqr}E_?6J+X=S8VP^2XtQGCv4&LBjqr zP;=bVw=S%^MEbF}Q-*3D(B!J!rcft4_YcKPuJmcde@MzZ`K?xl^u=shAB$NtdEikH z%jR^Ti^JjS6~8Cg!=gb2!GX?bUE8zSm#VwtakHoTA>Z{NdGEP7K64c%gj-;t40h_WCtm^m# zK5FM9(<3p$NIP(HsSXc;KVIr8!u_?=rsKYJ%|1pumK0^_oqTI>j6eJwkd^&+2IR%x z^4-Y=rq$Ly0aT;$?p|nfpcY=Kr&~$BAQ5sml2S@ap#po0DjNG&=NG}GS>`LeQET;{^ZB>0 z@b*916#?Fd2axD4zvu`y2&%vQOT4&tk{=LwdKpEssHGuSyFHN>9y-RE+0iUb-F4)& zAPTPX**(F@UkdWD*XZAyC#$G8gvQ zylRnN*PW+IGLI>-jT!0qkftQshv_>5TCeji(A!&{D=(d={+RguSiP72G#=NWZdaK^ zV*eCz+)H=%QzSU{<(n8#GBiNhw#N_S-;w_cJo~Z0O7d3?uCm~c8w`{%V|8^aL&0Pc z33TexAFMk_3{Q*g+Io6P@_eIk!&A=Z9!c0w6JPCCxbfxr2nOHU3#Rf3Yot37J&=|P zsBoPNjTqBU#0Ycww35EjMMad~X^>4rUwT`id-m6~;kc}nzozd(-*m*AX7q}Yfwb0Af!;7Bws zCRq=G;lVd$;off6ZA1V7wrFNYztn#i*XN$1^1V97Ee+3p{S=xz6wQi>3)n=Wpb3do zdD9Ch{#ISDbomGfOi_`%-|jYaghV=Myf@9^fN@$=WED#)Suh}!B0uiV$~LYO$N&vuq9&LB^^8>?QZbc*-yL8sdr#vtD|V9TEj$ zukqUVrH1fLGc(&+W~bt(gA*(w^4P8WLx)~C4S6^7)sA$;sIomDTnzQJTOC|}g|05r z$uYoGZ6|xaq3kbF3?i0|(I*xPeDzQ-#qrEf9IBvyt1^X}=Ty{AALYiCm1r4gLlV#K>qK0is30 zV#ph#XD4%}K-aY!KTsk-D(xT+3%WEUx4V|3vTL}yT$SG~h9pwN=u|BJeY&(T@G^1p zb#81JgeT@RSLQYDxWW0oUG<{;k^Ydfsa>Czjp^;K)22q@UeXPf-J1qovp7kyS|gr| zlb!-I7GQA!xdQbmSb^$mhC$-B@Pz|$4nF6m+eObpm!HYesN}T?!!*T@-{bkVXGPqr zM&oW~Yh!ff*{X$=S_RsTrE?^t&uR088Ud}%Y^H) z{L22`Nme;+C!J{hjkTXOFG5XqbA6;vTBYa*$!2jK_uHp*6s!=iCY%uP;ENz2nmwwc zzha;s`GJu}yyL7{Vq_woLFwA6hPDoaZP^8^Zl23bL6>Em#=ip$L#qZ!Z zCZbZpOd!y3nq6)BNte-rZu3}@fPML7zy@=XfO8BOE$>8l=`)xbE-~4eJCAie#Cm1I zA6QN#a$??zHDL0a>G42qn+IQ^<+I1tdv)I$=QL|kQ3PN=C$qtxZ0$$B^$SF{)FYvG zSwEPpd9_#u1z@o(EJJ1!k(RIwpL4w{bc|W!emTXYYw4-`Qo#e{_RlvHw+Gs&1|8#&3|HgwV;%EzmrD3~qe~wg zK|v6&Yd0nOz=Hem_AX`@58>k6?#H`>M`W=HoV~@q%L* z>r=;2c`w}Td)1LIUFQ;*3Z#o>6LXXR6G3X3-Jd<8iGOO&?s>Qtu&N{dRR)>@f)OMD zG*6C|Yrz5$APdX^*kU1P?ymtrTN%EgXS}L5VY8~H`!Sh8$JQI z{aouMe6Cf^JLP<1R>HtC*EbwLd4E_^|8`9Tl^yv*Amy1Y?KAwsq2j1$$IpK6qa$$2 z9P%-|E~9(TP6Rf~+~xeNaM<4J!e>njnrwvD7|-DbuN#@#(@Aha@6Gm-JaB;ciZxGP;)D zYL^kkLe^&2o*j1T&`xgoy`6No=P=GBk7veOq6oZ)GbLZkT_=ghP$TK9y&G}Xc>70OAPmT)Wm}<`+~5>y zK&lm3S!k6M{iCsCnGx_Oimj0=zr(vY6!EhG1SdomKwN^DSb+|-}Dmeu=Bf-T~o*Ri$; z&xJj;NR$NHeR~{kr3?=gclcQ}n!R#Nn91NAb zSUoWkFczZ#laf%Vx6XV*L!%3!bi*$HT>6Q3>Rf#S7U`3$eMFtT_5NY@f;isB|*52yN#F&|@%Y6Ln zB-8l_+OE9%zMmXd@rSz}aaM1oUB!;{BPX1!FI?2R4~bayZJEP;BQ6yr)utLS9G5M6 zW-ktkvKU)rJ?)-pcZI4)2jXBN;6Q9qBsB7kh>oniUYU^?pDZ@of`geB=JyAF+t-cv zwq>jFZGozL2$y$~SuSys9P~Gt;@>q~CuSzN)mQ4S5HO%%PHY^zmg>uTXH=NUIKbqBZt@$|=E>gX+vRr){U`xbU$?}NUAlRs|sLN61 zC_7t<`H3i6*Pq#lP8{@!z*2dk*mz(iX$PJ6jH7%`y{`Ou6pEOFsV;GThCi72^hvlH z-ndrWT1+&y37-PA$O-)`m4*Q2U#spC-^+CebfqQ}juhjEKm_L&Hs-@u3QVlkpIE5W z8Y9SnZg;zWWdZpwiDTlOx?>I1WWk6@ONzp8Rm8Uyj?y4H*7tX5c&kqIOfbyIh=z>G zJfQtO4J-BpGk;VBn+beM(GaNU_(h+k(X(Mo6N!4`+F9v10Hl4 z@`@ldIVejF<_rL}spS7%k{;%2a(W4ek{C1ojbdAqsP1k)a7#G3pJV?04!nJ;{1LdA zyN^p03I6LaB^8(d-H!opTUprt>#(NoXY7A}oAQ2Gyv)CcVMZ~a|H~)k3Tl;32grYu z$>#)o%#cQAI2NG3bVy++qsZ;}SCr`;0iO-P*8u>LQh+itGx(+rsP_5)*BdLq8os3e z*&PQ6=m$+Elf(kU9a_wO$2jT(vefWsUB$an4IItU49v^-;lzMte4mCN26%rJI1NqO zUqLOzh^!*8g8K%P$^xR^9AMz27Up*(p%fJuuq%`*mX-qQP!fOw6MiUf-<|6`aBkpI z?q|h6=N$ceoJ%0Y?m;8tTd`< z>~nXj?z?RUV=~!S2>5d#`$38*lGx-d2rv`2@8%8Aui(RlU;qmZ)g2_iUpnp%>Zbu* z$~~;R{5OKFz4ia=ziO0#%U}X2D3x&RJ=RcHD03h`%nO$=6l(UE4npRn2m4WaH^Iq4 zOaRZw5PmascXQjDf+EKTOhwM3-(Y8_1*HoP1J43$6!1Lvu4x$s)BzXg*q1kSX{sa&?WoN zBLtw>bMC+6KWOIP3{}7;09FrR3=UBsqi~3c40p7tJY4`V(m4vFT^%S|0^?U;CuTM6 zy9oyj>lx~QU3#eR17IJrlE=>p0O+pJ*s~l&^gV)ohYmloAPr@8gxuo1GD!Ge!pFZd z=)jur|MElr{&Q3jmJ@NOZTY`gBw+A=lS&|9Sp&=L+zQxXUx8{0f1G99Jco+-kgodO z7&}2We`o7|msmQkCTfd5`2|u32Vc#62nQ^N{n5Uc+5m;g8M(bjfmnsZaUeG@1X6H}gL} zU{+nL(kr`q{5E{h~dtY@cn*LivGETh>YFK1iE5``Nmd9Ho4{AP>j#`R+ zRGeQns=z%-$wvlBUt0l#vko{pww#Da`~P%aJUW)+Hy-J@V?XgT6TJCP#>{_na{gn8 z=>9&Ru@N?WWN(u9mIUhs%t$gGSm&hUBQ#}%v97 z0NB+2Jqei&H>A|C19uu2p~fDrOGK}RLSxUt8${Q~0RsLg`M)$QC?`GuSzjuj)ct6| z!m^0P=)I@J-f#Qy+28==2f2jrbpg@samLYvmlJM0OG*%?P2d?e9R|`i9>sq;H^89L zC=YMS{iBsd1_)bp_*t^@TOQS1onox*`J9^Sc~AaSN)N!yiMZRX{R968Q|W))@&Dj5 z11PB>!N*W?gB_#?V8hCCpcGL|xQ3Mre=LyuMQovxQ zCq!lgwk;qepqxxg@MG_$`qaWTp@5>3-(dq`=Celv&+kKDi@Y=MCHGxf@*aalCd=Rr zwLr3a)*lTld<}7gN|~`H?&#%AO}$Sb!&c}51~)WY{;eK!Gjr(qBrdkRRcti>MVWTZ zmeGV!JL!a%p^j8mObdRf?~`d}Sp#ryIQgxj0;d`m$AUzsy3*^p)gHnDbg08yF_V!B z%h-=E*fETSsIl9{;*k5f%ha?tU(k6S&~`8X!7BnK*zA2SIiin9N@|8sOr3#yHJA9Xi9FklYJIK-8M}^`5tiC!*`l1}SAi zc<+$^JVS_~sAZ|spfF>91XfOf5-edzC%xq*=_3T)v_L=MfkmphN+R4|1Wk zWdP3v2=0jSQKJwr{Kz!lak8zX4aHP)-u&H5iZy^7L})@F7W<51xH&{)uAkTE3O+Zx zN326sIU9yr4qyYgQkhJK;$q$RciUy^X2i=Fc%+?(UU*czgyO*?X9W@lKxQo?Fm$w9 zAf@iHbTX^mYthnx9K~vkmOZTibP_hV92M4rK77<2N|jqIDj=_;g;^ zuBh6x<=TgXkp2wNIbt9*b~8>mtOE@h4&`|QE@p(v+7HX~_`T8esxlx$RoL1b*7|I6 zoZFv4M=Z~gnp;OieaAhjTZNCe_r3X;fsD}TKq3}G5O?Fup8wW?>35z_coR@JN204% z67Y>5v-Y?UYo>HZXGAXjVhAQj$p=8B0LulxZb8N2W^uR77E2uozXx=Ep1!sI%LcSh zb3rlKm4x(Xx4)Np%ov88M&YThOTxbWZE_F%Up|0^o|GT!m$ME^=Y5#1 zkC#!q)m@S?p6$sOd)CWi?zElNxvYt)ikD4RP|4j4zwa^(x5C#AnXY= zYwSI+qZRCVUUqhj5I({jV z4(lXs`0_cjASR&o(Y!(fv0TUyA6)qHh_N}07~LQ}+w8y_k@GxM5fcN-3FZm4a&oJj zv$KOTOc4WZoF#1pYcp;vwpl|*LX%WT{%etym4?cEa~5O97|__+V#}8Ei0zE?u_>bJ zyja)QA?7D4)-SmeRM!1T@%jGZ2&v;K)?oRKhC*p)&s%1N_cHev6dA!vsmS$j+SSY3 z>ff5oC_W8JrCN_whwc_n$%l)%GT*C=map4lP{?rSP8v)nF8ar@@k^j1gY!liN1Llb z$PR(x(z~7xe1aS&N|4aGgO4}*rRsO4WqkPXb0cKS^t+UVZtxXvwRxhkR?t;7vIs$(nIwT!AP8;CCHYIGEMBGFA z!eCU;lH!Zd;Mgzxt$7h$=IV?659SSjW@Wa2e{{-Wm!bBy%I9cvHltlksV1_v7MpIk zR$*gAF>`dJLR%6Pzd_4|H$_ttNLCh#On~sjMKz=?2fyp6?l?Z*sd~kdA{jSE4}J2mwG$SPAI6%hNxbFUxfK?L&gYG zLz+64?MjHXkP#N{^u#|>Ufb#e(#xQo+urH$TSKUdT@6Q5gNeqNz6U?>ppe-Q%fQz> zUQOCRP#3k5zW54b)PAok8fgN~-U`(}DvYaMo>ZU(H7hh%=kEf}X9kczqY*EFpw(4y zM2fzvIm6XFE?bRTXru*Kc1|B056ZE8U{ex0^cko>?_b%T-CP|6>wMG}VV4k%ZD6b> zQ$ay7J5jNqTx|4<{^(n&I6}8KiFp+y=!3Kqa1`dy01{V;AgV58IqFIJ*RzuJ-ZRI53&w%I`3>Y(*c1zHk7|O_Ot0hshiWxUN7}{ zwbcCem@=f?d^lC^j_MW@h%0=!)aG`$prU=&5sZh~0liBx5DWMW*ra-X{oWoLMG zeCcZTH{l<2f}N7RaQIUeK0~^AGJVtG?CoA7`s?*Tx-AOg9C$x-!<)6J}U2!lPxNl@4Sd z1l{*43y~7DiI1AfaSQyJ59nd2c5YU#gp{NFu=Ah7q`&OO4{2)LczyQUcK3VRo|SCv zs>8Q43G^~QL4bXnLzw*Wu{`0Y)`X;P@ zoiA?l#Qj6lkJ0kM()`lpST8PFvZvy?ro-65-^>3INAO4UwnBwL%tmPv#W_DzU0UVn zkqd+8ZGhB~_yN(0K`|-wF!PgS>Zka7JCaRkym3|2pk0!+FLvJ*GED(hK^Sw43}6j3 zs9B)8S?wu?PNqP9b`gt|x->q~t$RSGNTCG}2M{{QoelWpT40r~({970!*40TB@IX+ zqr-V1Pwo=@XMi9vCLn#Xv`g{as($ACjPtz6If8wV6-?}P*8cM9sAN&1ts~vF`);$3 zw4i`cDJp=CPUzemuZ&pT?Y0AImioMDG&Rz&bw337BIyUcZ`bsX!fuULdo>J;*hgr! zQ-^70yr*_%#?nV78c5~FCL)%7>P6^?H4zLpU@(QI}*kF)&Ki( zPOdN(1}O1Mq4mekXkpQ<_ixV7zZ9*hzNk25HlRgMq_?;>XnPc4O0AuW5NAb@5nT{A zPBtgLzY=L?r+*uhVTfR{NmK&p0N)W393L&yyJAj_Y#$U`8|td`Wa_7qqfLgokbK4f z2X>b~9Cgb*JkqJ&nW94)c}ZG}2s4K|=Gz|aj7H#m2-7kn`JE?qv^|n^z8WSx{G34O zm{A7MsMn=VjE;aqoRqoL*TzQFS7zS4Gh5AwLUUXq+J=ct`?PrlmlDgxESs0oJtt0_ zBVRh^2Qovjfb<_harjWV_XUSUdko%9y0j{Nb1Cbf;qLLpJr?4efKaW#d%JUo);{+A zFJ7JP*hgNVtyc7cF_bv5K?HZdOO(*_BeE_D9w`>{>~+%edO5FIRD~yozYw`_hbRm` zX6?IFqPMzxnDFUb8iUTZ98l{6)`IQ{7_|z1T&H4eUUlmcy(*S~pl&_RC!L>cIdCN*`CQXvP~2@fasN@00{L zsno2ka$*(1cz%tBKGd55^k!W6AXw z&(iSkclmL8!IT%BCV|-L&Owt5lL@fa0qQG2k;+KX`0?5b1agjTkRcJ~`1ak!QCIh2 zxI`Yre~=9aMs^sN(i=I!UihknIC27WUkn?QKT3^mnVP^d1u?vQwGjJQQBc$vC$HX%kd;I{cv^bBZJ_RZ z>t)nTORu1yeb8jN8i?b07Ig3Cox;BKgW{H-A-ggG0$)?sD_3X{B|{g8!wS2ymR~!5 z1;}mmC(*?MjIG;ctO*N4$w-Cw$!kAeu`qeB+SIb?+PZ^Ni-P%gkn@H^i;bR{3XN6Np%`Ma{m9DoT|HeWm!?FKAh05^XLoFZNHl zS(S`8tnamhaBhuNEORq;Ori<|bV#v4-5swv95Ul`p+(fR?s}6Yc}7%HR(slXeg55L z_fOEAybM>4?marrAzgTA2MBIQjq|AVqu>1;&iA^STBX)o6Q6MZdBd&6H!-A0o-4@L z+{b6S>sd4}h}8*?O653j5;M^8xz(;QISO@t2^mh1j%*AJQo(atW`J{XaV?c;yJic0 z4qSIo_rt&>3L{TiiFuqcFj3CCkYbuaBlSlecXuLn7c|fktHbVu#;GDdsf`xzApWcp zyemLU!;k9~`|SDwuhZNg^TUby%5>khMDNckN5*k8Bu}wD;zQ!lNQD*j#_4dQ7b=wne!w{rJtH9;dB@sqaa)4ar_ypLZ$t`+37 zIO--^AH!_gkYrDnexENj?*~BZqZp>B!NSlf8~o+q$MC(}afgeP4&fxyY>m1=A!5-r z8D>EU3j8ZN;>C+TxY}5p=)ShDYUp{<#1}P5OBAzF$1R;1^(H|HwbE+01)IiO{`4>o z>8Jny?rdph^qH&x3S^dJb{(X{dQd`0^v%EIg(7}Jc?$KVOI`d0oJUe?+fOS>T)DJ4 zNERDEC|g-!A%jeRSigg%jz`YDIWqP0O&i}$?~=T(TrFAhvVw!_7+s~3=%J@t8 zYc^eofdh5GNqrnxW45hfm$A>slm=$C@=wc@$n8Mcu#~=Qzv#`cy7YX&PrF^@KDFby z?#Z^60yaJ0TJD<~bnP3Yi2~0h5zXM4;AxInjKxB_+@A*$_54hu+gs^-nH-s)X)6P{`kV+5lzW-{h>>WprPUS=3A(Z(QpFQbJJA-d5MqDG0% z=z~$Bgpg=yqNFGx>S)n|B#7uO5^aoL@A3J5|M;%oy6dj{&v)H**RmGQIkV@SefEBy zXFq%I*SiR66!JRPxyN`h4n9fx6#Fs4)!l|oTVx|c5=%R3LB^LUfNb+L?^(u3;Y zxn7rOQcMLw&CS)5X<_Kzpq;%*V)}7kyAkqi(FPoeFB`-N!F5{>Tkt(xSDNF19D4#F zt-G`FVFXw!voqfjxcTb|pw#BUpUfwaER>bRRHR{DhprlU?>{@k9ooJmk1*0atA$BI z8|w2n50%mg6h5f~|D>oq?DNH;Fom#5_SsiHT?cKy63BgSx!>PM z{kpam$KlA{8CK@D0%jF^)Gurk*bMq@hsCV+h7j@nrHBJjf8T}_b96{33o1*A`>#2VhWmyi+nq*D7@!VWB}3|quMjr&rC)KX9{pW z6AC8`axg0Fs|aq@wrEh{czmG0ClUbcjG*xEREXh7z*>!j(T<|pootosxgLxu|N1nC zb*qR6_OkZDK;-10%5Z~J!t0Yg5XI#M|LkcX^z>11NC|cgBa|SJ?HBI30@f>B^`5NK z0txwojkRGSCBqT*u8Bc(%WI*LMVSwfqTAo;#iG^2)jlNMgK_5T45Gytzo%#c=3M2$ zhkWkYFjzY#$v0NgzBQI~I3y9uEV0%&7bqlC?qXn|U+O**qc^&~KnPupp$#-m3GrMk{U>@|?_LoVv=~;N141Zqm zzctms)}0I9k&h{WzFp1EvtRrX>;F0EzM)WgzOsak77}4)Jv5eLodh&i0m~-NlA)LH zQKD1f0ubq+?VXaVX4&juY?e9KXzl4hkN<>26$f#NNA0yJlnk4_YLOlpx6e6QhmZ5C<}#fq z_k;xCm)%_Kio2Y%Hscrx?|-3>c1>sV@8}Jqah66d)HMAPg+oOKCbz>={e*e7tD!o> zF@)ucPu~v|V)fT}jq|`sZpd_;)=HR()M8bp(P>M5mt=8Ytyb8gR(p|_^dOon-w8ac z1Zcb#^0NiTUnI6@WGEM!JUGacEf&OV%6++MN ztG$Y-NS~G)JA_~3IB@HOxYEZ55VaA)62?}`AoOLBBQaU0R9U7I9P9~eKg!7B?o47$ zUPZPDixmvZ=B2Gvw;A>NghJRdct&PtQu=lJLVl(y7<}IBvaodPr{x=RzKJRK$J-_p zhbd0`U|;AX&6kyjK?qV1-q=l3+LXs3{7eoexGa96v^{7ue2eEM83$mxQhf}Lx=m1S zA={zHD|w;wF_iLv?%ewCCPWqxf*efyAc8im5*YYyO;p<@!xxK|+~K6D@}YMn&V}jr zEgD&Q@aj2?YVEYJzc8qmG5()zR2B*f&4!-I|5r7hY?Lg0yHbE@-8iM1R`-bLIy8x%BF8`CKaOcZ>< zYOD>;|Dh3r*P0lT$*(~x=Mj@@Ch+BDwOwlsP%@E5uYJViH)jb;n zPe08Bp%@wRk`S~L1(=GGy|R9zrT3v&O;xAxu?x7am?=)f%kh!xHP8N^n6O>YQ=i}D zmpz2WznrX*yG(?HN)*opMNATJl_h} zEe_^Z`Rc)vJi7F(mOV3IUd7*aZ)VBs;pa2Pr|w)3$&yce#tY>!!ea}|iA{^`4;?d; zy881&m*5+x+92kKg}7oa?Y}6^7ZE*z?zF436U@6R|8R_^SSNkw?;>nMlF5UD%YHqvGVw2ugGxp8MW@b)gl>sdxO}(bjo9O)7=BzB6E{3x zJJaA6=XNaPS$BMJcE25HG)w=VHkwgf_hYxVAU=VSwuGCkE|aGwYyq=O(^)0&%7_zb z7EeJ*E&=Hh&CkC6SRyp-Eb0R*)IwVbJ#T4w!};5$KGS?C2}x=jIU}){=~&pFy>l%()M9-!woHoQA6E?sHDi5jLH)aaHR;23V<$Enru=(|tHBSsa-Zu2y8>2>W zxqjDfNU+yOPe`{NYQ}k|PxU3eGoP{*jPvp-_bo;bmQ|)_q-bq{g_gB8(MkoRH0(Qm z>OqE7WalI0^8u zhJ9E2Js*VcHxBOl)1O}7#I%?ZTHrY+3h5#;*?@wJhU+PY)cAt?m92YBaly0La8Rma z^ilVO;MtW;}OE*u#P6`3b>~~?8awHm7c-Vs11q7cHVS}{#XLp38 z2>Bh03U6QAKIx^moE6v*p-yNkk`$sIYs>ROC-{Wdu`%``ZR?)m(-y)ScfPM`9OG`W(D0~8 z#{gAR(g+Knxpk2@P+6F8WZL8 zd9!0@fO6D6d_ejk?-7|#1v%gjsemCJA)kY5(@*(jiO}r8!#=0B^_Y9w!_bS%{|t7Z zx=88o;*X!f-R*{H2srw-xsq6pn*pnzhSr1EnsO$@=evbxUo80?zSINZWE^J~fSPcz z!pL*e@u_^xbT=t|^H}`B1OIuPA_<~zVA&jCco#)<+j0Ma?ET6RsE>TApM7g#|J24j ziw{H`-gEmyxPolFox3 zy?@@$=d)@oefozd-zoR~pL0*;OD906z5%gmNan`g3F7o8RuCBa0c?I5Bhrs$o_`uJ zufXiF+n*>Z9}~lzrtQ75c1FlH$v^DxZQ0p#R=&I~=zVkQsW;_WNxO|7#=6v3s*R_34b>0PJ4z4%T{EX)Z? z&6JU4{C5P?vWBPXZ8bgN+73sX+_$b9$kbAZ!a?M2Bw{JT7yIAkckjR4>@lWY?M{?* zZm#DTlfinma4l8)m>l{oHJ#)08c#N&c78vk^!w8qCgqsuy*}H@C7j-rF0_57Kq*u- z0ztRDOb(DS*pb$hSVWM!WT7utq^q*2XcWdAk}ia@?YzzC9uW_ zQJ01Y&g1>%@yujq%Dgc#QiC2Ycivg)x;_#Qq3nr5N3*9HIVtc=e}afzCW#)-_M`=? zb_&bBn_TI8QKW`qEPSGcBvr*P-yK{$84p?#q5!61^6KoSX+1fSa7S=+b{1nP>J@iPe$CwX!GzHa&Gqwc)_9@bnQ^{P$!cG0bmRnT}o1?Jq{5(=Qn7w4yhjh__YLo(xKHe{0{Bd_#4wchx(U3M#1WyBJnL4jWk%G}M14EPA6$ia%lPhV;+O z0GEFcj`#fp6wW8?YO!5|P)Z=>8XF*g7e85B#^Eqp=)`8%SNx2d?saAerCT(U9q)>G zhgjAChdvmNw#|K$(tYR7GF1}`89XI6wtZLj5e`=I83n&~O+izF9E3{QHJ~!QdpqxO z(bc$A6GBuCbp$W}eQljR_I@&nqEnsz-Mdm%%F>vpZ*o5Vj{_p8o(6V*`oY>W32y&Y z9d1qLE~5}(TE<@yX$}XOEaUXghZws5kVJ^e832-6rx=U&5Y?a(rR@Ms z0JZ2>?NYq4f1|DVqnV&3j8;&^qZct8ol>pcYcHN2|BmX1Tx7w=sAf~Wyanl8y=$wW z3ac$UL}e1;X;T@>U9Mq|dP|-B0Iu6$Joy}ME`m{;!HC=Yiad|8!qog&9dCNrMa%^;?O(#GzNq)`O zzK_-=pJS93(eAjP)m>#hTF7f>9jl`$v&{V}U68P5ZuLFG$Q~!gDBgj>4Pr6uL<|In z*23h8Ioy&@q=v@J*`ko2Qn!@u6TORokS!Fo(>9??-?M&vo`eG-e21Bwqj!gnmRy}?bA z^&5e=^kX9tf)rhZlbdypX|*^KVGcd`|J#sytBVryIE*%-@>OQ`77fQ ztMWiyhO&N}bIro@wA6lgzMk27%5K48a-ZVPogmR;jzqk7r$X6_pC9}VSp$FHr%5=h zxQ+8gc1qDYQMiHL*nIscIudYnHnk_t4e!=QENwe-)>B0`z85l&aQ1lW(LMjffQA$? z=R@;M@BEBqWyzFxq8L^{(VDh$M74PFM>I5NKM}m$bInBm!AkR==&<KiccymYQ#}J7Dhg^iohS!sD3w@a0(VDy^0vEXGzWVz zF8T9cMa^g#Me1KUwIQQkcb{wxk~d_y{q#2?%AlfMf70@rCKpv?-RgK5bP(@zmHze zddDj00#An=6X;Zu?H<>6+%rhxU2890C;}`gqtsJmCrW!(gSI?p{4g47+i(uBxd)7m z?4}AyPd{~{Ao}2<0dSmfn+JJ@y&tP2j9<4bnRu3KU)G{A=pJu#IMv9Su$9bDgfEAf zo#9G~e@Yhj?J5C~WFpXGg-nDbq54OaEwuIt3;oN2Fwk61UdO;yvYgxTY1x2KG5v5#sN}_c4Ejb4^FsXnhM!)X})rfhSU= z|EA{CEZsht@L_a-iIZ+`S-$_+fy)^86jiq%N2!k7MzDPE;gWD2Hj5v&z~cyjH3!kl zx2v-_MvUBc|9N{jxS{)QDrCILtqt#$PFHjc{&kJm4FbhI=5M%vZGcsxvc8&?kK__0 z0l$Bj?AN>KpPMOGpUY#a!|2^`O~Q4CBXaVFpwT66V8VgfSd4;1ms#Hm)2EaaljDEF zD~0|Cz_axpHYLBl5f-;n|g1@P1~b#%y;wi*Sp0Cnh9 z+8;k^U)`6TTC`jL{R>Jt%$;>4K}yQ>+U^>#MVu>lg){+}l7f(x-Y)-K{q)B#?A_yZ zM$)f8%q>bP%3Bmb#u!^U!;hTrHTw9c61d?hw$#aNmxh|)Td_z1y+yi#+z%_&l;3Kc zp-{4?`N=It%Y=3F(7o3>dy30MC&3a>G!d0pX?b+xZUk?Xqg-mKUU(W2ka~q1+S#el z4O20pW0c>#6|mq9EeG%!;}8LMD$=#vc05xe%e07AEwEd{@{YYsX8Rx(*VY9iv%-{* z_Q8su9!p9e6r~nONANy7P<;kxqjM#oUeypw_C8K$TMve(i3KFr&Yy3%A=mBIb#qs^iZpS_1(WZYv@M)j}I%TpY)|6@Hkx%L|VR&>mf6F47B2uVe=7)<;0`w0m91>QQMWsL74`rmF4 zoS^<%#~j%kov5#^S`XJ!J4CH;D|wmE2vl8(7s+it@Ju$nO+zQ6WQweIlGnSU{jCE{ zy+ysvp*qWgAhg))-7C`|vkczNZs)pb*I9n}SbDb@@yBA7*n~GtELH)?qaTKpW!9zR z@?e}Cxh$sGycdTHY`gQ5T^{Qsqd*qY|EMvGGJ)^wJwqB1B&`;5(NN+==FyL&2O+MF zF}SE)r`0|e<)w$)x)-`L9{1*JvEXODO2ib4iTaM3!%N~|GZF7L!QQkY+^E6=A{r#= z6it-f&ffvSi~1O!-}sPgF}@$%TlYXo;EkH_#;+$!yhS}T<{9&)=buqf#xGsTx{GYs zom4(SkpAA*OrdZ|c-G&)_YDjTkmD@dDp0a4nA6tpCNZ0OjIrDl*_F2kCQ0R){r184 z?}`igWY@FU7(7kIQTZ=6WAYzM$KSBp^HY&vH7~Lxa)U6Y4N4)5Iz1d+e@Nf$28O2+ zIHeIb$+_-VT=vh$XDRD8dw3>at=--G`<=u?UjxN%j9&Jo2TUAHic~*e$A~2L`|_LD zgAZ}7i3~1t!yK)fT55%QTlYHTPI`guv;2vWNeEC$@@VV4k$aGK_uub8D{nB-JT2$fRWM`A+yM~ z$yBvG{V4wC?fe|5xmt+lKagW7^7}-lelFPNB$vo7Je!emj2lY5&2tOF-O1S5U&h{7 zLCm=5!0Z^Ko5{$XOrwo>%1)yF(JV+c&_^!nM0~dKl+}JJKv}6FP=;yF#jUShDqP5E z|1?7i_5D#xE7{YV0W8;6j&`;d&JMm$zkV>z&B=+RYvBg}Lz2)UL;&%>XEyReMU6^q zDHphr7_`GRQT@>pg9 z2F2|P&Z7k8Cdb{djmL}ExEo(v?Q|>ueE=xOR7Z<9{M9+&3-&uqrRgU}mO)z+W2EU( z0YR#}R1|@tU4!c33{Xh9f+owXQjxkm8j8-=gJTUzA-D-pvTmm!XtAw#@K3EL!&58F zJh-TR@JQb!pV&Xd2l$s;l@w@*QdiC?nw>UW^CAAh?@QdLPV-|37-C_M7(V)u_M3({8G0pTuIdVS;bmgPzKW`j^2YTY*y_5jXC} znt*p{z%XBWG}90eZ?Qv|SBX}vnu6#C>=M9|7qUx~9CId`tW-MUlZ`f#PhI(&s5Gkt z>Rd~RVddZ51M=(Ao#v$*Z3PkTCT0HKtl3y11Q02DxFo=UdD*Km1^xq)>MCOnyW9V< zu-Cua+hn(6O!GkDm|sGfAf?DgImQCsrgCFX045al<+W)=KW=u-*G;^ik;~=?I6pUP zK9!z*hL?*QX8)>xdZ3>BzFsjyJcw)XwVqGBELmSj67d={t1=?xhW&$fMu-ce-*TR; zfRn<=Y=GoQ+u2R~`~xtJVf|`8q1t`hF4(cm2pGei1?xK|6aa>V1IVa2fu%=rnvj}* z_S}s##zm*QVyY*BbV}QkSwcNG^*aZBhs_Ci2l-P>K&Z-iM%jT$2;o!k>*^urr7skI z1g$nG>q@5IF^h;Pn?KqSGKwQ2E@|_pVYVOiTTWuy+cq<*R~>slkef5!7Yc*YlDecG z56A}Bg%euO9&evdeHl+bx^~SdWX=4pn0J4~_$qd4gSNW)xnwpaUw4wZiICCfCj#|f zd&T%c$&b)ZJ&*mPohY)1x-fiDSUa#lD5k(k1}qY*pssMY+OEq#?*%S3YUoI#=P(;f zu6dhAZtG{NTLDrcmhm6bYs#GnB)UJv?N;T?-bgE9**`cn{>rwn8wQkQ6s?}X;iya7 zDcG|snOhfL_h;@4of`!!oEywY+7Ze^w}7-|il<14#Xxk8c;6OvbTeg!#k>emHU|1m$aEEAm9!06J120xd`#~l>ZjH9cb70jW2*}&3J%KU4DpzXe^`+jl zyry1V+}`Gx(4RedKbHnvVrmVkO$ zubh542Y;x2qzX@yfio8XfpdeZ)(YKV_=zgD>UC%W)qmpV+C@9oJ8YS2q)a>EX;;~X zh&AFO>BT#WD+B`0+HLcrAmSavW_HrT&Mg_Zx*NoaHJPGQiu)EYLdKc6>B?w<->OEY za|zG(2}ph!dXx1|9>3^R1XTIg>>Nh!*%&|}n+!-cOCeeaR}@ zy`Q@m>^FEZJzi$0wCjnIfhTWYnaLQeZYkgcfylU>1Q_(;qn)VmHTQsRJ)jOM3C1C- z5fA>Dd!RNIf`J_8@08+a10c7MWS>;%VvGBJbA~kPC|p zLvmXKJ~y`vvsa=D2cJl$B6N#!6yXyaKQiFE@rw0R1jfkeE&`o@Qc|Yrb@*ZC+s3VJ zg~))PnHwLSV0qphkzGE{4GBM5KE|Up~MOxE0Odx7Y zAULY$F*xfe<){IfB&3N_AvM?jUweh&`c&DYIOXTos>K9ezU32Nue`g_L@{VG3S=xJ z9ATu(l26NV*=6b{s`7Zh?BSBX-0X8q?q=lBg}2hTR#y)3Umu;9a7TlAwo zx`MrQBRKmB>H8S0W|r`(T7>w^q3~QIjf6+ANT7pB(V%6(c95q~j0h#GRH$?^C9PJH zB;WxxN%YU!1TMsZwt+oL0m3LUH*G}Aq1egvGuw#XxmWA8l%$u9H-><8I!laZy^_CF zRLGXdh5z`q-}U!`Z%w;uoF}=#3DFrQiJFsA<_o?iIKXYwr z5hr^uLJ6xl_DpSN{WGy)f%Z?ELklktSKX8O5NCYbyKm%P=mc5%D}I&ir(Cfph?D`cZc0i9QamGlq#j#{NW=rzPu)LQdvQT z8|}nV^7%6jTl&ohn;z3uSfShVWcOdW{dm*uV&LC$How_|c5;(}qXTrG4rw5kHifqr z?IZ_}_!5@kG~X?O9!Qeu1CK!u_N~wkAWCDhkM!^0+?sj1-P+%;NiJ2f5#)pBA(216 zpxFTyYkmy3{h1_SStyc9hWSO3!w-fBl=nA`s824^4HJt;7S4ZZ(W2-5=*2kGw}nC3 zSmk7$F(UEi&CZ=dxs_-WfiLwUFOz*)SXPfV&h?s>UfgT^OR+;Qwn#{^I(kfgdxeUW zY&g4ozpChx<7YKxl>8+)9jMDq0~KS`5C2sQ1;vk^w=|0N+`{#c`UckT|I}F4O$X#< zrD}$!1(<%y3G7wzM878R}SPbmNZB2a*-joD=nM^V_mY`oL-d2*@>X25^ zr@gOpgNviG*4C~ee9!2L-bZk$wzlQ6WCSF1tIM(BXOB=FFO}iPytCHUz3(h(U)bEv z^`ggif$r8A1-{#lw>I+}KGf&Z0ItK+(@!BQDOj_nS))1%ocaP;@OB z6?5|MUu#)*PpIwbXPR~94oaD;rFn}i4~I- zBPNLf_P$Fa)|$5eskkS=&|+k^ri5_Sn-?Q_q1%ZP<&WlXgwEW!h~))V46-94`5Wwa z8H(^DbIzx05g1D~PyVLr_30HW)uT+Mrgh^r-vzdMLArx+W^w{0WC_Kuu64tz-V6H9 z&s*a7Yuk<%#``lSNowDhOQ@hE;*@YE4Jth45Os2=u-qGEF6fN2f;vy5R-EjZacz)NFOJ2QFHHP=r3K?qvlMKwsJ zL1bN@zo2ZiZI37*VvkWbfN^CMblHrYvFK z^MyI&K*?dGE}+uXfP$R(dxezS>XJMjXNmt{t~&B^F5o)i0>7l}^HA+kv#v!vAWDn- z`KlC;^%4MGZKXi~JfGFU0%a^fl1dhL1K<~dQ(@)TU->t?^@%P>+J$y4f=XOD%`!?v8fnory! z&z3G11bmJu_;{PeDOK_7+?QvTJG*Ne1NmOaO8eIQ>FUp!`jl#jbJvHr3gpGWA=xKNo`OL64kf^E6;a%2Yxm7+#t zFBcYl<~okzGS+scmii^oG!PkICANt3!r%G9i<4{0*)u{(wno%--7quhsbo@z-G;%X zIK4(% zl(X<-?_m_9N!V|%o<<=q#xj=jgX?#fwqe~*jM~cFUh(Yh zv0Q9lvYH*;8sXXLe!~i>xM+epOp6S_GUX=+-wQEwb1B3NWo=@Zf8x={sAVT zkHjkvH-$0zDF5T0{V)@_dOk#$iZHJVax25nd(44 zw2%|rmU%9e|C#LFee8p_Q;ylluTx^vn-$?F?a-I zc+>NO#nIfKD^F92EhqN2&;-_+KQC6$}Mw&*O}_Kc>+ zp<7}koW@6a0goAq*JOl#&Z1VZ+z2>JZaH{UveOauC5Pb);Z9G)GD~`aN~Z0Ehy}V` zP5_4cSqAhmm{TF;`!w&LSR7~ldKOMAi;)Ms$b`Hmu1G=Y+guqu7+7g2VgcI{ZrAgl{OVNRB+4;&|M*M)$D=m1WtDKqQ5_;zRnK&B@>=+({6Su}kC|D&{ z-a03~GGq*#bi~riHL4qwGdl9JviWLqF6O?a;7|*_9;WIhEEb0j5PHMfaK2M=Jbya8 zYS|T5>$_pAde%9WqsW}eXw%n24elxK8I=r`a5R830k4acWY7&@u^U@bc_9n}b*@+0 zk9HA{L^AWK?IXwDKn-p@|6cyn>f$h9WI@(}n*IYc+~Ynu5lvPS_G`5iYIT0nhoISa?6p66CCYQEbXEInK4*jL=_ztTl!Zc zDA33+Ad}y5uMiJFQUYG)w(8H3j&bDdIwZ8?d;?}MASKyqUX){u?gP($lgQW!3*P6C|PCK+3aLrDHXagxZ}s!p+&a*2D(h) zU`LCIi!*9K$79|tNac?{_h%C|F000znslC035{<~aT?N-^CY5~n$e+Fw(TI#B%5kZ zm$T*98^`(2YB8|qrnI7hTVMXBwpyREMvU&Nt} z!r`ut(eFc@@cCs+L>Q`aSc4kMMQVn%?fXG%zgHQIFXS>=9GD1C4F2+vBX#cZq5b1O z!_gg(_)HAcL)QiBTGG-2dmv-8wULaW^8xJ-}md3=WwvUfe!A> zU-#bmho1>#`%?(}* z$0IvLvL7Iy^i2UOu7&)gqe2(a%&TDzce@JK3S_(Pq!H)@LrHWn6~mSV9X1GA7wNKRK*+?)w(eBxiGZyshn4F4oRUg^3pRdU|NaPj-6;;2 z0MpJxS}?qeURaQ0(vS_J{t#56X(=ki&;EJ8xhS}UBNGAA> zh0c%rnPxf$sCByr{}D&27Y*bUt2Zyt4IkQJ^Uqk~(xh@ly6;3}Pp!Zc$4+`eiz0u8 z*azY4_ZlnNVRZ^Y#Ma2vrd_Tz!n?QI3(=N*y}ai=9Q^1vXgYJ=Qv=mUv&>D2uQ%iZ zz?0=UA(Jre#Mn2~fLGksGKi6?EVJ)W39fdOPriPakp1@VV$eKe)@0Dnm^-PGE*FAx zOFadYraw4@Yr&#(xZsO_^hsYPy>%h&P!_UsmEDpH z$#?JoUzk`e&YDCAo8^&bRE@Z!5-9pdDqXd5_)naf2osumVEZ0!>_@?D@pB?q{HNcK z)>LYjU_A+$?Q)RFH7~CuMy-ZOKs3v$J^i%g%EW1;U~I05s#CzsV&A-ZWi4*@2B|Oh z<=@>c4qBnT`sd%zR@ZJ`H$KwM%B!Z#X3(0yz%yH z{ow3BJh$Jnxxz+Wz@*b(c};T0iJ#(?^y1474wu>zedNTe9on1%yC0`M{*q;=q|($Z zEt_ZWT3-Kii)*gL6)l{|(rI;d`Ox(}%Qv4q??4Lg~@obkX|K$C3j7`9+3t+H-7isKR z+cC{MOppEYEi;sw= zz9k)y zRTRF%orO+?^LuUJm5+}mcIs`mRvzRPkBDAQ^?*C`6Zx@z^gYJ2F~VPt(poNz^~Qb7 z`KdS zFclo;RM>y2TF9nya2mc8_R*d!V<-gP0Vl%*A1f;OZxKw^Mt zFl{mv&lI~8ncTjLrPMb0_Og5TM}Cb6zJ|H_q5>1OnDgKQG%&J#&?MDzKl+CjhYo+K zsdge9LMGR(t3IqN8n92!x9l@}D884^@iBqoUg#WZi#NXyvBoouVGQbE1>0z6B9p{X z&Ll1QBPBsXdDXnVAQP3Ch{~j~gjZ;z#JY85Zkz|idfz%MHmiM3Tc=bmxZK|NS$Q;~fX$`3r(uS=2sT-0avyRx zi(=>wWI-}ddTtBjSI6ypW3t=3AyBeR5xJ#9)nbNoLh5AbG~Vku3l7EzPNjmVoY(;AZ9R>vN?JhW#GXDpQN27G9ob0@>karuGuPQ4 z6~<3#T+^q(EDDVg2X?0c-5@izh$f<$x4*??*zxBS-zu}i1+mdg%(IvKz?UYyGt^lc zy{7RE9?9C<_DAygTqI;T;P{`reRrq8Mas;HaX)`ntwz;|95ShMKBYpe$%kAE$U6j5 zi4u(qQe*Q2cA(tPIf{-tBRrpI-b#i!qf?R@88^Zw4Ugu9GaR??ImfUjDlb{I`0T*N zHn%IJt)xPSZ@0|%E5)TTWntU%Tc6Rdlq1vz;A(BTf}c!xq^Q^sZodOpw{8|jV(2s{ z1M_7ENeh4|GI(fGH`;KhJ;KmR+EaEakev%V$uf<6-nw~|TE;svn^BNNe7G@a?tlmX zYU4$1;6#m{$vl~%S4e4MHWID;<;HihRTU6&X5!;wszTO-@fY2@^=#-x;%2uMo0!vn z-9IKhDdk{>$3}V(v}Teln#_uYbg6#r)zVx?$|jq1YfUMOv*5|gp_O~Re8W~ow;_&O zA7*i3#X5-{8YZqADLeeU&x`RT(z zq@@Fsl{XmZeCHw#rSpyRypz=BbOS$CZg#`)-o}9e$*HHOlRPc$1swjbpsY8o$&2Za@ptnzD_%axtO=VA>t9Rqk*qN)HO*R$m9}3amMQKl=+5KN*=4 z-vLgA)dms`PoOrLaCY;y*Z2 zK9v!oucDLg`XT*HREyMnDe}I_4(%lepz`_fFYV12>W9AzzqoNOa zaYEuvM`9AEF9}xq-&|=%U#JGDEK((`ZE0kzQ=v_%>JqR-sVK+a2i%X&l&tE`HG2*% za!^&;mmiyy{~dJ!d(T<3LiX6FseE5^H2Q!H*`G^P4#+`pamh%Hx&psH4-}k>kA_q1 z6c*5BlX3;NM%tRva!3>@Ai2#ixL~%_AGVuE7r(ml%Y!?7UVnE1#;oj&8T0_U*p|U} z;@!=F)`5J|U&+u|}ftMaJdY)BvW(>sB2Ipz`V#m>Fr; z-X9$rZ1WbK-U=m}-lyyqf?cJ!u#)NcG|9XBc}Mp&mp0H%Q0=P&0&UqOuJn zM98ml3_#r%q6Emnz);Q(AluH5*))dw4dK?6q#k)Ws(Zcq;x8I3VcTDB=MMi=14ziU z7yNij(f3-%$4BxBfcueiaYp}PEOg;w%p%7Bk&;7p?h^%zHx^VFIpsa8FRQuITvyJA zlWPmW$?uYXYb=fAdc&O9Od+&M5~Pa_E~F$z z8tCVfXaG~9oNrjkVoI&qDfbUi!LGvycJzW`0LFBD7R_pACYqn>KNxL{;W%5(KbN0M^E}wXeXvkVGW7NnXYc2KAM=g$BneY#gsq(3W1#H7KhXF zhq5KHTp_L!M=;~L zcPL9|nUX)viw1Kc+4gv+5h#7{A0^oj=GsU=gscW9$r6G!5g9*0OB1w$E zqu^imQh=no)%zKfu~&B^?grqWfV785re+`qqfK5)Pl+tZOMpD6g9`YSoK{B%?rdZy z1v~(SewCmThVi{9g?@Ag2^;{$^*@Jz3!(hzD+RYwt)$y#*f;aR8sH2GpaXb018)fn zw5coG-zoP%zpqMw$$&}v zk^j*UD(Q#@_>4ea9a5J7fWOm1rI_@uE(Z>I4W0wp0W>bb#fuT8#jgom4}r;b0ie?9 z$x1^&LW~X!7*Pz6lIezkq^uyiKuF8MqK!gmqyGa;4y1w`P@7#lld#fFYR^HHKR4(E zIDtU(W{SbZ0SM?o;8k@4cxM_w3;s%)Qslp$O8@G<{_k(S>3gNXbV2b~3lY>=snCpvAFx(>nt`C?eI&{phF>$e z%CG@Tk->$6$rAcidYWFyz$9^@t7J_K8rP$rBmu4S1TQXRYUjb^biiETo}}AZR$X#g zf3k2?pgIs3l>^g7CQ$>A#s?2X_9F;zDF$Nf8z6YFBV@W&?*idDNtkMG)@+Z&T zyaxf4;;E#NC~?rJAWTjZsmu?QMw0vqR+o-thl2F0{*x>EpI<*J1eC1_W`HFRUEK&U z3KjUz?Lx0|RAu;Sa2bGZ89gc!0G>e^3#+$AZCbV|Ut&5x?L(SzqG(g)Fgfrrg=uxhd3LY<$vu+50P`tY?|~<(V4uF4 z@DeniknIMZTCe1P-U3rS+^%x@siM0V5akd|F@m^PSr7hx267&?X+u68R+^aWO_g@Q zP@Am2E)?hG{25~?v=(ce2+Y+uBRa3jY|3Ynt3M{Via~Xs*j{}HAZOqeNz(&H-RYOz z{O^(kP@qv)e>?Lv3{zGehf|?Mo>8-1cIx{3v`{iHFGQ!%8W3s@$gP@K>MUhouzwg| z|KJDWl1VK357^>uw>8jlt{CXFWTl28;AB~}R0T`9dTAG6x@vO;ak_wZ0z2~^i`oQ1 zG+^AR-(0uq0xxD}Mo(e|$tI(L zWX)$U0kW&OWgJ6CLTjb*gIbrv24LN1{V{`CcUWJU7!z<7yA#uE{y()En$ZA<9?&y@ zkXu}<5`^-`rU|0!bjVoPY5~~@ol@%mK|2}9@ghJ~IdV0dO7pyJJTvE8qshC-@;v3n<=how zQ^a@!?xq<_cXX@uyv`(GbVT};yG6i4f<=**8Vcx0KnqaV!BU6Iq!LMX$Icv2jPcdH z6HJ5yR=1Z>vKyCL!Y5vCS)YhE{)=xt4fM4>Rj%35^OomZI zp>vHnu1|64CC*5x|Yb5Chc za`=)pIAbQ>?qyoHU>u3QSGqXN$vp+^*)1D>QZ(YP3Db_B=- za}G=5*-+Iu0br}579Vu1l|HPlzcdoJX0uVVV+=+6ueN?rR+fVRK@fD% z|L?c3Fi2$L%?m-IIV4fi@kTOlR*%fv4{Q?S*<+uVaTZXB{Y7%OJQ1}mDvhxeRIN_p zj;|7%WlntSxHk7SgK}VG;-lVvYNBDn|Hc0sYR!b=y!i`xQ=}&Et@w3uxsya4lmjzr zEV&yK`*g6l;FKK&DVQ1256LOJ7bci0mn;}w}{GgS>^tLgIs*KF) zhgZiw_tx#(3!0nVhxc`HAfms9$|akz+A-D!f$0g4|JZf|j%;uC%LNhIwJ3>Rbn!TG%mhKrt6a9j4yj@i#ItjT0u(fx%gU>C-C!|Ww`{h3yy8t@grhLc3RW8f#><^2 zM9}@-*d`cT%f})!y@hTEJb*QBE;N0%AhqgY|Ix0xGm&aD$y6f= zwRdW$$G1ZD9_Fg7b$}q(K~nOwB%KMHOS8o>a+yc6s~q`9C0i? z$1l0rPaM*|NKx_4slpq_DCMYXZ9I|Z`cKvZi{RK385pDda9j^BG9PqLlv1>LYuWM%&-2I9~u zqrhp{7{F4#ryW@~-8#Pv54g{0GF?e{Aiqpa^ZrToHiG^bup(<7|FvaCD>S z{aw^5BX+GEs#1KHY>zf}Zi%1UsvD&;;0rhN-(ub#3wo7%cVn-%A41U{nQL-Ne0MFC z(Yg@ZQ_;FNTyvh&Y=(5~{0AXe?4)0yV62lS|AX`9u&w2!-Q#v`+H10cfxLl*1bbgZ z@Jb49(D~rwH0z+V2=1qk{lET~evV^i56=p%5FVWve;9GKK- zl}|xetCCtH;z18j=a+$IvjHo%haWT+_P*H{#vzhLz?LtEiTG2$R0*bjV>jl^FMt+B zk#Ji^fmBit<|&EZ*d2eH-E+DQcsqN4Dd81&iY>T(emi=6ei=DvIqkUUaXfNC7s$M1 zOqz%zZxKbI_>6mJq3bJCv$Y3~zZ@D<-moTn9stvNs{pHY9d#q?DiT|b<^zs6(b|+b zUXjOX7_61|EMrctH^VQMzX znR=dCa6~u1FP4mTMXuh?Z*H-i#J-!YAKVQ(CD}I<3ZWFu308s#7^y;`M5X4j@1{q7 z-)smcxK54zru4XV+icOEak`6`4v+l(U5*Z?>^Y`x%5l`Q@wJna-m&(RP3o!`D%Zc_ zgFtd9284!@u5)3W+J&dEy`HD^QjCNgDyA39DZ_|4LDf4<^fBc#s9Y{ASIbk3-}@I& za-iqF4TrJld&Z=EF$|_&&9e3W6z=Qa7onEQi6@fj$# zks{EvkND}wVW_@aUw`?cM6+Om>F+3tE?JC$HKE=cx;E*ca+^`Z!;9@jnRq2L<390ErZ&105n?-9JGGRa zyKagyIo|^%y<|Rs1tW8mn}RDWVtd{MnseKWFv;0~Lta~1#9>(8a>#`RKuGllIJ^(6 zPpj-l1KmiMl*nP`7+DGfKTk&m%kMXpbFxp-OKCn*LWx$h%wvN&!SEPuL*DVLW<`%* zwMs_DrlDb;!2{=vcwic`6)b!OurLLOrHhIIQtHxA`hKHv^bbs>#1{6bfv#5@#Z?{T zjZNMZpI@;mpR6+QI?VsuE>ja(>8^JGR=p0RiYEoX;Y43vo_y_EK+Zi^p7r3J5bp(| zR~3BuY>Pg&hgc4xr3XRZ0Z$n&HhFy!a^_q?8vm}0KUs#~q8FnX$^m8FDk!M?h?N3I zsz2Bpy?|ka(d&>xx}gMhsjlY|YIG7QjTmn!T^HYd4m`)mO~o+B0|!6f*Xjn9mKo{n z>&E13$lG8iRG{I^`Q!C-v-5h_jzT> zBNIa; z@kftz5igONE6Ipu?z7s5m(k!n95A4Zhpy{3NX?C)Dtz|1<4Z`;EsjMx#fvW#od@P~ zMuSZ36~V3yda^*+3CapB7~uOrIR!H!`&E0$U?bzn(Wp?Iw}gQwbI($p^-<7EqL?^pfTs@qMeeb3g=l3VEt5J3++dl1`mobiy$ zFe&EytwYl03x;N&dxslO6mA7>08jy#p2Ah(ILTvmWRnG&=B zbBTwpm*u?&$5*`Wm``5^M!$&Vh-wo!h6#Z}8_7UuBzjQVn?ROhb^0G;znAkLIr_w^ zq0$x6i098?EPoCBk;CuNuvZdGg4xA(_yV)C3PSCTuiwwKKXKyz!MUBu=R{~hpACeg zmFRoC5~+y+L9+{xgQ)>yn+uAkIbNI%N^g}F2!$5AFM7!NYpSpsY~l($MarJBtW<;l$rNfBem@u~M1~<;vxR z>mOJh&JY1ZK|k5$AHUs354-rRqh7pVzh{TrhFR@>>@;pnjql4T zejUSuctsP$1}`fJ29(8Uo!0uz3ZQn$N_Mm-!{Lpi9UIzo*rcE<9oc7}FHmZf7$(+sq=YExUiOoo~A!M%Yv0CNF^-`2q& z-5+t96C2;1p?UEE5Euqp7N>*1)BLPj=X;W4pHcz8sc@kS**<(VdVkRQurHtE4Er0~ zP|m#gAJ|cg{#*+;H!01A^{#Y;6Q*hvFeMGKN*Sf8IKi7>X^z;uJ z9eS?Tzm!PY`ur2S731rW4ipM<-*r1w=2_-TCV`WNf(AJHEqYT4SFF^RJbX^#(S*i4 z%5YfzO0T6{;ATVng5QG#8TdaFxf=cHDvnTXi%= zOzDER!-e^F6}#1sDdW92Bud#}Q%0$Yqk)ID1lPZF1d@{VY(5oX4nyCp{jUzZBc!`h zp|~sNN{vjdt0hAhVok(@P48nF)qAM$___4l-*`-a6>KfA32;D$A7eP0Z6P!1imSj3 z2%39}7);X7sWVXW*!-tTH!UoRDn0l8=FNyU*2y}CUU5RlZYZOL6x=h0lHXk*cZ+sx zj+(c~C>{tUu*9n%V2N~2BitDE;;}%!WwM{XKpPhm!zCA=qJYTuzxccu`hD^^uiBsY zat)KL3&YmLhvV(cfRE>qzORWZY3bC4?2ehdZJ>kYql0O{HEtHgWGui;S|5)-1sbWmX%9K2KkFzsMq&_j=+ktbrLnM5aXv;Ox4sHr|&xU zX8!?yB9zhI(dS14p4*WSMMVzk=VXW>PI+C57w8q;-I{&#qHXc)qYH45F%4d~&yOf2 zh!;AgltjjrAZ}m=98Lrvuk3lULV}}``)Nc{5wMCPmR*C9jJV1FhShODXC%}MFV8+l zL66<&8oQ?5K(>bekX?a%A-Olp3d~Y|9i(w?p29Z;f+izVXrW67xPQwUCpTztUFxr zu-fp4kgz>3$b$pQJP>u>-{VRZ32nxsZ&a2IhpdJ!Tkc%uBsC@=%g(Em(wdiOV^|qXuABS@TqZ^8!I1v^`MoAN4944QuCYX z)0?p_sGbTjD9fXabLLGaITVDXfS~KKs6%e7;S?3@(D!~nOSzwbquD(RJZT&E*>VzV zes=IowmZPR@_kJFBa%UH2XN2*>x z6|B=xAXm>V;Viw`6)DIs^dWflR+?YN+_+A2N6=+++cCbED*xuIky^SLa<8zuD1eqe zC2!>8}ZakwVZDn2*)ELS*86LcW(S4gcHV$(Q3|_&}$R4%MolAT$GO zPcOL73)}u;o&|=XP~&|$XPy`qk}B-q6jYfjv+PESF6aZ5qi_hU0#N-RkwfW4?8U{t z-Os4g+OG4qS67yVm7}JX=EKEl)}K2Jo6+1KFS6eVJQT5(g^Hun%|!re2h}WBiL2S*#mWRd@XTOjZ7EQs&%O>6R zTKp)!^PI?>jCNIv<}z$Rm9(wGdaE*VQvZ9_^t zS*~z!vQphMP=0=}^;x4dU7L~Xv3Z2#1==CjV&B`)@%+@miOQQ~{tdE*Ntdz9(CU0k zSe7m)B$mOVR#8h2DCY_pmz!ZU5nTgWq|YmBsZ3Hf(A%i*D`Sg@J&jOMeM>%#s| zKE<%^y;Z$(>P-}T5+n;F1^#3Q3($3bKD$#WY`yI962B;D`y#n1RDa9Hsejguuy1Em z60o~4^ldC3*JQsJBhQ-|v=qfXq8&|)l+ODX?APM>Q+(>|#)s5Qz-G}x|L$vR;7{QX zT+yFY!x10|-b`>s0od-=OH%NN^~g|bG)kew-KX?>Sa~qJnzrdX@!j1G@y1Ks(JwMd zSg#tbZdBB@u-uaU@5eo=hFyAEnQT19PnCWa1>#GZ_hly3*A@xe(gva5Qbu2H=vMmi zr7fKTY()%EK}3-d8DJdzR)6#Ulz7ei!EaOChq?2PET{(y=4B-Ldsi$yZBW2Zq zp5i=ySdX#-t^-j#nIx1=rOBD6*tC*)p*Qj2C&;L$tPi>VW$S#`Xa10D!C^?90?xpY zqm#`gL;cA=Do|-+(1+5>mUX`Nd!k&zsD;)sGj6Vl%9z5NpG|si)dW=RBrQIl3=GmY zIQx;kkC%?fXcR#3c^Bupuh8n0iEV51NVVcqMYK%1_&6ikS%U(&XvZbO-`9+9M(Itr z`t}M{%XEl$a#AQ{Fo>n~exYbvp;Yh6Pe?+rDSNy_5O+g$Qw@NWF~XSdWb`75Lp>$t zbn?B+J4jr3nV1yZa1_J-k?erMwnIPE%;Ol4<`7v~T`k#IRPmXzz|V_jV0cKt*2^jo ziLj=2>3GB;xf=AHXTOg+A*^7)Nof;3ot#=*y!*KzB>hi>HMT7*!W2T`WB3w)gCn0I zXCj+89lYUtRiZBZcrT*Zel^9c|LPq*NTlOdjCiLVN%uS0S`%+$PUY|XcZu$Vfhb#V zu}=_0M;+~@RJ%GXUB;z9}>DlEJH(^jk|(jPS#R%!0@u| z=?m<$zd1wsKGCnxz~IwUoxfk){%Re)txaW`pzc{+p;uW97qjG7gps26AeazgsU6kp z+s89*8!dyB?q4UCt_jw6Ur~n11sf7F5%8x2NRLvJ#MvyQ{q+vI_*{JIpc;x+&r-Paeh=w+WK|ySJEm629dciLs zAfO@`h_|8Y?Kb>Aw*8v2;A23`YD?(+$$aT&OoGthXE+t|T&BY#pOj9zjafb%J+Zyo zBsm|#T46*oV49FvIEbwMRGj7?e^*6VPRsS>1Cs*XV_0ELM*l^oZ&Hs8tTTFO)?_I5 z*g0Z*@EWW%Koggs=4Y2!n*+ z5K4{2^R*%i^<^`<*;I9)n}j!g-M2_qk>3CnhVe>2e(_vru=BX!pQ=hx*#%eO0-giY z3Iq^y9T)tVhbCb$@~D8k5wE}jd(YG!o-eg9y;KQD3&BN91>4sBPvX4M1VOsRBkRci z-+g|1cAi+^gzfLl1VOiP#{+(R!>fM2`0Q^vU)x?h7-o4#L<(Y`H4sl-%m_U7M163P z$WajdoU98UH&D0f)q6W6)GG~31|~?o%w5abYnV^JCQ*>sS!Y(1Wb7x#wx~lGE`qyr z8jsJqFJ|q3?P!mSwTnSkSH-)9^_^);!kGqRKg^d3MxHU6k$lRbIp(VZs z9`YRMIcG@5P3WS@y^;^;)#NZQ3ez<8rT2vI_;`!O+5*W#I5Spab?z@VPKXAm7zIb_ z_m>9zYb~&%3PQy@j_am=E*+?slr8GWE^JR5Jw4dvnC`jt3cpAfI#3R*O_8X%l@eV3 zJG`kBp`-kUBj$*H5FS0g$nOsLdWLVm!u35@Y58(j^zqFr8?G%vV$=L(w->wTZK=$X zC^i~s9*c#ll-Py9G3CS(zzjw2(#tP`S9HtE4nK7<@^PNC<4|y+Er{xCv3Z9tJlPL~FGmgC*LU6okqYlM-s}|!QQ&E6|#{05(J@GYPu20mYRcL!LUX1S`GNd&~ncyc~ zj0jEys(ysp%94T@)%9Q)dQj4JquTRBtk%O278*(O=fsg&a`}1%%C(qU(0NT#Eok{V z7_N(`_z&wbJUCK?n@b6i0>vu;iqFFD4mH>NO$Vx$>5>e%)4VG`dUvwq{3y{sbSf}Z zC$QI5o)^^=+`VJ_@;DV9`$`hmDGUC}bBIKlRfpnbnV_NLyfNpdZ9n@NH^!2SxyCiM zSoi**_`g`a4@W<bm*th55Eyci$M>-+s`i4}{HWT8Frd%u&8+_1!Mb^9YkSsAQT24k zM9^_IK@(`mWI?s23(SvR&w8=rTET9wnt{lJ$*zV$G&~<15(z0h86v9iav7A9(kV+X z&P%(ETfEWhsL_nZC_3!EYhQgkd6gpF|9MHrEI|{e-9LF6zP;vLTNOP zVZyhJ)YMIR8jFL2gF9H@-k{V14UqY9GyQr0Mcv}RsYu_)?2b!+Aw44zUk!!3K!a7s{PG)tVeSRzQpYrC)f8zP}qsHo2 z`}}8CQcHY!QoSslhXcGOp6rp>;>_~j>vr`qD;CRD0`mM6Okem^>T9_>zBd+s=Y`;0 z{>kl+>WDV#kOJ4d;W^bmJn?@mnWX;p&pf0qgJ!ZUvEC)e=I5m*-@kHPN>6XHIWY{+ z{bY_rwGuvkE!*0e`eu@|^;D#=yO!Rc3(DcQOSG4`vi(HP|1#3dd?O-{a*+}XXDt`C zI^tj7zn7foWBQtWIIwcIRXQPfKQ~V^TO+fR>qaE?y^*n|kG|zPq=7$uS`MB6f%AWX z91614`kdP!6X+-8uxKI8&PzWgP&v6oo$KxQ&q+*50^TR)7IhT=Av+mcS2>o`4E)y9 z92m_gFUM9VuZAs50CFRt*Kaua?S#FW?gPon{n4fU;$yO=O=_}HWpFQ5-0sJ-JsQ*g zK+;^kiz}9}85pcHd8!C&}`O^0GNZ8*XN%ObO*K)cT01aT3&&rq4tm7KB{?a(6 z5{$yE1bA=+Q#8#?Lsh_gRzkHW!I8dgbo^I8k9t#E*yUrPH)cRtvBcVh3NRQEEQ|?a zaZUX`XxhE>+xO>{*V}S#l;eo>@#PMU#j`aTWf%s;?KV>I!v_ifl@nf1N4Z`hXq!m? zN^K%LX)>2O9B}F#OMkHbH{ms(w({5;%;{iVc0(Fas`tKxGqp%a&Dksd)3b&luSC?q zRiGu1$}T{kH$Cb;VCN{a1M7jw9jc z{s_!O>PmtqT{7h=bH{b5vF7*Rc&y#|vM(G4xxLLqgD?8~YahD%x$G(V31LvsqZ~SH z02*CEB(6pNPLdIamNivQ>w&D{(U^*UD@f?c|=OhnAPMrQq-bepoT*RE{+A49r}!d zNY_Lt@!+W*7p?*+f9<`8slO%f5-+9lcyy$<>&42Ck(hUJ1;c@0M2zy$((6Q6q;EKW z;`WR49@tidnM1J;$8jzWpo( z6Uou9{mLcx+t;Y&2O~b#O87b zI;Cfs!Q8X?E2<4=KQz>_l?%4}`$ps=-7t)nfQi?+n0x`?|6B8HbkbAkXeOb2 zgLl&_`^|dzfaKFE`to_3>%c&%`^7OE-}%o5!+JZOPqvGL(=j<)VV^Wg3|1a5#J?ki z^q~LS-sjc+uir`&^mv{tzF$_jyU@(LB5|`CDt^?m(Q@2*|3%z`^#vxLEUK>(7=;SI zGL%SB5$zBbWvgAc?^rE;_(32}ffPtkqzj5=<}huD$>8?SLa|ZQ588v}-?Z2Yd$8i! zUR>0OKYmZbo8yltr?0Xes;V2!k_<5wRo|Rx$UMI*!ZLcW7LUqemhcMd;gJfL)Py-E zCgXoTxQUOwQZL&whIHd<_v5ZRE!}buCiu}yDj3#%s_$o9l-?wqTDhQkk>*?oo&DQ# zvw5eirK<8-#aZ5s6Vq> z>5?ZGORrLY(ne&6GGYr zWyzCgs=(I+O;YHW)W83=DC!=}4be>uA{f~1HNp+Sa+1!jC>#7)7fQzo1|y#B0~>!J zMO(Mlb~q}_m{Vf4WI>QJu%RVF&*jIw0e+E!x^hP9x2ql0_$!6or+0#9>+#(om-xj4 zmA7_#`q3IKpB2tYvwE6=;<+sb!|T{y0>{LIt=D+#MVM}r{x8c=bMs9|w2adGCw@Rs zIzmFvTGk74qMG?I9yVb#@_dTn&Nn~4G7X-MX8yHzpPY_ua{)wd!3I{10z-PVSt=R- zDXQg{*)bQ=dBa??I_z@BRIo+6l4owSbF*_>flZ^D^zif5oG|O`@k+s@wQ9ksqmk zjPiGt29~UopkweW&%dH;+u~wv6>RnEzZLo+fDoq8+0>3QT!NpP;zoozb ztMKQo7DVlto&!w)_6D7FW_y*>I>x+{v1HUp#CZO+kEq+n1vMeDY|4p7oA>qNjbmgs zE54+JE_=O&IyHqMajp)0if#aVX%W>(=9JK2ge+QV4}2n=EZo25nr$iIPc zdWg|rx_C%mL~vtomx3fAu$D{->qr9JPCS_KbWr|{;`4DQ;y zOde$UQOvc8lm1ORZGMlPu^@)=Q55%hw-5enUUwv32UeeLRTlP6WYLd@n+@QNEfCA( zHp6a8yZlKF)KqPT+!=`$zqokWdU|(0G=Itcviaos%QA5)I<-=zNF}M}cy6~Rl zD&6DaIv+ANyH_bi_3It9NF3w}Y(+G#q$VyNT28@|aAYM-fXQkpNzv$_lMsA*$+5Db z5jzvz$S+X{l2}`nqh)!O;r#voOiH>v6awy&l7y0z{*&(Y>lASaC(k$6ZBa8$?~v0{ z>6r&T3ZH7W^1LCNTwv9ViuHbT$IVYbp z<#6P|g71t_qvb-wFfd{P_A`PHwj34kXZxQQdwpep><+O+TbSl{1$#A5Z+;#@o|ejFsdmuN zzhL&_vfW1frD!l`V|)97sqtg`P@$-aa=n#+XwFiIL!H{b$nmJ>HJ!prr>6T(_I15L z7aG0?9vo#HJE`0_%`_{jDC2yoU$uJDN2sL7k2L=Z)jO3W)I%vV|EX7@NxrMI#-5wyWTixVA}eSKreYw+{`(wtvUv_Y~t*{CG(Atv4UE zX>DEWHbipdy{d(LDwmkwcjZLj%6y{F^xhJ`Se)i?9|IapEPH;eip8PbZuo6AnDt#R_FdGArRdJ!tA#0mnwMw=;zI? z17N~HUo%75_|jCq-86k!XRmPS(lNDilj~oNb4{zD<Ze=Dlh_G8#?)eiLO#E;@FiFpr=jBOt9bm6SX=D%&X#q zvu?z%&zm(Gpy@9g;Q|6(@sp{ioNcweE}v!qyTW0Sr&2S4dTOc`2wW|_M2fim8S|xY zkre)B#3f5}pBz|w87X8@HxL5z!b1AIqs>o=+q^eU@8=#ZFkzd|pn8Zwn#|5e9Gqbv z%WdzbjxSIW@he!QH)V^|OQQ~n%$7K<{AdO-FdGGFKY$2BS3eA*h>|QZ>Xe}@A;e+9 z!_kR9*puLS3}oeH%&u@m0ghc5Ki$G|j^Z)ewbrk@=SNwu5FQelg@Af`u#f>ns91cw9`e^e{*vc<{cc zo`c7Tr-c7mNdJml#9zj-qiytHPvKb4*I-W(F=af$U3+yF1~UaIqNxr-{<42LVAnccRb#0~`Pxi==2(ZBrmjcU}Q_8Vu~`l1_g;Q8?&2TehsM z$_QR1jXk;EV{_YP(lc}fzG#b?A^t|&eb~Uu3OX@6t3W(!rET49QlTOHD?fpx^tW9~ z-f6Mi#Fy;s7g&wXq;yj;!}&-fhgv_^7C~rnOKu=|(2jPnB1Wy{;6>e?oj|Wxu9C=y zvVsG;plDt9GDT%x2zvJ=Pq}yM);C$L^Pm`Guj-Y zMZ(W7@E$uRT6GR7Xd>lKc{)sDLDOaer~5a)^O+#ht>?$x2gy6#S2Oim-@cR+cBrY0 zYaLPjieYurs_;1baW7t9lnims`WBl?yVw4XAV%g19{ARmNd5iB@#_@}<K7Rk?)V zGOV7p_MSUhN#Qk4x}~3CZVeGXnF-2z0DkPt9LnnPtybu-rKLih-xA+?HjCSP7>Fcg(@vLaxu)|4(?4T&_LdMgvR`5}#;trz44M)Vs_#=Odj&&4p% zXd+t5E%q|B*MIqXAEWij04h{7o>ln2mQ4`?Ju2y9SmNpGu4eT`KZ~a5Io1HxOh?FQ ze(6q{NZ9-~k>)YFRY*BUp)cvpq3~EABdC;6Li{x97s*d{89gWV>+MUQ9hbl5?s@F+ zlVf&!IIJf{DJrV(1ssmD_+U{-F&>}-T|oYgjhZZ}9xx2QCeHFl715*E0Z+uo5f;i< z;E(}|&}W@a_^+Ebf7YqcQS>3NZCnQsUA1<8WVhl_$;-6AhI%dWvopdr2TZoV6u0X; zI72&2BW6Uf0JJ8vCUz1Xo!65aU$pG? z{8DqC35NZXFxTOj)XpEQ1hd}*z?e(~x_qny+tV-eeyn%c()UmmSCyehaTw25$$CLf zmR~$)w*cQ%SbQu68y2#!5cMEX7qj%H6o=H%4RKTHm6;JnSBNC#|NUS^)ENCr4jp)c zBm9SMbik78=NjViLz#8H9ls8}Z+dc8{-SUJx%zsZ?#^b?wTG1oOVpy6Jteoqq)#6W zSV#p?wz&5$eRGgZf(23bw8kvwJ*Drsjt7U9)1eVzY(CqU;)H|#vzXi*0&bSNSWwS* zf7nb(Y3b<=p!TVW|GW4N(~ISQkc3K^=eO@tci#B(OE}Si zh9v1Ft z5&)!q@Bw3LzcogAmgm98mE4svC5446=l0pPdO%zVA#aISDf+%byN=0j)DFar2iK~+sTbQ;X70V2O;(FABtaFtEb>X+6d_NJc0&4z3=WcYf>pv5CPL&XlGm*Gp`>V#9pqxeTi*ne~f=J@< zzHFwUw2Nj?RyM6BV;{=&fIT;Wdv0?cs6k)7r-e%j?LZj>c7fETMy1k1fBR*sLJa70 zRp-{VFt2331aUlswf?4O+Ox1iFj$<9uK`i~#lg}_-+8UBy!mu}mYc%M11sxQK^(!x z|zip0B(Q z4kSg{ChYQ95*dqOwhDxxxA$RPQcC)hyf(-gENotskJQ%@FMdmBKd?}#tWOyWn}o>D zD`4=eaE@g1TWua*IHt$F!azF?XIQ_vsN**gda#V|@*@hBATJmXr8r?khdu1?w4Np7 z8d6|V1j;`1ykXFA>Kl~g-(akOO6A+q6Pt53pFKvf!U~rY!?TX&(+)|a-GMSVFqr)2`xVpe^grhdVpnpV@IoC2!>NA=>3{) z$-@TI@f8ivoR9sy+va_cn9tVO453zXQ_GYWO6kQwLxzW?Xatw|O=>)Hw>%%0@C z2;AIZwOplckG5QzP@z8;`&h+U=#YlCG5(#c{f9?snORfZI$=mXc)NLd~i3!=^ngS7qrKx*-yH9SuLY%36vzb& zlc^l_uG$$_QdJbACjpXvG63X+RQsvW2Nc&Kg`k43zIA3u8nTWn9-31nR8%!mSQ8FZ zTHx7L!0TzL>+mxt+wEx`pf{HeIm4glBX#UO>K=lFy%Lo-VKp#y|H%-L*1#N~t#YQe z+yo5`ogY?Ehga{8i!gjQnA%una>M1d>?!K%VFKihhVLGyS17(nr+3 z_J9dYVabPF)#F2=&>yK*qz5MTGwCoxg17NvNlck%OlAh{gB#~E$S6j2pwI^^A!*cA z{gz-&-rU|37~$kmQl(uI2G0eBun_0yy5Dois}At8KEx z^rRt~p%JhHZ3X;<7zILz=D)|1=bA)fwAUxpra}Jv&f#ts@FMf$@MA|{Xdjq#WS;e^ z%I^UBfYgv%_ifTFDI3;IHGG`2Gen7MS+uWB)=K!jd;&ja9sha>JOV3synl$vo|SIM zQF%vNiFo-8Oz-c(`tfk2y*8iYMcaoGzUTX-{0un5%~O_4{4?!WfWkDXxNFsn=LPY} z1tc7%8%=dFbp^qBsMHqCJrXr7Lsat+!~y^?sE8c?LHZ6Azl+(Ndu4#m3dPIpAjwlLBRd#4J=J3@@955u_iTj7EmT zC){`5dY#WWl)Y^Ry?rGjFW=M8l*noQZ+OCcyVG9sY;y2mykbI*e5t2wL?iEGw<%Fn zZ5lpbk@e5KK?XYiJ3>j}OPj}6E{wmG2)9p%;>2(IKZ&mqcGxYpNaH(N6;v?5PZmHY zZ9%V5R;*b5EWe{xwG5%C_X|zGT0LxWaB${Y+?Y_CYWu|p!^uq%70D$ilKdnrhfX3l zryymD7ZUDCKW_2RXz49;?~Pn~l`1_ZFlYOcFkyG>lPCRVN_i-PiKIy;iJv&x#P3!a zGq)qQ3!0fuFBg|gdV!!w&?cuM;(FQl~w^sgZcJI*>;jO zI=0S@9h|NsVLeZ&dUd?~lTrIek;z*I->bOe&^*Y zWn{vCg$my9(9z6Y0(=h*@L^CrV0UHyf=Zfe&)@)8IV@W@r4PzQrdgp1BXxJTK-sYE zMOEVZ40i#Y7z zD9*_G$5p;mvf4;2K{WdD$Gd5Ui)e}~t$tj1^5Wb64C@@5NMzLd>GIk%>XP zoZ8hX;JM*njuq0v`*H)f!IOWt<(>^1Yejw|urQ$nU|8G#LD*S_HTlMUpBOk0WDKN* zZHyEorQ6XVDIn4%Eg;=6>F(|Zr36H2kPc~(Zd8!&dM^L>{o;Q2ykf`2bsRf)=J)*7 zNB8uuj!oxl;IH$A!HPkR&%dTaCOCd6-rr&Gs6NHe5_kt$zxQMieQi-^?E&3a2N7Pq z+v{c(`{PE!;rk_t?9z~gN5S|Njpokt12d;BW%DKHeW#rdEnx{8iy`*gAI$g}pDbm( zS$E7cs)Us@V__l4YzRPsgzA+BEy0iVY{p7-l_TqO15E%+$#XL5FevQp_$m$xhvO!c zxG2AK;-*g=K%qcgKj|s5T$g%s65DRRZb+i8R7>;&(ydt$xP(s+;t2ASTQosx3`#8J z3OgO{A$VBvc`u|PTH~6arwThCl6#3ZA~~jyJqpDr*Dx{ZDX^Prl*Uny9VDJ3b>qZ*%6+9gXT&#qugYV z-sr*G{=vIidIa>fU^%T4fnH4<4o}aK?Pp34-Q@Py68#QKSqZo@%)Pa1QFGp;cD;_h zF7RFTaj^$X$2|_S? zF<(1rzkmSpMLzZ4XZss!p{ z3h?S^f~I24q@h^7JyV0a6_gjMlI>n_sAJ`ldbrG!`RPg{JA2F}K?t@O8WwHXm{w~B zdK!L2(qj~Fp4cc5PtBD1Vgg+-5cDr;*^`sY_PY$(5XE5Kn8k*4&EPq`7y%_`!_xExpU*9UE5Z2<{3!d`7euDIPNhsG9{Pkz$R7%PxH-bi?Pw3Xoiq`Z5* z1bl*mzX}t8Kx7o!P(f1?)NQ1mkt*)PO0w@Bsa5}Ib89tayrMcW>W>>tl18sJ$?UUG zT4Ie=m#cb1ycu(MI$eMDpGNMj-+E1JnJ+!c?qRq&9zu&$-55nGGrn&Y>**@f2ge>7 ztfuDib6OdB`Ihbu9}eYcN7>6}OW8dfc~Gk1^z&>h^u<@6%d)hgaI*39%Jm%sj$k*I zN)RmEnlI$ddrbOkwAr?H0cREN>F>wtA1!>!&2hYe=sAKwtnhxD?@c6hjB#lgB4w=A zuejVRiSeDFg<(K)R3HUT{U0paZBm;L@l^(E#Wqzd{k38Xe!ZLuw8B92!pY_#{Itoh zyXeO8fYF}Lk5ZJX`^OJsk`I%^CLDmeoRtMKw@4wa1^yV}Se;b`CK4Y|-$>HDeO?MZ zck@1+eRT85m3L^d)4r@XH*bB1j1N92%t>ZUr)JC%^~0r|xO;o4cR_Z!=-j*|^b08~ zF+sSjM4tD&(DbK>u~Jt;Xn+wZB#1)t!UM2A0QP|Ef3Xkc5S`IaYxR|jV;FksIK&Ud zx_h9NvzlQD?_POy=H#QLY$rTt1=C%>AqhtP=?H93TGXG{T&+xj(^j%ELMvKo#F60s z0Rd#6 zG`GBxw2bm-q0qRQtge)GIRS(4Df3dcqD*Y(F^M(g^g`#+)E~_f*hrOTyHyumaT}`i z^%=f1-_}8h{k2Akjrga(KZ#xqZ|>k!y&L*LoyuD+Dz169<-RpqA=60zGOqz=8^}i$ zwDWTAhA*bwOe$GOKm6r2?fAZmyz3k3D=gGw)IquX{^7H3)S5S+Gg8}6ov=zF9U&24 zpQEkzT`Ab$lu=EBcpOE*VA!T8^I16W*nMB^x&ObMTOi>Cu;N}svxXil(+93`VHFO{ zH5H_yWQfnBC^=D42Ik{e#%1E&sX3`Nds}uM* zgB9@b3xvfc{Op+5cxJ3(6?q#&*;hE|=_oN8^j80A&pFCyMtw{48vguITO{?pH~3q2 z#z0UW$$!Q zY~R0Q|L2P%Zaz1&v~-@OWo=)N`akWTRG>RrhTtMO{uDJa7sxRP_r&Nix#@!!-HE;}aig`-ih|9-)eM*{kn9W;N6sn@o(8gpVgTZX`L_ronE7s3YfJ1~^rw=&QQzn5 zp~3Do6vV2kS_I+ADXY!&>O2ty64J!0vH;C%Zc5V~k7{w{?`qvVuiF~Vv)Ow=>F!Q4=|vjh8RJY_lDm|r0$dvg#1N%mguj%G zE9w4|XAG$P>?by?rL1+JS8^mk(VN75v+J)_oP=IKK3Xb5r-?lw?er+D(c~(!<0aYo z(iscC*Hc67!bIQ|Ak91F(^|_+Tb>S~c%eTKFyJnmdUR2`_BayU76}_;<}%eip2L14 zZcZH}vosiLN)^j?8UF2AMtg`}0q^|hbeE#xvMfplFx$L%Y6oS?-Q%x@gK4r;k}VHx z;7XF8`9e;thby(ky2*Kq_iK7%8L|ssBV;6I6>TLFMY-$x`umGyPLp^2jGVo>!?3Ke z)>_f;POmHT`1XWPku#c5Pf6mnF@Hi=c0+RWgd{6Y#&AhM?MMJRhoIORyNbg-!9{EC zz32(WYf}8BAg<1;qViDuK&eZWhN^4)iRuT7o()LjCwUJrMWm1iwwKmi`#zteJnha( zw1x?qkNq)dYq-3Bu`YStQio3+yuc5|K!m!XSz=;X4LU*(2EouMC{Ob99MSeujRvlr zE3Yqi7sY5T1rg!?<>j=V4})}4>W?52#MF6C*FxTvEP)T$WJDgD{n(l`R=S_a zvBrDo-l-Y>gl=dhn4bnPQ0M=FryTd)B-C6ImL+jCpa1N7%a+1p-<&g{r<1823BC_6 zmyP_+o*^Hj@wY?-{qvM4clpBuNU%aKzKJBMG{jdJ%lF(N?4OT`3wK`>z@^YK(Z(cf zWp+^n0l|&H<>Ws4oR);*RU3C&M6j}{`71A#CmtNyL}IBISA3I84&+djglH;-hO){ds5dzy%XiPdrGN%5u?f8GHGF^ksTI|W_?f2V~>Ae z52XnQchR*ZtUsga(S4Gzz++4$9W}BtGG?ivN5cx3JW&OO(`_AzX&kj8Ns8Wk+Cy1l zS@!F=6U_0*O>8V6{?vvP9OHWPM^2660snl0# zmNsH3c?$8uAHD!1P=twg*Wug6%0>(H`)b!ejxYWY&ip9C{bB~K!8Jt>=x6IxXnffY z!0L&n_`buVvJzGI38?!YUF`J!gaU0S3tVcO71xx}wG0l2BYKA8hc{d&Zv-Rc`3+FKVo`wi$p09EsU@xYhBb_z z5)}|Wz!u&57UXnGz`(-z|;{w&Ew!nM@2r+4Ch?=^}Y6ZW0{o99vvS)c^kG%&HH2WMJxn~USh%IA$ z181CU-gTB%2sX%PnsJ8_B4B_o2MYmS>4F4;YrQBZfD4Cw^V5Q8flw;q7)2HnOszyw zO|_ClZBpW|tXR~!Kp2nsmcAS^u9r?lEIa6k6mlo;#Qrn~a05#P;gD7%z~TSy_A8>_ z!ozb_*sbd;37J(uT)~mHiVz*FaYUhcFLop=Yv;Mg z!X!K0;ryAwU+%`@pT3=eYSknz@F^ms<4mHVh>@l8d84X0Z2w}VgUNe zVJX0K6&+!}dVwOe-spjxGKYtMzcS%#zQv#$&ouDyjCY_>!I9*|>L0P&c}0bwZd;|M zC!MsGGYAGszXV=EDpzJWHaHriENxaPPee9#4rsd%mf_5_lK!>q6}l&$f=@VhdtGL- zCHR19PA78(T^??CAt#jHgxjtI>vW_Loof+tU+$Dfeg9QG{QTX#T>JpZi~WNORYyj% zi6d?rc)DJ@!K*UXm>=a{e!-6f0ZAPu!{#mvQLOe}(o*sk#sNaELK1tA-g=?LAK7L_ ztvMQp=FhgPH(QI1inT>~C1Q!vCc zVTD3_)O&4qE6IG?u1~o zd0@+Lw?a!F-+W9umF3~y=kq^Gw8;@SHcwQVf^~ay`g?P<#+u|wn|nhU>Ws-pD5pN~ z1hW}$wM@7h4KRo#;d5zPwtu;M|M79`R@RF^=GUJ?<>?(Z`ai&X-v}lq4{mdBhRstF zM{%uQ1@QJA2vi{>8r44gJk@Kkx3rY!D%#w%)&CZ)W#|XoK?g53COG7#+cF!M+rr3R z9WEKMEo+>*yOc&5G4u!5vTKf|Q(cm2sS@yUsy1bxlZgzrxT%{A-H?$2_7MveA>Fh6kuE>#3FGm1Y!s z)2F)i7VOmVT(3UP2gtdgMDf9GiTU_grL0S+FiqcK`o@>*^j8N5R+dihBpu2}c19B& z=~+r$nNm)zLdygFW&55Dwf}uRJXp8CPAM4u4VSL>;HiQ6!D*wDl}x0tjGx_rrj!%*?#BV`?c^xUYAY~G3KejcC{qP_2cT8Kf-hOLluIp zUf9iUvvQ!x^(0Y|Jp8ftYTvon3IpYDCo18kYs6T-O0zErYAC$G_v*YVMstdo>!L*} z@?nybt6IdTa>!iwV<#n4scs1wtTYPoc-~__O*i#t@FI&eDI$%SulZX%ewgu80$^I? z0*9Z|YDs4?bwl|d+g7p`1GT1zRRO~&+9gM%OKK(^{_%AJ2JeXxd*E8L(Z{X|gukb3 zI?)S}z_+347!gKTsyLXMk3pKGlM)a~1*uS~NX)LPywp;R`OA%C?js(XiI38>p)bIF zwzD6cWn5Mx;fkpq`@FQNPIxbiqzI-cIX{W(+u#&>Y{$aF$=FTC`=~vfjQhB>9~EsL zH7R+lxyqnSmA?4G2)SwUj&-<@Z5~l-{G*6p?2<;rrvktQQA>>rkw^ejMHddx?p$E800x7SqCWh-z)@|GM5Ix z0u#}Y=M>n%hA+6(FdL5hx6L;!r;GI>yvHLScP19)zM}rx2zW=CVH?keJDc@^>Aj{8 zjr=#k)HOXAXelOH3<#1o6?|Xe)*m@R63qtSOOS4?$m$eWA)dIb90|Gw#n}_62H0Ly zf%D2&4^S)>p;}jk)*_^Mry>lE~{dfJ`V|@=9z~!I6TTl)ITy@w_-7M72 z#kY$ZZQ?D}1%P6VJ|JRMazxx$n%R$nKp8REO;_>Mvg&IsN$$R4s|d!OEsiw)U-%8) zlOe541ZEPWSDKaXS=2qzn>8u?j)0Sv^KKk-WB=`74?8)}dLEwU-=z^PZ3Bt(E8>P{ zp0PGeVm+2NPgxdg($sV0TRexY=9?JoJc%~CHI7+q7n5XO9pWPxDsRl_i)F+F({wks zEsZ~Rd^Hhs_ZF)1`HVZU^_Gf30)*5WDB%zrSwGG;UAl?s|K-V=P?9t1A9O|!I7*B@ zO49tR$AAEnZPUb0MBWt?1KYP-@gmoUjAuRx9->4=vgfygM>}^klMRs5aGi+q@ts&_ z3a)aYr*C|s#qxptni|~I83;khkTV|Ml~M|1ZiBH{J9jlTOrgg(E> zU+%l*@O$yG709H^*C@3TT@nm;ON>=hl~||_fm`S995*c-9#E5NH*D{W)DshYO>V@J*YBFc zF&a30qshtqR9MF{f~VLK;gYeF3fb9*+{Jr&?`@YMK}@LX{8DXANi9stNFa3EC=laC zI)j~?BbRW44zLN8BM{8ARl%@q=~r2gzBFcU9$G$HseJJodI%4P0dW*K^`&$D@#MwF zCr2NVKTivM2&E?>I;+ANul!zEY2oz4GK$&Lb2Hk^mI|NF9;wk?Wpl=2ivH24S#zX5IO%iM`WB=EqroR%XQ z{9T0aip|2Ajil!;%v)XHIR&w=k{ZF~)H;R4W6j4?7)i)M@p%PvUHwPm&Ftm52nsF8 zsy4CYVJHQ%KEA}VInv6D`N=$g_X-|yB{L9(tqN3nqz8wyro!4|E#&9*-wZ{wC&Q@n z0Si)iZv{NmGES=m`|n3fkDD}Xfj_ayDDO~2=)tk3B)he1?Z$^+A}!ue!(4CQ8fsv6 zgu<|XYY1o|%TiM@(Vy3p;Y$J9lBm9CZ_zB*sru9nBqwi`+Qp`8WmzJ~$w=bfP)&!! z*EpyB@dF<`)=V1T(*xq>H3egU5&>$bK)Fym4rwjoe*x;Duw6Ld)*?ChcK-sfrK=Gr z=-e^zd}i_9yXR87^t9+4>DZ z`|Ni-4tu4;c-l*&&x5YVIXS|KUNqNJ6bRseA_+r5WW*ArT)2nPswAI?CkCHn3psi7r%1G4o}nw z#5X0@1f=%+%iTC1J0VRewLX?A>Sg{t9y{J72~|)i5X44YF0g%|LQIT&(?3+> zcI;aen8SVVTQQl(=0wCOx0 zlR>au`ogrgxSF3f^ZI8F&yrOlzwLvLT)q2E&qez*9xko!Q!A9Y{g4)M>=JxmmOx0; z*Tw#m^Vjrzs?Usa^JSx~)xs4~rpw_a%@TLUxXaU2aW`C^9QU*$Jq0V5-J(c3XUsi( zHkFRon?VmAI8I;{y-sF0F^a0Kc#Hj~aj$s$lH6G{fufw2Sn?v7by@yZa*fHHtZgl= zmc*;#+=iAvE1X=@$72JiG2o%oAu;sp^24a z2{YH){c)Dg4qR#j3ykQE>+`R;hCD=N~ zT`y}imi4~eco}ZC8lEu;^@jgAWF;~DZI;FHx1)z07xcvWt;6f=svIw#`H!~N!Ld$K z$%jLyB~H5@ekPLmlk%NB_akm+;z1>*VLj>~bYd!xIg~@m&UDX5Y)}^0p9JLMbk5P* zn`HVla>>g^CZ=@d_2cgZy0EWcJoS%3(>QjYH!;fw_QTc4q}(IWAtRh|YnaonxePC;wgrGcP~9%pUB@k=%lF)pYr~PmZ~$XggeG1a-bHs}yc&{t&%Je1 zAh5AOUHZr%AmBEncGbSbsn2)5#(Fu@o;^rlXGpx(ZC<1}rX{Sa)tkUAX~rUjzOBFi zzV5M){6?A7kPUCuXB^Ayi4bEZzZAp8Tkc~9&yV%kOqtEt@M_X95q_C&=0fyhh890f zhtvA&GIhpLXWN3xxYa*)BPr)1kyWyokS@1eieNZA$)r<9CU z55y=$%`Z?YWjxPWcweUsjvERS2`LVspEVg>pEJwgIP88pZ2QFtyPpvSr$+9g>|>)I zhf2-@kb}R145Zv!$~V;7%QpgDjiTv1FXtjw3ByEiY9VrhpKZT#h~Exx>o{(_6S?)x z_B_)Sy8hUyVkj103wi85dRGC^b1` z3h_6dul<;sbI###ZvS*IO@aqe_DM1Qkc34)qm!1TZG@LpKVzI#UsC;MAG&DU*=}5^ z9wx$P`OK~8cE7A4!qA-b+uwRoY%}YDJ_s2zrM&-J z8qQ3jsB~q;Apc0oVP*Fl0orWQB%MJn^H=kKRUa+blhy+0??5F5PLsMS$2*3K!;q&A z7M;yha4;yfk?Ctu`p*3?m$|LuoOM(BD_A4X7P+irpCG^LlV&XJYa;WmMU~Ci+XmCA zR?5ZKxQ;*4{LJ$>OSYG#f0Ax_kek_nCN`Mypz;+zs{Ty#FnwpztG7wLt^GTw!ahOwdP|d#Nx(% z&cAxN?(Tl3X~N!{sB8D_h2XnyYJC9y2h7dV5jx!3bD2`vL-(mU4e!_*4TBghW$z?g z=iisim}iXoWk<=JAc|;M5YnEf_QiSdcz?D($~)fiA#}eB-89mUs?}^8kBM!Ch6K`r zr(9PeH5i?zzc+G!)PO-m)t4ep#T)4#(E4J$z(zg@RI>jX8tviiZhl4Z>gS1ucPU4q z8M21AK@H4l$rcmoku7*E1To4GI_zL@%RBJXHt6CiIJ?=qIVt!0)%Lex_si+k$>YV$ zNG=zAEOhF3ySA^fmJfW=u^S8@WXh4j!JI5<5G>6S=X=9!lg*cQ3J>wXeT;K#$S?)~ z4k)>12LQsG0A}i04?dbV=fNkTn8EGJ-p2Dg(x9h|lqhn%xmjEsq~|P5&GPFk z06201pgYJVo(wZEW_HUT6%lIHh;jf#`-+10{=U@I%=L3LK=!@-HJeJrkm9?rErQ-Xein_BtvP7lrX38P!;jm#J z%7v0R+8$hFw{V>#H%kcQdnKM9z)Z=pIMr|M>kWR+y|-DWgH0h+NMPsezE)F1aI?e6 zMvj?b24I!?8PO8@+mU!8Vx|~$y3R1ZQWq?3gCn=;1rN(<>Uc>7Bnpg0O^;kk2S_T4 z)gr{BtA6i6O+wccqJ90T_ljOGR7EbJ(IOrWCL8ijYRdXC*(l!f z)M!E($_(lLV;h9_|J|(H{54mBEO$$yDj;YlY3%zf785DfG~J(-=y+5pQzGuZ zD-DpqQDh=+C%+$H?=MI;@Fwf zMm%^@r_xC>uDQRwq!*1OlnZsU2ttu3SVOpZ?tTtlcHNT9UZp0?R&(r+WQGVFe%8~q zI~nn|x_++8E=dNVd*eioKbUBT42be*!!tv>XE`4sr6AB**l&Qei2N$}5&{7HG??&& zjd8H_Z6hH)Y{-Am!tVgzYBe!|KrU1ope2$@;L^7PXVlmWe`4r88-}+DkR_R z7fFl-fUN$(D)~f#CwR88DE(}xq!g4-UnvX3Hwys_-|qoXmXXBTat{j=F&GM+#mz{B z%79JD;;`_gpcKfZA>1$_fZ+Mt3E(t>jcq*vP$H95=;WMCAR2tqcZ>?fGzL(Q6eXxy zRSYHmc^EMgV)Rws|#mAzE65{dT)rF|+ z7hueOBg}u_;U5bixsr{j=b1rh%tIMh072D0+Z^D?y+y}Bijn|Gi8F#sFA)HDk}zL| z0-!!-9D^kPXGM~{f~i_&D%D?!v)ya@EXwktPC80 zZt~ZXz>t_dTZEAbT=&d*Fp%8Z;=2KPP#_xA(7_1Ena)({LjS;65FZS=1Y;WYa5F(3 z0WlE9X$dHPyu&*Hx>}Mc@)Cjt2bqvI)Ox%{R!6S+9u08E zV4H$yiCAExAtRohmEvZpiUW63#75a6F-_oj=o)lppN$L`1mLzG`T{TQq7-C+v6-VV zosgCb0P6slOBnHsl_&iGu;*V(nJv08SQsSGFx!L@v=j_v3@m-mSqd7eOijNUO@6a*( z4}TYn2JtN-)tJIQ04PqZ60|M~3df(D#iE2~Iyps9V0X?+<%a;^*0KZ;pB#WHi%9qn z+POxEM%?q7qTdblAA{f!DVU5gKqG!%7lo{r_fSDVOeFy9oSG#yi$95nJt;k0;+@2r zVK=Z1GpT38P$m#qx42v<#sB|1_8$UVI+a4Re?tmDbM?`rq5kH!u^=cHXekZ^tR%Vm zOc4gDGE^kM*3_W_ULN^X$tV@t&E`)CT?=|zaNw6tKqeQEiX$Nh^emgoKVFd(5(`*a zVIP2>jbqYdgYN#u1pg`*S_CY>bmUk0?n;yy9A2{v3@WjS8C z_7K(%3!9M-6@u50N|}@))k+{?zFTQsXkH9vumDMO)E3GP`)GNv$EEW8?0 zXnq6^7E62>Eg3WdXbtd1@^U6t$ipgR5RN*`0u%CY?g1lWhs=Y7`C|YGJh=R%d_d|U z75tC`fQRBi;4%i50O?d5MFuXEWAxOKV?)4yqr0I zafRIfo=N2$&@ue)C)JA>=)d>=y?!H$_rIS=?+QTw^NbY#UJdI55!pnS|1V?wdpso~ z?BWoXf3L0jkTZMxQ<(l%LI@gDgBo-*?Ucx=h2!FDl(X!H^s2e^ZPkIq)%P_uzbvRV zEO$}0|NY|u0He&Z%Y?H0lM;OUM5Y-+|G0cE4VNK+f(WpSC+V4_G(FCq1^xj4D2}L6 zCNiBE=3`;7ofz)n``6HmHej-K7{kZD%VCDm{x{VYk?2@pG?&5|KorD*?pf#^c$hsd z3yh2&o;>o8|Cd#L*((RalLz)4hnI5i6F^WCIQ*~y7&xHC9*R&n2Be!2&Z0IK*uu1N=)#pb^BKg^96PQ2j_G(EAMC>HupJXkq-Y zxD-Ab@^63s*Lw#J$!Ztv)dc-=0iTV8G=3tmuTD!?NC2249M~XcQu&>!s$6+FKbvC^ zrU4+_wWvsf%1`w?Hdnk`<~};Us(uQQ4v5%Dd=Dtm)jj%DN;reMkVIU zheALjj^WIqzXJt_^nb`VIrw>MbDIHYhhi*5A1M_Hy3>`)|2L-wC1h5yJNP;$)e#n) zf6Mosf0(b&o)1;b*=W+UFywbjxpszkd-L(%zV(ZKQU~|@asiSd9FXg0#;*}DefWkU zj@WYPd(Hi^Gu8BbNJ8{{^j$v^0ARxChqpN_ce^M#fZ~kHVv#X1Z;?f4EJc74+%6X| zDHiisSkhuEh`eqavn|*BeE&G1t1+Knknu-Xa~O!v1)q3|>_^;ljatdD z5MO6z@@C%jf|v^`n-k^ISEly!-c;8Fg^BHaBo4O>%Yy6n4IIz|qnjZyS&5 zBj;T0uW1&jOHv1?x+xZF7FhxJlFw(>yuIirvHvaXHeDIxxw<&CMzmD$R`h1N_;Rn} zu}sbHBL+0UW{jwd3b59ruG?;mBWU<#VG8W1AmkA%x;FKFuV|#tt|V@y2gatEwTBdD zJld@K$HL*wuZF{B?)Q(am5IM8{FSiatcrucPzr+G66v0F;=-Gxe={dhee?3odI90q zpFbYSx8Clp&v~Nd`q4l@X6z1QuIZAkMdK!NOj@p)T^KICCF1m0Hp@lSE-Q9El$H^q zRp8j-b2-=lZ4B#kD|htuerwQkB5s%XSmkUc6Ect0m*U%%6(xtiUPK#ZJim^O2jtfp zA@Vl?8ndGMOyS)xoRW7PrCNg45n2Fk&w)WO50Z9!p+)0%_OY_=`jF=HX1IjOPqgqC z2XFDMZJ6}W?E8nyA}8;0_kHk}FVQYYxN?lcw_?@N(jI;ygmM*T(v7jmcQ-|uMgJgvikaT7@DL=|J#1}2btNN0qUj` z48?O;#qYQ-%5hYt!LdrhPRTL~baPECDc<|AI0|gIjLA?eOyug8C3V8fEOc%Mw$>2J2p z3k3?`6seUDrRa{}&*|h#X_KhHHnKf50F)Y(q5B(shP_=K#re(qS4(eg?!3OsY`JK{ z6Mud5SUBF+qvSV#1X3e6`B1!Np&&Uq$2dw-lgM>_D1MNop|TCw7)B{gzvI81~A1~HKU6GRPG$>sF> ztuF9T>DX*e%-T-j!)@}*@}$V%4%DNgt;g*4>8*%meMf0lzV}00A4=$8cC}1&uRn!} zYzk1u?N|UB3duymL~MU-vp87_A>t&Yuq{IfQ%RIAiwxnigfn&HxBVmo@3=i zOiae2OtY`4iQ9<^3|ld6K=Ag3kXxhufNn}omkK?#91C0$%ft?M=Jo_M(q_u4Tq7e( z*lh#s5Q2v7ihH+x+0BW!tp{FmxOi$Quvg4a$3AbuZ;sm8nQ>N|WoW92dox`TFLxag z+qcHld;;D!fi{{pf^gTPm6({d$m>Cxs|21|)Adb^39fZY+Gc0Q9MN~YHYdY7WV)=1 z?-gZ=@ausv4rG};BVaqqCOLjN0;hrp-|@TESJf+p;X1d^%k= zJXErf$pby1Y!R9zQ3Y=}?<-8&|RUISJ-` zp$JoBE?-2Hbe^30L#>Aet* zXwnWrd4Fh~VRm2Fy58l6j16}w$b%b(Z12JUTv?5)An1{ep=JpUe>@&oCUQDU@pIa$ zM1`U^l3=H;!{Fwohma*oC!Ydv*HkcvUoJyM&IibGv~;GK-Let~JifP(Ln4 z{GL<$#+S-|uN@x^lj5{{h@cnyjF%Bj8*CE{g}pP7e(IN)GJjPt0^ zD5v!w{fj=>So#B2`_2Bj1ovkI=6m&GN^R;Ymf2$z2CEGfcSDJ3)M^DPiL6m4dd4oU zOM4i6_5qjAyVt5?zY=ycaAQg+0l5lX*@_7^6Hv$tOsV$0&3N}j z{BF9)Qx(O`dj(;a2F_d-Di%2$=3H1I*nXy8`+-ObqY z+Q^x*z-@|U?Xf5OhDWp%vJZ*g$(NJY8vijyb9cL6YphuKiU(hc&CK>IIBZ6+O0q1@ zd+j-mA1G$^2Ls>O90ONujV<#N`%ke#p9&RLie#z4b#z;i4%u>w%LXS_I~zOH zRC7+FEwi4t+~@aqu1A|TBAzo0BJVUF$j8YgHB7r&e;S__OB~&u>Fg;8Q5$epCqPm& znP!|1@Tv5u6eh~4pkYX3Y9#8Pguk2O#vhE0C25F-p5OlVT9|C*HWdF2o8Dz8744nc z&K!**2|i5Qx+AENF#iE|6}oU26Nf?}sl$(D7yDf__}1FjqfLtNt2~0w9?)(sDTNA2 zehhluL`1#+g<6=v5|4v3xWfL9IV2c>?b{8Q`%A0-9Yhy1l>g+0bBE@fa(K zz?RI^RuwXJ$wMLT4)N(-8gPqFm8eqh#FcMWdl%JIBx&0^FS+}531$r#K!O6naEYPV zC)wwpPLL}m&r>ydj-vvSw(nC!KBfM~`&aw=tWTEYg0B{JKV_Lkyt6e*!H&nnd<&I6_*mV3 zH}iFPw<^P?AYT=i95chut<6d6uylA~CWL3JUaQ{}JE`Gt!D(#ti|Yd9(KlekCWXov zC9v?ev(P#gXA7=Q56m>SUq`(z&r2)?e)!Mnp5vH>E0`+8Jn z5e)QbcP|w@scyaoh|GJ(PMf`f)AL;^c79+i8?1<&rqy~6zlAW4+qCQnUX?mj_rD&T zsDh6zVG<_Iz47dRtW<_G{i}}VDdCeqcjYCOWH5l9jwsUkDPT}vS$ z5jpu?Ax$pr>(Ohy<9buSZf)7U@4X=hOKcRqRr_h*`D~u6;|^?cyZq<;@G~tZTO+i! z4c&~KGp$-jx3mt^)7@fiKe>MX%5LP>kTQ5J$}AyaY_fviMHeF49S>NL3Ml$aat&V~ zgC)qguOfeD7{2+;|1gP~wKP3>aTU-Q516)X&xd67)ZOx# z4#tdbJ8+1P2pY~u8OGd+EDQbhyEypKuE>8IuDG8emjvb678yz8P2aS(o2->lsA_I+ z)@CA^ejQ-ofxtN&ctP&ecm8a>C^{hV1tOU{ziPACaI2Y|s{-Oe?bp2V29-2-DIw-{ zK$+P*n7&buVwV0tI~{mz)@1L=`Syk{o#`js@kT4L^EZxMGa|7y+s3jr9T=uB7>y&5 zg%Z4Msh0?nUcTzJv#uQyoF+IJGhPQ}6od|pMS&rl@xXTSQGxFr={KMK#v5%L;g`2} zy&{vX@Q~daF8HWC9FZn8uOoGft9stO&#_kSm7QDnl7os>`NX1likOoud!pQ z(Hm1LVSzF8Csl;`_I}N>rn|Ol-{u&@37fK)K+$L?p1;Y|}S0ACr^i zLoqS394bDllM~e1%H=0^?Cv^uOsR4`(h3xc@GbuA&`y@)j>el{;;wsM?d@EMew)RW zMyX+FJjJe^??%uU=4-Rp&L4dbwkuNt2RIcevEU*P83Aj5bC{jFK~Y^n!a`X2AY0=A z=Wi*3|3u%7uo-DGoZeiA@zIk1sJAip@1w98r_C>T-tIX$$MsPUVrQJB$f_fewi7Ru zJboL~hDGr%xr@3v2&WHgm#@%-c3N;1kKh6(Al!MdoPS_xL*v>Kd*u%=Dt^OLY8Af| zp`*OEl~Q)uSZ!y(vV~^QWYL&OD}P^{IRYev9Usk?ef)|??c+|N`wFRgQ-8*I=aqZC*Cd+tf1uSNx)NUK~=KU zn_5zG6qfhY2+9bndCvzx?g0clG`<>;g=jYQjB_l%rW5=-A$Kr#ZC`@heVnXwg7xzw zQf4hIDgV&-2i8nxAe@85a0! zk`#FR*<{R$xZ^TMtO@HVa5VqqT1`dGc~$LEQt3#6|FhEE(*mMhjv@$NL{(49QZLrg zA3`_$B~!Vwx!+PB>8Zob@HGP^#hN~Zz(E$`K1`;x zHs*D9jpjf6sXW5XbY%!S`Q-j*C03Y|CbQ#Z!psua-`HP_$-m*Uf2?vjtY*tu3Q7z; zkt2i7_B?v8@-~`iJ9hEQah$RNxZ!RIlcv*IREPB#-Wi#RXhkrZ48WD(9Z6^1G=pO_j^>xr{i6 z#x>K+7Cp*tJ&$?wMB6`+Qwplo8WSDOY8EhUdDofb=bNnV%ppWRRKz10+a6X3jY{Gk z?vkxp-1;+4@$cY`0BpbU0TT0HGA`CrRb+fFRrwsQs4ev`9@>kT>A6xt`vNEcqby*v z!-KB~)|I)q!ZL*P0BbHhl;VTGPB4Uf`eFy)jDM-;%l4|N%>z)Vw7LSbe?pn-P|;5> z7uTQX8U$AOfY>I8q4>YA?RuxxMUCzOMVRAg+GDoFd5Q|}{wAu4`{-$Ycbrn6?@;>Ysbd7TZX`<lna+=9{Tb?yGUyw(w!O3KMwfyZlX-u|$kyF5JZIgEWWz3!Bgj{Q z{wF!k`vA$|gwRF*=y;Km+3n_gN?PD59`1tM+)mim61>eAwVif3So5dDFfR`td&G*T z>Yk?Pdtn1Wq-bPq8;SJn$NNuY_cy-`s%&jM)?Q!0*3OkusojD12|MoR0V(Upvp(!^ zD*}Mvnwp^mZJMqQ%LNJL0HL_P1_Z@JR8o{~r2J0muWGZ0+$8h`4j;1sX7Ik&FpoEE#GIkP5SGH2!Eanw@S zo6#vv$1i6%eWOTbZ6jRXw#&h&fhZS3s1u?w)RA%KZjGw=>eR@lA`7HxtiL5dR~#i4kixCi$Fh2mPQ6n9H;hvM#~xR&A+0u(FI;#Rb{ zwRq{CzVGgDznO3U*gtk=XP60@IXO8w&$;jCmg~B&mg{?R-LsrcWMX|BB8?fF0bH32 zqL}O^_IwBV*N3Op=EFTeIfYlXL;qwuZ?=fiS=TlzCcR>oo0NqoN;i8h*r*o-yepnR zFR0}+?(ni_cZfAkQR1S8oT0+JuR|nXU#k)G@E^;|vh7?yJSyS;aB}Bl`=+lGtb~Ff zX{!kg_BRebE!x^cbzdl)CHLU%|1_rB&faC~TZMKlQxW{2t?=#iFI)>al& zYqvi?pk-nZnp8McV>K~~n_;iFWvy36BIIU7hJB81Z~jcAFv;Llw|M_;lgwAs-(1h8 z+lu?sTD+B7-gf@um5{Iv&+-e3fyh)i{&{_dPUZWJ`H=*xE3Ctz##kIuq$Sg_hJ8VZ z%Dii~XayeSq*(#GTITN~xjkP;8M=Q>n7&rl(v#{2rsvV+;^^H+s{`NU5SOOI(h0_W zOPOx=IU;YLesb>fZP%Zk7NG=J8^v_L^kVMrKJ>sn@W$&l?hNPrV189Nc)qe4;Wo3Y z$Xl^do0&2L%b6ZEW5Q9^(-RgfeZYW=2`&|o=WD5`lY5Q8ce?)Jap# zQrn#)Pej5di`5+1fmWAh^yqb6n%ad#LW-wx5@I9@#sKbr#BK8(>$t%6$p1yv4T(B6 ze|A*6$(XXy@#m0z4~xQ^9e~{zkWhy{QL}#n)YX$AX4Fb+$h<8?DNs`COpG}Scxxhi zu@w~lT|33`%f$!dUL~)*0YORHFX|kv#q~KUWngLGBb;VBKRS}ye*d<@vqMvFZe{*D z`igN!biVVQzq}Btf(%AMSfw#N{zzoIyNr}xF7%+Vv&Zf#h1~6Q2B*D@ z$BISPkQFs$fnThAogIaiJykw=OQ?%BpkEj@etBo>_G3)aB1Qknk1Z3~d7ruHZ+H#H zh^V>;)2bnkfmkDs{&1#!PB z1br5)>m#E1y_o-%Pwq|j+$#}Ji4!Th6?@WIW5K)@9owV}C3|L|jZWLktN^Eaj0PgV zGN6Y0U=o!ldwuAd&Revo{p*zz98SqlBK4LBpDohy$WbEe9%B=V0QJ$270bX{-qT&l zw(MSu)^yz|gx9ulOYQ?fXH%Qqw8`q!y+Bsr%^SGG#|+sC$J{CVX2 z9})k*rVYBUR25rRy&j=mg5b9KJjtcwBJY0t%2=l9C}Sq`z{R9c^jeE-r-{PZN=ftgu#eC;4{wN#A_QkUvK%I!g%46om<{1(H(W&1 zzUC}W42^|sTf&rHFoM@jOA|GfN&edpK0Bb1)#u2PfB5w#)f^ zPAsV^JLn<2*YufUh7HDqf?EhU=`V$1X*kF(ls_Vl6^@h?+!o*`E0WPg!cPs$GGoa= zQS}Z6Hl<|mhp3rSM|0Q+1!nL?waw+^O^BKtXM5Ckjz>)I6QOR6!I)9}4csG4s|8Yq8m+^QvD=dg{7)KX*@z?v&g~SEs1+K+&TxC!lMi^lda)Qv)e40O~?@EQ+_FRzI zrj49=LJeZjN8Y&Nm%C%*_2c17ziGZ;HwJLjzdpPSDp8XmiXtuH@(rzHl?)ZEam&NhF3J4HbMwC>wjJ08t< zW&T$;#iMrZ(BE-D>6QeH04*Z_6G^YeruMZeV#Xq}fZj-bq+O0sZa6vD(7VE!<+=N> zIutV>;_p>j5$H$+BFXGvrmFs)yk}%-L6i9#ZWh>)6AEL9LWDpbL?N)PETe2Nsdda9 zvnV)Kt;Qcx*7JU?51_@L>!;94){$(C{@yB{+9_m|g-C$NA+@~^gXVuM*@C`%Ae3a} zBlN=EM$`U|XcZHc4c*s*kZbH^35_7$B;zIfE5fW==U>LEGq`;p8q-%Y^5E1W{@HG&zeB=pvH)hCQtmTb2p)Bo3fd+PTz zRBR*?sCSge393CKwwVo6H_txWZ|v=9@t-l~UJSAv-*{x~iH`qvYDnlJ*_&I7i|eJ1 zL?U^}lK)c;f67vNa#&xFEhGdoPtO$D@-Xq; z6T-t7%n{4NppKUPiyAq3LvEdTLrBy`BI#%cT{jc-5xsNJccvRFl3l8QdyV+L+b-4!NE7>KnGobW zYRWGS9cGy*n&$tW^e^kXZTqCZ8I`?!<9e%L66pF&Qv8lMcJ3n!nWs9PwsPf8VT{I) zepix;7aoLZez%6)Vn28mnx5r$3hfcstCC|yncbJ%3g6rf--??x9s1wY%5-|2bV^Rs1qUeDEE?x!Lmp5}W; z602B;S5H%o<$cMoZHx3X%^z&wxY#JReX`M?BKmr$_Nmo-y4?4K0y;8O1%V6uOKyLJ z(SQcWM9|md@2&Ic#R~Un$IU{9&dHEO11anw{$$S&uYVerYkK`UHFn?sljGNaF6OJqzTw_a$mTYYoYlTav>3* zo^f?@cxT`C3>S!hTe+QBts6fcuWtxjeETiH-A=fZ7s#p7>BH8&^hZEl{O5yhS}(?S zmo`iffe*X$34+f}V@CVpgF!IdgUEN9TOymsV!f-oy_Fwol~e?ijgT@RQ42WIfbEa( zOd@vV|Cw3)lW60u(t(pO^qOk9NM3lD#f{AtdR=l8(0sz<2y(&kZTVnR*uIku0kDEf zJy04#>CwD97|CjmG7}pEp+MJf)`UP|eB#Q&8C)=pR*a{A(4pGy;(}aQBr+t^MPm5# zla2`40vYK|oqX%N!-Nm*qYoqlC3<;>G&A zg3_O2hk7P<2U0sVVOPDug1d8Vk|W_P^T%g9^EZ(kBCo1@REU?ydE0aQ-d;|ab*|D3 z4w+W>;BQQ9ER7IZbULJ&U)6>;-batr_a!p8kFTsxKBQkuqptmt7GYXgIe0ne*^fcf zG0W_Z?zfvlJV2La0-KEmUE%l3t3yglL(iVf9Lam4ypDZ5qJT98-|7wqKYCY2BQDdi zY+{o>^N8GGQSnxb181YjX7=)Wg0Pmkl%(3uFSQzU0~LkTufLm&oE~i&3fO?tj~k)3 zLQUq?^oN5kPw7?3nYhxHV`UX{dzP@`H*<f`N=6!n z==KF)Q6W(E@reYaS$Fd{e}%$MY3xXF7WOKzJOu`WaQ zNuX)D5J=@uUMn{RntHCzO3X>k&I9sTy2adiL$c*h9z{Br67I)yX?v;iCV2xcPqL92 zr=&q*7w#9-w{Wh9F5|pGa}htXiAvRiF&^d*e4%zmtIe7WzqO?s(sO#gbwKUBt>~M~ zpCFzzxYJ@W6y9ytDjxKC=EHAAUM6;Fyty(N7+DK1B(#pHO|)_NsMx?hm;TKyp}yOX zxFF_Tp5Ri^8NS=CQySrQ;k+r_Sc#3-LMERCee!gaRb#6Sy>|WxS9(&6I5v>FE^I8_ zeYNc1{V+Q9Ik1nRoyc~CFkJKDTvCRjZ?!}Y$#_-KPMizB|ME)5o8^_IyFT6UyBoO{ zN==nm5hWx52QrNTaJi)0=XYxQuQviT&iXzioS&o|f3^Rf|K=yMlW&CQ;l4` zcw7{h%6r%r)$uFrphkaTy-)AbH%0qGYIKOJ2&+^#abkN+-()?Pjg6z~X=+Q>M86UDb_g27 zv1{_#uUEN{Mgkya!NBcbr+}!@48H-=Z=Up4=1w)e))4m(Vd#XFwFO|hwqw)7#oCoz zu?etJC;{4l@#`od{p;ynCLf-cF#%qGzyS;I;4TQJ$7+}@t^z=n;5tc@%ck4oNqPJ= zhotZs&&*L4j1W%%y6(^r<)eVaa#)m;6?$AvHP0yEM)v^Eq;;G=# z9WW2PPMQJ%WSIVWJ#7{C-{UWw9Kb?p|I6ad07XX6eq1F0L7xnCoU!AR>@-2xA%sZX z$R`$#iFS-xnezP>!1i_emWGKHjv)l32O;nf6ao4Cj zj8Fa#&b_C9359?ZgQXL(qUzuBz#)I>6ji07Q~7~4C^8)7uRCdZUXh5%sbxBa$nQI(b0JT1UIkqO0a!AL@Y zTcU&jjCL&G;^aW!e}HLIWf_5bUPvng0{w-aeh`CF zVh`>=TrQp&u$4Ncf~XN$AguLOGfNy4Z;196%y=jhDJ&E~UPEP+d*;e?byVbInM=T! zju;Af*s229;6>fJ?QR(vSVR5)9nFc31DN|U7DU~(b~1nwMMw`6hchL#zZH?sY_B18a9`apajAIAn>{rIt)ERWB}0uEBOKN zC1#e?kmQiy{-A{aUguMW(i2)11bN~WL6khAD-t-BgzP#=@|A#+0EsD3o)A>hMOvJq zfK}3Bh|)*_UV$(=3QviX5h1}4HIW1%ld*t;PjL`(Zy_Zl0K)6!{s;P<#`-_laoGQ$#0`r62M@0DKY()c zsQ-bEbN>H!(i0z{vZy#GAZgD2OF%u{j}{VAi&gs(lVO9a%CE!ff9|MCLcKUAz$^5Z z@_&v5u<*>ly|)B78BP+iGD4G3qyGYJ`h$Ywpnd%myo?A8fb@3f<_IidMuws$z=UyR zN1Q%sxrL( z$Vl-CsiFG4BH|ufS>87Sh#n=*cqev*c{T+T9tI`EEDID>3s~M9lsXagk2c|S?;*n{ z^q2PEBYnk=2I5Di$pQc?xi}}Y&JTPH59}zx5TZuHK&hCbNFpO8J%k3%Fa`kK2`M1( zf7GX-_&9sU9%iag00D4bn+#aMsXYLF2*wb#h=Bk!pMT#t09Y%JnW7_z0Zy6CEVJG| zfer@9P6{v(4{){J{X)ngGzAmt!MTT0pAbN{0x$Z9qa2HvT0sBkM99d$en5cCMGjMo zMMx+zvi_JxoLU2b`bCPwf83laPOuh(O!5gBd^!OX^w|LhRG~Juf@RTj*0#2NT4#pAcM5Cag+f5 z6k&6Kzl{TKPDb4I#6K(iXFY&9CL?s`6v!i)ar^ZFQzcEjLLs`yfpa77{Sf_ z3n*a1?0{<*{;%(TCcB{k2P=x>M-3!ut<4A(HN|~0_3u?gq!W)d@K~|XK zwdP2MP9Nor6fj`fnWjLBrDgo{04^L8D+FO7zyLCjO*H6FicDPHu1uL&D+7yg)J!HU zh{3{u@-^&V@dz~Pe}qf4=;6hE@24+h(nGSaQo=wXZxQ4Z|2g7}v_?44mPp)%u``^o)OLh)2Q7pKzBs-Bz_o#+ zTv7qXkPHl12n2!wtn|PCOI{~!;R@IwJo^k(tPpRl{aq@Y`+GQro8|*lzy6!iBuqjV zi7#AU%Ogz-*1OYPa!pD9+o?d7VR9s=^8a?l(EjoPF(ypu^_UDiEE#_?5+>xy(p8Gc z;Y~!vVK;f_qFk9cAg(9AJoIM7o%tQW_k*<<4!KE~-5gwhoB0mQfpQTbPcCFPu6AqH zZ9OBl4D9FC5kB!`iB}5%%}Lk~Z$jcPYD6Mmb|he}ALc>kwg%wS@1nw&K`dX3 zM&O^Cl>hgi3)FNa#{R##r^mR|(^cks(@U=pH<~EL5`}uLL|8#eNC7CmFpNv)-`*`p zVu^vfhx_uzR@aD#!i~;|i;J%ybL`bChnopZ%c40I&U^?{ zRXm!InB&0@_)UYNMQgI8x?f(H7vHbhL6H9OTs;&isGgXofAjdceR4`KDAe=Sn?Z^F zk9grg4foU#O%90?Qi6G(meuF@PFfPoIXry6KcAJ#3^r8;S|k3Js@RxTzdJ>i)5Q&YyB-^PLJb z@<|N4^$EA$5W&{zQ78d$B(o5%#VAPG&ikAwFlhT-Rp2Oj)pBhbMO>&|&NX?$(r=1s zm^67kiU$| z{Krjpi&@$}5^me$k6GZc7{dZHil3fbQma$n@;|dp5>rD0+lv-tZF%QtW4qlA*Es<0 z@cSk)qNY3Et;P@a!Fld2Ny5szcfKu;=Yro4aZT~$M?4Wni9g914%|RDOuu@mCBmek z9Xk3=iNyP^KC0?j03BINz4W?6Ba^nw{dmCLcDmwMpUzy7+bX7A4Fz|ys4L~PL?$1C z5_>GKWq;ak`dd<+_L^b5rzL)*Ts8vS;XQ4j-uaUk_n;Z; z!*5459>b<_?je89f zP~!*u@&79;_?ws7=Y^`r=EZt!cVW47x6_*O$aku>IC6_mi#dk5y0Wz8*<0YLBB0(x zZd$_TSg}KUaJRb$J&K7f52&$3Zoh?5Oo=4gG9xf}c!82KFXMRjV3k0rZf+4plu&%q z5D*Rn0XQagVoy@EKn9#7x z2)~Y3W}VuS8oM$mW<+Bybo#iOd9yJizdrJTthSEgVhfjj4sY)KxtoM+aG~yO@~7uc z!grM{bJj>fTue2DOfn2c{$V2g*7ZVZdVZ@8U*tA=Z0@9jUV9*&2hIcVsfD)<7*QyA zq!6z{XnzOW#7RT|@!D?SpP%!UxPt_cF#=_<50(x~xBSH)S&EjUv!+C85BJ?}OpelA zEf2B=3=*aHr>c4WcUmUnHz#3&5!yR69MZ116HC{RR*vQpzCSmN6UtIlkP5b<+Q}Xd z`1BRi5=btD6-FQN@=~2ieemQO5{PKE^_R=@viOi>J86H-FS6U@dbj!T^38#DdgC-Z zEsu=UgCdn*h93OkFM|++$ITpWih1a~>?g9X!sOwavkecI7h8+5<$wS%MvgyQY$A%+ zVzS@B|M4OyvP~=N>&X|a*zO-DFKPn_{G6Le&6t<{ITvZXp*kOKzgEjeg(pZ@jCasr zXV@s)FIQ&GSL<(=xbD=C?7fWSg<+cMFi6KjWn}(v%<|bB2>NTzrfijo4SeK%qE#~i z2ThJjy{KexWfGs6&pVtsAp8fnO>~k%GH)j$z>RtB;W}uO!76T!ul%{a)f=?{kVR1% z8EkJsDwo!5RT?K`b?wa61H`c|00|mK0knyyLz}(CLy9G+dU+qw4Vs)&i@5!A`MJsm zW5Q>}W|nj#Oka7Hpw_ya^X|q=PA;}0vBxL=UGk`JoLjtDDmAm0MfvJ|?AAg@Z_?jJ z{`5|<+`Uiibr=}nkk~i4%9v3=-6rYl&_f^FaQXnK?H>!Dvn7NQ_WxUZlmP*81)|FV z2!X*Z5atPn)c(}l!e;s#mb$o)}Xb^Q@1epxqG_{m5`%t6X6l6X&>q!f`!q?f86-j{3decTR!KjiZk2h&0n|OLdV{ zb${M+h#g}g;>QRAjQ?xbu#Zo#*+~h8;biF0Zh5_NIcs(B{Ykz5WjsRZK`bHW8`;|L zfnPEtQ-!adM!ep;Z|8NJ0Uw;7n>Y1Aw9mxCDC!9TIWbctkQDZ>1DQWSE=E;A);}oq z@mk;{8%%W0=6)9E4}XK6T%78ZBdPzT;KzH>FqUzDsYu~~sxzIZ%;X>U=lr6se z@jCq$>x+Br_kg2WEf|Gjc3RL(*|e$z#*kA@r3Qs2Ua2dy-KqRbWPwEGUuptG_CZl` z*yBvRN=T~J^#wqs_seL`-CpPX9-5Q~CTugBGxP3fe)*tvEJYV5gaCBP8|A-3Q~6Xf z_QS=C{L~zS>D=mg;jo*VToFKbP{duA)-qx7U8&LM950i#Czq0a?t82vOvH~XcRIct z_}HwBvV3&+ml?UHrLZSm8`8IZeAv?PKg`MbmKyH`N4; zFp)b{80FNsfIzC!6e&Jn&P0>7ljJ7mhJo_P1-wDtZefvS9JEzOR zX_(x>!^-tjr#Ep>hYMpHCjMLobKYkiFO$Bg*>2g^7QM|$GYRt$P^vQ5dmk^%^tjG^ z&d{q2Ir+9gW^%%y7Kr>Wc*3)U}o#r z4}a`~W(*bp-8yI`YeBF<;q^4j$HN+tgY#KGkpf$2S806abXm%r#iI-H*GB7^aZ4h< zn0$}jA3QwJ8}m&QAIyD(_s4TJCD)gEQdl8Y9uO7yHed&_FtT|wk~sa*ujuvW)~qYK zAP+mZ8MiQQy(5uTdFrG$EXR9k(f$4!7!g(Abi$3ERDf94F~Tt`z4fKSK#i}S&6=L+ z(`6-X{)}pV}Vmk=GyS^+Prz+=2q z{HIq`S+r7YQKw*VHI9rIJ0`hzKgFT>WW;q{khYo^M4P#tLUFpJqx$T^>sK{cn_r=M%%I}(d8e-gM7pc#w2cY1KKzwzI1pSP{83_AwSSsS}f<)!*Xl;=qN36!Cq zX*FK8^pqtVyt6XBpqYztDPoOWuO8Um;omMD=CpVJ7@@IUP>)dn%oEN)Z_!r7vAn)< zk%04I76k+IdO_TasutbnSBpx1kiv@4$P-zTlj37}J$oibKypa0s=10}kay;V9JXF* zT;xeW1*l>@q^D<{nEB+({&dArGi`3N58qo%he&z< z{cy%6&V0qe-t@*1^#Hcsjqhff-#DZxzFwVfz(Hs12K9=JoWM*p#IErRuXUxjkRb)>*5<}0iD3vI;5*&a*kHT)l z5qrI>>Fno07V*-bIGw(QaJ7WT3v<@^4U?NM?KmM5w}q6VP+3)(@FON^lvCb7oUHoR zr=5M_^@euggtj~Z~#ps zK^e%7z4407?gjY{#^+a|AXUGc7kPITIO!9KZg>_-S2ks%&X38u`{j4WS)vpN;9Yt4 z=1{JD4V!)uS*2_mb!o>?T`RVuzZ~PjuN|-l*bGp8m8BiGb0i(BrPR66G18W)aZ&YG zRTcx2JVDQ#-ky7DMup(k`a8CUp6AKwVa;NFFQAf6}E zt;oM7-JubR?Stx{t>HYBmE|7?wQb|#y?ql&y8@D4^M2JIH=0_La~sk74LdKC9|Z^@ z?$Jtsz;E!q*QN@WF80`o+OO!iB^{}|l+2H?YuYvywtqd#p;j>N4~}hSiXk-8n3$3 zbL*q!Lmhju`WKi?-p9N`!K2!F9j7$oU59$Uhkx~JM2{MF3if(gd62r=tOv zr@kE|#V((+v2IA~^A0c-@|v*HMAbjNMbG6i{O z736zuD0b1RG5l-*4i9FJew^vJHTKYXV|M}zm*_}&xqr~RjyJ*p&=snY`s(+TXyv`= z42KXXDm|c2?NR;!VXgJ`pLfJ>z8|;z$o}})h5uL6xzCekmZx!_-u?O1pwQQV0Z6Hu z3rg#1Ve{fTITwtlYZ|_iCX<%B>V`_|PQsOx3`0>{rm!k4?NqrO7ItoiBxGG4wgagm zMp1NhUHn%C2p5EfeZIpq=qBy-m?K}_kWoV#2l`y6_hYZTvxgE{4#H+b zPB|T9f16&-c;mTBwO@4Zt`^gho>hPV)q{*kcz4bv3zzL%_P!VFp}qVrQ&_QqU0LE@ z^GR8(%==^m#jH-oRTaJ+AT&OELFJW!7R{^Vxlx!&&_3C7(w41Xrp}+K`lx1@8OH0s zKhapLlswQ_XkDv|Jki(_7gB9lfA@pN{m|;-*^g)33*~8Lu}mP8P-XN3I+evZe32TFawn0}IJ5e3;M2S&^>v0E$v4Af{zy}@ggD$8ACr|N*^x^dzT*> z)Xu>XCKuqRFa61%cBE}x>PrmibuWgytfzI1eVrcP>HLB|;#q1mDhF1Bu<3p*M+H90N}t zo6AI@>~5L=%|gl$X=&*Lg$Kv1-m*>W!7xNl+rIpkY!@s+5_r^{m)0nr8; zo)}CT3n41o^!=U0gvCKPtIGCFkswJq49OeyfALc#g=NN57rJ7FxFR(rC9sEwhpxW< z`Jm)|($ti;?mG`T)bT%cWHNJfOzZ2xEBU*-QT(}LeW(QY+5n?BMEXpm;}LcQS|o>9 zt2PpfB8)VXlR^nuaE)^Ss50R{dk>M9Kh@Tf~WO^*kFyKvCH}M_o|L!hnO-FHz)1q-$)HZU9 z<1G@@WXigKfr!;JWb?7ccY65~tfVes>oT!`bc?3mjJ9qsUekDBgzaEZG?z;92-ySa zxB&tG9!nQahN}5|j__mIHg=*g!My8ZiSbV2G3yhbr>E0L_L?}*4mZS<_)l)lr&}U5 zU2lXFRNvc9SGO>W{*kY_zWq=V`anzGaD?J<{@B;4b++TFOtoi5+a3O*vV)?rWIb^1 zGM|BTY{iwa5K(uQ$9+YYbe8>*A1FlI@}|^UO13uYjRk%)@bOYGRRQWp=C09Y6DC{l zCK^-Soqil@Jvy~fAt#fLef*lTA^T_~vwJl?o=u(%2q-!(BYB&~ecn0LcIIB5XS*F3 z+PX>|3yk|!34;DU+&dLQROFBJKV2!*nIiFnV68|e3iw~o)8NU=b7tOfAD28U=2n3A zvv$Ez1MwQAmC$|B!#b}A#=W~y4X5v5GaZ?*_z6w%5i6(oOjU$u zQO~;7>9u_TO`m32r%!VoIPKn8*_Mu_aOG5*F&r8&IvQUL@U)rp*wOkdxoP|QK8c=> zD8`!0oD169o>5Venw6y;&5FypuOkKeppw|}Ig51n%d2QIxw%MRdAX~fljb?EZwC{R zOso!U@GA4A7fHoB;|c!+Zl6Sf$9D*m>Sb<5Q`${1x|}I5TLt#(1=( zb;Z{Ft8x{F!d!3xcUeWt6CyPRsvf2Vc3~>N7O;#XfTR5q}zUb)EUBPO+BJ-?%46{sbPn>E`_eL=@*HOkZRIWdcz{ zdLti%Mq>66tMw#wrTo`72{};N20y*4suQj+D|aDTIfdEx)Nb9;%EJcCt;P(_buHs}SYg!9XT^X3`;d5H@mN01w?b^xdKPFy^ zt-bN{gcTnd^gs6_+z#eSb{rbuo&N$eW*BA&>Wr7Zw;rdP>OUop-E1{_Ua%4dTEU-r zRwn5|D;uG)^;EWYYmJK?0JG+Tit^&mt!# zP%@ND`8Y=CvxJ7MOW{XY(U*A4h|$1tSz<}_l$9d84sW%J1TGoN40UGBCS()ROmdjei-px-t2*+bS!8B#;? z&OnYG;vgDanu&pOdZd!);}n(&#$_M=8+R2FzlS)iD>s_lboE@hEsJT~);=`QOg3WP z&E$Q9kM<505&)}? zSKTR4Cr-*8-4It}Upkq9r`V=^u2xeP2hYzHpJe`?W^ zq(B^HB8O6C{#>C|EPOV^L@E3lzOSpN2S~RQ!=kWTR|7?5!wCxixhH=TXki>Lxh4E( zCw@eZH?yCM52>ivlQOj)Ty}OgJeqL?TP-^y!L=y~HPlcj*{per)ByQ=HTEJ38v(0I zswfk7M>4AEkwPGK>IQA#uz0bzK@IUY)-i@H?!42hxjl0`rsmRaUKb*Dj}942T_=sV zuz75g}R?o(Fxr>f{QWm(sL_okmak*%EzZsZVb(xEhRc!)KLy2k^0h3`GM}o zXtZ*>rd8JP0xa2FD!YM;$oyMl!~?>mr@N$g8WCrk;)9w4;m`T@K6VjIer`L@+o&*? z<)HL1HVyxp7yk|eV;>)LX6~+zL?rMP2Z@{b^|VV1GYAgCyq{pNWEG-(;n1=L+fBM|LrCI7`+Or^)mOHJ7l+jMpf69+o%~a9SgG%>wW9yZW z;M&4c^&f*UySm|KabIAJ8(*#1qTp*EB-$>i(4325{NsFLffL09cO!Q3lMhAKHT3za zS{^;6pNfy3B5;XsOJzdiR`{mY@==%;yqA#mHOo5Vft%$9Cl@`KUFccro`7q?Ql^7Z z++|$@=KLd>5|+57tnjs+X){h&74iHap_J#tP?b=#@5WRwXr;Bl|GxVRd$iJA@TUPc z@4v;Fr0vW!U|u1=Jv>=lR82}jFw2KJAlRrw8#WcUc|bXo=&Vtp?l1tGW0xuJh|HS;=l zC@SZ^Dl5>=rZe~od#$+92s+w5E{@+Hfhk|Ik6-UBjVBX@eOzx~xGRwjP18WX`Qa-2{%*r*Dd<8%PROiU*>lP7 z;Y@v8%E!G>YD3LV$w$U-B#hFrNt2=11{DWwT%CUU_2Y_`;b-vf?FQM~M)mJY%B)r( zb znfGxo1)@7=*Tb5034x9!iykPZKsD=C1uA z$DUtuq9z&--nM3Tzs7wMn}_Bvw&(!w)+s#^+HJ<^6n(Dsy@qLPfFa7Nf7JHaDje0M zQ9isFoaqv`^Iq@J@Ol?}<&PD3_i!ZR^g!6gZ{~z9_LTF=OhP+rCk3p*<7~rQ5enMZ zk{_^$%)C4@R`p36)<|If&J|ZVrJ%=yZZunWWS!u>-kmJ@RH_9Cq>EEvag^89HRqU( zJBW!mQ{rms#R?`Gq93ZLAV)~i;uivkuxNb*+#q3ao%01BgMgcGdYVd{wub~O?Dk-?65R0<$C+G>knDcn=%+MWr zg5e^@XlnvRnv(}#o`vh$v-PHeb52HVPwv9NO4u^45v@M{#v~ZP6(zpB0sqz$^uIqi zq&dHe6UH{@k{x9?{h}V0uyqoW>uMUPN-9D=;U87M(ItgXM?#erc*dw>W2JP|mijc0 zDne^UTYf%qz0*Q2;}(tW?;2WWP0#0iz-W8`

5e>BLtk9MAo2xPBuJ9rJwN&>Rx3 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

${K3hH8H^K&KoH)wG!D9&xD0)kl;Q4Rd) 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 table.column2 + ``` + 用于检查列的值是否不等于某个值。 + +3. **gt**(大于) + ```typescript + import { gt } from "drizzle-orm"; + db.select().from(table).where(gt(table.column, 5)); + ``` + ```sql + SELECT * FROM table WHERE table.column > 5 + ``` + 用于检查列的值是否大于某个值。 + +4. **gte**(大于等于) + ```typescript + import { gte } from "drizzle-orm"; + db.select().from(table).where(gte(table.column, 5)); + ``` + ```sql + SELECT * FROM table WHERE table.column >= 5 + ``` + 用于检查列的值是否大于或等于某个值。 + +5. **lt**(小于) + ```typescript + import { lt } from "drizzle-orm"; + db.select().from(table).where(lt(table.column, 5)); + ``` + ```sql + SELECT * FROM table WHERE table.column < 5 + ``` + 用于检查列的值是否小于某个值。 + +6. **lte**(小于等于) + ```typescript + import { lte } from "drizzle-orm"; + db.select().from(table).where(lte(table.column, 5)); + ``` + ```sql + SELECT * FROM table WHERE table.column <= 5 + ``` + 用于检查列的值是否小于或等于某个值。 + +7. **isNull**(为空) + ```typescript + import { isNull } from "drizzle-orm"; + db.select().from(table).where(isNull(table.column)); + ``` + ```sql + SELECT * FROM table WHERE table.column IS NULL + ``` + 用于检查列的值是否为 `NULL`。 + +8. **isNotNull**(不为空) + ```typescript + import { isNotNull } from "drizzle-orm"; + db.select().from(table).where(isNotNull(table.column)); + ``` + ```sql + SELECT * FROM table WHERE table.column IS NOT NULL + ``` + 用于检查列的值是否不为 `NULL`。 + +9. **inArray**(在数组中) + ```typescript + import { inArray } from "drizzle-orm"; + db.select().from(table).where(inArray(table.column, [1, 2, 3, 4])); + ``` + ```sql + SELECT * FROM table WHERE table.column IN (1, 2, 3, 4) + ``` + 用于检查列的值是否在给定的数组中。 + +10. **notInArray**(不在数组中) + ```typescript + import { notInArray } from "drizzle-orm"; + db.select().from(table).where(notInArray(table.column, [1, 2, 3, 4])); + ``` + ```sql + SELECT * FROM table WHERE table.column NOT IN (1, 2, 3, 4) + ``` + 用于检查列的值是否不在给定的数组中。 + +11. **exists**(存在) + ```typescript + import { exists } from "drizzle-orm"; + const query = db.select().from(table2); + db.select().from(table).where(exists(query)); + ``` + ```sql + SELECT * FROM table WHERE EXISTS (SELECT * FROM table2) + ``` + 用于检查子查询是否返回任何行。 + +12. **notExists**(不存在) + ```typescript + import { notExists } from "drizzle-orm"; + const query = db.select().from(table2); + db.select().from(table).where(notExists(query)); + ``` + ```sql + SELECT * FROM table WHERE NOT EXISTS (SELECT * FROM table2) + ``` + 用于检查子查询是否不返回任何行。 + +13. **between**(在范围之间) + ```typescript + import { between } from "drizzle-orm"; + db.select().from(table).where(between(table.column, 2, 7)); + ``` + ```sql + SELECT * FROM table WHERE table.column BETWEEN 2 AND 7 + ``` + 用于检查列的值是否在两个值之间。 + +14. **notBetween**(不在范围之间) + ```typescript + import { notBetween } from "drizzle-orm"; + db.select().from(table).where(notBetween(table.column, 2, 7)); + ``` + ```sql + SELECT * FROM table WHERE table.column NOT BETWEEN 2 AND 7 + ``` + 用于检查列的值是否不在两个值之间。 + +15. **like**(匹配模式) + ```typescript + import { like } from "drizzle-orm"; + db.select().from(table).where(like(table.column, "%llo wor%")); + ``` + ```sql + SELECT * FROM table WHERE table.column LIKE '%llo wor%' + ``` + 用于执行大小写敏感的模式匹配。 + +16. **ilike**(不区分大小写的模式匹配) + ```typescript + import { ilike } from "drizzle-orm"; + db.select().from(table).where(ilike(table.column, "%llo wor%")); + ``` + ```sql + SELECT * FROM table WHERE table.column ILIKE '%llo wor%' + ``` + 用于执行不区分大小写的模式匹配。 + +17. **notIlike**(不区分大小写的不匹配) + ```typescript + import { notIlike } from "drizzle-orm"; + db.select().from(table).where(notIlike(table.column, "%llo wor%")); + ``` + ```sql + SELECT * FROM table WHERE table.column NOT ILIKE '%llo wor%' + ``` + 用于执行不区分大小写的不匹配。 + +18. **not**(所有条件必须返回 `false`) + ```typescript + import { eq, not } from "drizzle-orm"; + db.select().from(table).where(not(eq(table.column, 5))); + ``` + ```sql + SELECT * FROM table WHERE NOT (table.column = 5) + ``` + 用于检查条件是否不满足。 + +19. **and**(所有条件必须返回 `true`) + ```typescript + import { gt, lt, and } from "drizzle-orm"; + db.select().from(table).where(and(gt(table.column, 5), lt(table.column, 7))); + ``` + ```sql + SELECT * FROM table WHERE (table.column > 5 AND table.column < 7) + ``` + 用于将多个条件组合在一起,所有条件必须满足。 + +20. **or**(一个或多个条件必须返回 `true`) + ```typescript + import { gt, lt, or } from "drizzle-orm"; + db.select().from(table).where(or(gt(table.column, 5), lt(table.column, 7))); + ``` + ```sql + SELECT * FROM table WHERE (table.column > 5 OR table.column < 7) + ``` + 用于将多个条件组合在一起,任意一个条件满足即可。 + +21. **arrayContains**(数组包含) + ```typescript + import { arrayContains } from "drizzle-orm"; + const contains = await db.select({ id: posts.id }).from(posts) + .where(arrayContains(posts.tags, ['Typescript', 'ORM'])); + ``` + ```sql + select "id" from "posts" where "posts"."tags" @> {Typescript,ORM}; + ``` + 用于检查某列或表达式是否包含列表中的所有元素。 + +22. **arrayContained**(数组被包含) + ```typescript + import { arrayContained } from "drizzle-orm"; + const contained = await db.select({ id: posts.id }).from(posts) + .where(arrayContained(posts.tags, ['Typescript', 'ORM'])); + ``` + ```sql + select "id" from "posts" where "posts"."tags" <@ {Typescript,ORM}; + ``` + 用于检查某列或表达式是否被列表中的所有元素包含。 + +23. **arrayOverlaps**(数组重叠) + ```typescript + import { arrayOverlaps } from "drizzle-orm"; + const overlaps = await db.select({ id: posts.id }).from(posts) + .where(arrayOverlaps(posts.tags, ['Typescript', 'ORM'])); + ``` + ```sql + select "id" from "posts" where "posts"."tags" && {Typescript,ORM} + ``` + 用于检查某列或表达式是否与列表中的任何元素重叠。 + +这些条件操作符使得 Drizzle ORM 在构建复杂查询时非常灵活,能够满足各种不同的查询需求。 + +### 引用: +: [Filter and conditional operators](https://orm.drizzle.team/docs/operators) diff --git a/docs/nestcli.md b/docs/nestcli.md new file mode 100644 index 0000000..95bbf8a --- /dev/null +++ b/docs/nestcli.md @@ -0,0 +1,50 @@ +这个输出是 NestJS CLI (`nest-cli`) 的帮助命令 `nest g -h` 或 `nest generate -h` 的结果,它解释了如何使用 `nest generate` 或其简写 `nest g` 命令来生成 NestJS 应用程序的不同部分。以下是命令和选项的详细解释: + +### 命令用法 +```plaintext +nest generate|g [options] [name] [path] +``` +- `nest generate` 或 `nest g`:这是用来生成新元素的命令。 +- `[options]`:可选的命令行选项。 +- ``:要生成的元素类型,例如 `controller`、`service` 等。 +- `[name]`:新生成元素的名称。 +- `[path]`:指定一个路径,在该路径下生成元素(如果未指定,则在项目根目录生成)。 + +### 可用的 Schematics +列表显示了所有可用的 schematics(即元素类型),它们是: + +- `application`:`application`生成一个新的应用程序工作区。 +- `class`:`cl`生成一个新的类。 +- `configuration`:`config`生成一个 CLI 配置文件。 +- `controller`:`co`生成一个控制器声明。 +- `decorator`:`d`生成一个自定义装饰器。 +- `filter`:`f`生成一个异常过滤器声明。 +- `gateway`:`ga`生成一个网关声明(用于 NestJS 微服务)。 +- `guard`:`gu`生成一个守卫声明。 +- `interceptor`:`itc`生成一个拦截器声明。 +- `interface`:`itf`生成一个接口。 +- `library`:`lib`在 monorepo(单一代码库)中生成一个新的库。 +- `middleware`:`mi`生成一个中间件声明。 +- `module`:`mo`生成一个模块声明。 +- `pipe`:`pi`生成一个管道声明。 +- `provider`:`pr`生成一个服务提供者声明。 +- `resolver`:`r`生成一个 GraphQL 解析器声明。 +- `resource`:`res`生成一个新的 CRUD 资源。 +- `service`:`s`生成一个服务声明。 +- `sub-app`:`app`在 monorepo 中生成一个新的应用程序。 + +### 选项 +- `--dry-run` 或 `-d`:模拟操作,报告将要执行的动作,但不会实际写入任何结果。 +- `--project [project]` 或 `-p`:指定在哪个项目中生成文件。 +- `--flat`:强制生成的元素结构为扁平化,即不创建额外的目录。 +- `--no-flat`:确保为生成的元素创建目录。 +- `--spec`:强制生成相应的测试文件(spec 文件),这是默认行为。 +- `--spec-file-suffix [suffix]`:为测试文件使用自定义的后缀。 +- `--skip-import`:跳过导入步骤。 +- `--no-spec`:禁用生成测试文件。 +- `--collection [collectionName]` 或 `-c`:使用指定的 schematics 集合。 + +### 帮助选项 +- `--help` 或 `-h`:输出命令的使用信息。 + +通过这些命令和选项,你可以快速生成 NestJS 应用程序的骨架代码,从而加速开发过程。 diff --git a/docs/pacAuth_database_0.2.ndm2 b/docs/pacAuth_database_0.2.ndm2 new file mode 100644 index 0000000..d9d4523 --- /dev/null +++ b/docs/pacAuth_database_0.2.ndm2 @@ -0,0 +1,6315 @@ +{ + "paper": { + "name": "A4", + "leftMargin": 0.5, + "rightMargin": 0.5, + "topMargin": 0.5, + "bottomMargin": 0.5, + "isPortriat": true + }, + "modelVersion": 2.01, + "defaultSchema": "pacAuth0_2", + "server": { + "objectType": "Server_MYSQL", + "name": "Default", + "uuid": "", + "serverVersion": 80099, + "edition": "Default", + "lowerCaseTableNames": 0, + "serviceProvider": "", + "schemas": [ + { + "objectType": "Schema_MYSQL", + "name": "pacAuth0_2", + "tables": [ + { + "objectType": "Table_MYSQL", + "name": "pac_core_service", + "comment": "系统已注册服务列表", + "engine": "", + "characterSet": "", + "collation": "", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "", + "encryption": false, + "createOptions": "", + "createTime": "", + "checkTime": "", + "dataFree": 0, + "dataLength": 0, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "service_key", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "服务唯一标识", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "service_key" + }, + { + "objectType": "TableField_MYSQL", + "name": "service_name", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "服务名称", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "service_name" + }, + { + "objectType": "TableField_MYSQL", + "name": "service_version", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "服务版本", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "service_version" + }, + { + "objectType": "TableField_MYSQL", + "name": "service_desc", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "服务描述", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "service_desc" + }, + { + "objectType": "TableField_MYSQL", + "name": "createby", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createby" + }, + { + "objectType": "TableField_MYSQL", + "name": "createtime", + "type": "datetime", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createtime" + }, + { + "objectType": "TableField_MYSQL", + "name": "updateby", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updateby" + }, + { + "objectType": "TableField_MYSQL", + "name": "updatetime", + "type": "datetime", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updatetime" + }, + { + "objectType": "TableField_MYSQL", + "name": "deleteby", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deleteby" + }, + { + "objectType": "TableField_MYSQL", + "name": "deletetime", + "type": "datetime", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deletetime" + } + ], + "indexes": [], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "service_key", + "keyLength": -2147483648, + "order": "", + "oldName": "" + } + ], + "oldName": "", + "indexMethod": "", + "comment": "" + }, + "foreignKeys": [], + "checks": [], + "triggers": [], + "tablePartitions": [] + }, + { + "objectType": "Table_MYSQL", + "name": "pac_auth_link_role_menu", + "comment": "角色菜单关联", + "engine": "", + "characterSet": "", + "collation": "", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "", + "encryption": false, + "createOptions": "", + "createTime": "", + "checkTime": "", + "dataFree": 0, + "dataLength": 0, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "index", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": true, + "comment": "数据完整性确认", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "index" + }, + { + "objectType": "TableField_MYSQL", + "name": "role_id", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "role_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "menu_id", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "menu_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "createby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createby" + }, + { + "objectType": "TableField_MYSQL", + "name": "createtime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createtime" + }, + { + "objectType": "TableField_MYSQL", + "name": "updateby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updateby" + }, + { + "objectType": "TableField_MYSQL", + "name": "updatetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updatetime" + }, + { + "objectType": "TableField_MYSQL", + "name": "deleteby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deleteby" + }, + { + "objectType": "TableField_MYSQL", + "name": "deletetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deletetime" + } + ], + "indexes": [ + { + "objectType": "Index_MYSQL", + "name": "pac_index", + "type": "UNIQUE", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "IsVisibleIndex": true, + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + } + ], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": -2147483648, + "order": "", + "oldName": "" + } + ], + "oldName": "", + "indexMethod": "", + "comment": "" + }, + "foreignKeys": [], + "checks": [], + "triggers": [], + "tablePartitions": [] + }, + { + "objectType": "Table_MYSQL", + "name": "pac_auth_link_user_role", + "comment": "用户角色关联", + "engine": "", + "characterSet": "", + "collation": "", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "", + "encryption": false, + "createOptions": "", + "createTime": "", + "checkTime": "", + "dataFree": 0, + "dataLength": 0, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "index", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": true, + "comment": "数据完整性确认", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "index" + }, + { + "objectType": "TableField_MYSQL", + "name": "user_id", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "user_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "role_id", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "role_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "createby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createby" + }, + { + "objectType": "TableField_MYSQL", + "name": "createtime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createtime" + }, + { + "objectType": "TableField_MYSQL", + "name": "updateby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updateby" + }, + { + "objectType": "TableField_MYSQL", + "name": "updatetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updatetime" + }, + { + "objectType": "TableField_MYSQL", + "name": "deleteby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deleteby" + }, + { + "objectType": "TableField_MYSQL", + "name": "deletetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deletetime" + } + ], + "indexes": [ + { + "objectType": "Index_MYSQL", + "name": "pac_index", + "type": "UNIQUE", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "IsVisibleIndex": true, + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + } + ], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": -2147483648, + "order": "", + "oldName": "" + } + ], + "oldName": "", + "indexMethod": "", + "comment": "" + }, + "foreignKeys": [], + "checks": [], + "triggers": [], + "tablePartitions": [] + }, + { + "objectType": "Table_MYSQL", + "name": "pac_auth_link_user_post", + "comment": "用户岗位关联", + "engine": "", + "characterSet": "", + "collation": "", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "", + "encryption": false, + "createOptions": "", + "createTime": "", + "checkTime": "", + "dataFree": 0, + "dataLength": 0, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "index", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": true, + "comment": "数据完整性确认", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "index" + }, + { + "objectType": "TableField_MYSQL", + "name": "user_id", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "user_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "post_id", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "post_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "createby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createby" + }, + { + "objectType": "TableField_MYSQL", + "name": "createtime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createtime" + }, + { + "objectType": "TableField_MYSQL", + "name": "updateby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updateby" + }, + { + "objectType": "TableField_MYSQL", + "name": "updatetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updatetime" + }, + { + "objectType": "TableField_MYSQL", + "name": "deleteby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deleteby" + }, + { + "objectType": "TableField_MYSQL", + "name": "deletetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deletetime" + } + ], + "indexes": [ + { + "objectType": "Index_MYSQL", + "name": "pac_index", + "type": "UNIQUE", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "IsVisibleIndex": true, + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + } + ], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": -2147483648, + "order": "", + "oldName": "" + } + ], + "oldName": "", + "indexMethod": "", + "comment": "" + }, + "foreignKeys": [], + "checks": [], + "triggers": [], + "tablePartitions": [] + }, + { + "objectType": "Table_MYSQL", + "name": "pac_auth_role", + "comment": "角色", + "engine": "", + "characterSet": "", + "collation": "", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "", + "encryption": false, + "createOptions": "", + "createTime": "", + "checkTime": "", + "dataFree": 0, + "dataLength": 0, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "index", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "数据完整性确认", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "index" + }, + { + "objectType": "TableField_MYSQL", + "name": "role_id", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "角色id", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "role_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "pid", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "父id", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "pid" + }, + { + "objectType": "TableField_MYSQL", + "name": "role_name", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "角色名", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "role_name" + }, + { + "objectType": "TableField_MYSQL", + "name": "role_key", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "角色标识", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "role_key" + }, + { + "objectType": "TableField_MYSQL", + "name": "role_desc", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "角色描述", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "role_desc" + }, + { + "objectType": "TableField_MYSQL", + "name": "role_type", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "来源于字典,默认0", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "role_type" + }, + { + "objectType": "TableField_MYSQL", + "name": "role_data_scope", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "1", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "数据范围:默认全部1(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "role_data_scope" + }, + { + "objectType": "TableField_MYSQL", + "name": "own_of_pac", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "数据属于最高权限其他人无法查看,默认0,1时用户数据", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "own_of_pac" + }, + { + "objectType": "TableField_MYSQL", + "name": "order_num", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "排序:默认0", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "order_num" + }, + { + "objectType": "TableField_MYSQL", + "name": "status", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "状态:默认0可用,1禁用", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "status" + }, + { + "objectType": "TableField_MYSQL", + "name": "createby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createby" + }, + { + "objectType": "TableField_MYSQL", + "name": "createtime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createtime" + }, + { + "objectType": "TableField_MYSQL", + "name": "updateby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updateby" + }, + { + "objectType": "TableField_MYSQL", + "name": "updatetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updatetime" + }, + { + "objectType": "TableField_MYSQL", + "name": "deleteby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deleteby" + }, + { + "objectType": "TableField_MYSQL", + "name": "deletetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deletetime" + } + ], + "indexes": [ + { + "objectType": "Index_MYSQL", + "name": "pac_index", + "type": "UNIQUE", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "IsVisibleIndex": true, + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + } + ], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "role_id", + "keyLength": -2147483648, + "order": "", + "oldName": "" + } + ], + "oldName": "", + "indexMethod": "", + "comment": "" + }, + "foreignKeys": [], + "checks": [], + "triggers": [], + "tablePartitions": [] + }, + { + "objectType": "Table_MYSQL", + "name": "pac_auth_dept", + "comment": "系统组织架构", + "engine": "", + "characterSet": "", + "collation": "", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "", + "encryption": false, + "createOptions": "", + "createTime": "", + "checkTime": "", + "dataFree": 0, + "dataLength": 0, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "index", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": true, + "comment": "数据完整性确认", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "index" + }, + { + "objectType": "TableField_MYSQL", + "name": "dept_id", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "组织/部门id", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "dept_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "pid", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "父id", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "pid" + }, + { + "objectType": "TableField_MYSQL", + "name": "grade", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "部门等级,下级部门自动+1", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "grade" + }, + { + "objectType": "TableField_MYSQL", + "name": "dept_name", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "部门名称", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "dept_name" + }, + { + "objectType": "TableField_MYSQL", + "name": "dept_desc", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "部门描述", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "dept_desc" + }, + { + "objectType": "TableField_MYSQL", + "name": "dept_type", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "部门类型", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "dept_type" + }, + { + "objectType": "TableField_MYSQL", + "name": "dept_leader", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "部门负责人,默认可以没有", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "dept_leader" + }, + { + "objectType": "TableField_MYSQL", + "name": "default_role", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "默认角色,默认可以没有", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "default_role" + }, + { + "objectType": "TableField_MYSQL", + "name": "order_num", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "排序,默认0", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "order_num" + }, + { + "objectType": "TableField_MYSQL", + "name": "status", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "状态:默认0启用,1禁用", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "status" + }, + { + "objectType": "TableField_MYSQL", + "name": "createby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createby" + }, + { + "objectType": "TableField_MYSQL", + "name": "createtime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createtime" + }, + { + "objectType": "TableField_MYSQL", + "name": "updateby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updateby" + }, + { + "objectType": "TableField_MYSQL", + "name": "updatetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updatetime" + }, + { + "objectType": "TableField_MYSQL", + "name": "deleteby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deleteby" + }, + { + "objectType": "TableField_MYSQL", + "name": "deletetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deletetime" + } + ], + "indexes": [ + { + "objectType": "Index_MYSQL", + "name": "pac_index", + "type": "UNIQUE", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "IsVisibleIndex": true, + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + } + ], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "dept_id", + "keyLength": -2147483648, + "order": "", + "oldName": "" + } + ], + "oldName": "", + "indexMethod": "", + "comment": "" + }, + "foreignKeys": [], + "checks": [], + "triggers": [], + "tablePartitions": [] + }, + { + "objectType": "Table_MYSQL", + "name": "pac_auth_role_data_scope", + "comment": "角色的自定义数据权限范围(部门)", + "engine": "", + "characterSet": "", + "collation": "", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "", + "encryption": false, + "createOptions": "", + "createTime": "", + "checkTime": "", + "dataFree": 0, + "dataLength": 0, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "index", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": true, + "comment": "数据完整性确认", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "index" + }, + { + "objectType": "TableField_MYSQL", + "name": "role_id", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "role_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "dept_id", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "dept_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "scope_id", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "scope_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "createby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createby" + }, + { + "objectType": "TableField_MYSQL", + "name": "createtime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createtime" + }, + { + "objectType": "TableField_MYSQL", + "name": "updateby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updateby" + }, + { + "objectType": "TableField_MYSQL", + "name": "updatetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updatetime" + }, + { + "objectType": "TableField_MYSQL", + "name": "deleteby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deleteby" + }, + { + "objectType": "TableField_MYSQL", + "name": "deletetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deletetime" + } + ], + "indexes": [ + { + "objectType": "Index_MYSQL", + "name": "pac_index", + "type": "UNIQUE", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "IsVisibleIndex": true, + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + } + ], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "scope_id", + "keyLength": -2147483648, + "order": "", + "oldName": "" + } + ], + "oldName": "", + "indexMethod": "", + "comment": "" + }, + "foreignKeys": [], + "checks": [], + "triggers": [], + "tablePartitions": [] + }, + { + "objectType": "Table_MYSQL", + "name": "pac_auth_post", + "comment": "岗位", + "engine": "", + "characterSet": "", + "collation": "", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "", + "encryption": false, + "createOptions": "", + "createTime": "", + "checkTime": "", + "dataFree": 0, + "dataLength": 0, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "index", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": true, + "comment": "数据完整性验证", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "index" + }, + { + "objectType": "TableField_MYSQL", + "name": "post_id", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "岗位id", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "post_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "post_key", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "岗位标识", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "post_key" + }, + { + "objectType": "TableField_MYSQL", + "name": "post_name", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "岗位名称", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "post_name" + }, + { + "objectType": "TableField_MYSQL", + "name": "post_desc", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "岗位描述", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "post_desc" + }, + { + "objectType": "TableField_MYSQL", + "name": "order_num", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "排序:默认0", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "order_num" + }, + { + "objectType": "TableField_MYSQL", + "name": "status", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "状态:默认0可以用,1禁用", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "status" + }, + { + "objectType": "TableField_MYSQL", + "name": "createby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createby" + }, + { + "objectType": "TableField_MYSQL", + "name": "createtime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createtime" + }, + { + "objectType": "TableField_MYSQL", + "name": "updateby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updateby" + }, + { + "objectType": "TableField_MYSQL", + "name": "updatetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updatetime" + }, + { + "objectType": "TableField_MYSQL", + "name": "deleteby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deleteby" + }, + { + "objectType": "TableField_MYSQL", + "name": "deletetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deletetime" + } + ], + "indexes": [ + { + "objectType": "Index_MYSQL", + "name": "pac_index", + "type": "UNIQUE", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "IsVisibleIndex": true, + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + } + ], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "post_id", + "keyLength": 0, + "order": "", + "oldName": "" + } + ], + "oldName": "", + "indexMethod": "", + "comment": "" + }, + "foreignKeys": [], + "checks": [], + "triggers": [], + "tablePartitions": [] + }, + { + "objectType": "Table_MYSQL", + "name": "pac_auth_link_user_dept", + "comment": "用户部门关联", + "engine": "", + "characterSet": "", + "collation": "", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "", + "encryption": false, + "createOptions": "", + "createTime": "", + "checkTime": "", + "dataFree": 0, + "dataLength": 0, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "index", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": true, + "comment": "数据完整性确认", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "index" + }, + { + "objectType": "TableField_MYSQL", + "name": "user_id", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "user_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "dept_id", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "dept_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "createby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createby" + }, + { + "objectType": "TableField_MYSQL", + "name": "createtime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createtime" + }, + { + "objectType": "TableField_MYSQL", + "name": "updateby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updateby" + }, + { + "objectType": "TableField_MYSQL", + "name": "updatetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updatetime" + }, + { + "objectType": "TableField_MYSQL", + "name": "deleteby", + "type": "int", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deleteby" + }, + { + "objectType": "TableField_MYSQL", + "name": "deletetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deletetime" + } + ], + "indexes": [ + { + "objectType": "Index_MYSQL", + "name": "pac_index", + "type": "UNIQUE", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "IsVisibleIndex": true, + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + } + ], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": -2147483648, + "order": "", + "oldName": "" + } + ], + "oldName": "", + "indexMethod": "", + "comment": "" + }, + "foreignKeys": [], + "checks": [], + "triggers": [], + "tablePartitions": [] + }, + { + "objectType": "Table_MYSQL", + "name": "pac_auth_user", + "comment": "用户表", + "engine": "", + "characterSet": "", + "collation": "", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "", + "encryption": false, + "createOptions": "", + "createTime": "", + "checkTime": "", + "dataFree": 0, + "dataLength": 0, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "index", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": true, + "comment": "数据完整性确认", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "index" + }, + { + "objectType": "TableField_MYSQL", + "name": "user_id", + "type": "bigint", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "用户id,可采用雪花id", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "user_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "username", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "用户名", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "username" + }, + { + "objectType": "TableField_MYSQL", + "name": "password", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "密码", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "password" + }, + { + "objectType": "TableField_MYSQL", + "name": "nickname", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "昵称", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "nickname" + }, + { + "objectType": "TableField_MYSQL", + "name": "user_type", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "用户类型,来源英语字典,默认0", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "user_type" + }, + { + "objectType": "TableField_MYSQL", + "name": "user_email", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "邮箱", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "user_email" + }, + { + "objectType": "TableField_MYSQL", + "name": "pid", + "type": "bigint", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "父账户,默认0", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "pid" + }, + { + "objectType": "TableField_MYSQL", + "name": "wx_appid", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "微信id", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "wx_appid" + }, + { + "objectType": "TableField_MYSQL", + "name": "avatar", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "图标", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "avatar" + }, + { + "objectType": "TableField_MYSQL", + "name": "user_phone", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "电话", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "user_phone" + }, + { + "objectType": "TableField_MYSQL", + "name": "user_desc", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "用户描述", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "user_desc" + }, + { + "objectType": "TableField_MYSQL", + "name": "status", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "状态:0默认正常,1禁用,2临时锁定", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "status" + }, + { + "objectType": "TableField_MYSQL", + "name": "have_children", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "存在子账户:默认0,不存在", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "have_children" + }, + { + "objectType": "TableField_MYSQL", + "name": "createby", + "type": "bigint", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createby" + }, + { + "objectType": "TableField_MYSQL", + "name": "createtime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "None", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createtime" + }, + { + "objectType": "TableField_MYSQL", + "name": "updateby", + "type": "bigint", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updateby" + }, + { + "objectType": "TableField_MYSQL", + "name": "updatetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updatetime" + }, + { + "objectType": "TableField_MYSQL", + "name": "deleteby", + "type": "bigint", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deleteby" + }, + { + "objectType": "TableField_MYSQL", + "name": "deletetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deletetime" + } + ], + "indexes": [ + { + "objectType": "Index_MYSQL", + "name": "pac_index", + "type": "UNIQUE", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "IsVisibleIndex": true, + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + }, + { + "objectType": "Index_MYSQL", + "name": "username", + "type": "UNIQUE", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "IsVisibleIndex": true, + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "username", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + } + ], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "user_id", + "keyLength": -2147483648, + "order": "", + "oldName": "" + } + ], + "oldName": "", + "indexMethod": "", + "comment": "" + }, + "foreignKeys": [], + "checks": [], + "triggers": [], + "tablePartitions": [] + }, + { + "objectType": "Table_MYSQL", + "name": "pac_core_env", + "comment": "系统内运行时的环境变量", + "engine": "", + "characterSet": "", + "collation": "", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "", + "encryption": false, + "createOptions": "", + "createTime": "", + "checkTime": "", + "dataFree": 0, + "dataLength": 0, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "index", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": true, + "comment": "数据完整性确认", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "index" + }, + { + "objectType": "TableField_MYSQL", + "name": "env_id", + "type": "bigint", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "变量id", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "env_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "pid", + "type": "bigint", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "env分组依据,默认0为没有分组", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "pid" + }, + { + "objectType": "TableField_MYSQL", + "name": "env_name", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "变量名称", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "env_name" + }, + { + "objectType": "TableField_MYSQL", + "name": "env_key", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "变量标识", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "env_key" + }, + { + "objectType": "TableField_MYSQL", + "name": "env_val", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "变量值", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "env_val" + }, + { + "objectType": "TableField_MYSQL", + "name": "val_is_dict", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "数值来源于字典:默认0不来源于字典,1来源于字典", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "val_is_dict" + }, + { + "objectType": "TableField_MYSQL", + "name": "env_desc", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "变量描述", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "env_desc" + }, + { + "objectType": "TableField_MYSQL", + "name": "have_children", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "含有子节点:默认0不含有,1含有", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "have_children" + }, + { + "objectType": "TableField_MYSQL", + "name": "own_of_pac", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "是否属于pac:默认0属于最高所有权,其他用户不可见", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "own_of_pac" + }, + { + "objectType": "TableField_MYSQL", + "name": "order_num", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "排序:默认0", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "order_num" + }, + { + "objectType": "TableField_MYSQL", + "name": "status", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "变量状态:0正常、1不可用", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "status" + }, + { + "objectType": "TableField_MYSQL", + "name": "service_of", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "所属服务:0归属于当前服务:pacAuth", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "service_of" + }, + { + "objectType": "TableField_MYSQL", + "name": "createby", + "type": "bigint", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createby" + }, + { + "objectType": "TableField_MYSQL", + "name": "createtime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createtime" + }, + { + "objectType": "TableField_MYSQL", + "name": "updateby", + "type": "bigint", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updateby" + }, + { + "objectType": "TableField_MYSQL", + "name": "updatetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updatetime" + }, + { + "objectType": "TableField_MYSQL", + "name": "deleteby", + "type": "bigint", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deleteby" + }, + { + "objectType": "TableField_MYSQL", + "name": "deletetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deletetime" + } + ], + "indexes": [ + { + "objectType": "Index_MYSQL", + "name": "pac_index", + "type": "UNIQUE", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "IsVisibleIndex": true, + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + } + ], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "env_id", + "keyLength": -2147483648, + "order": "", + "oldName": "" + } + ], + "oldName": "", + "indexMethod": "", + "comment": "" + }, + "foreignKeys": [], + "checks": [], + "triggers": [], + "tablePartitions": [] + }, + { + "objectType": "Table_MYSQL", + "name": "pac_core_dict", + "comment": "核心字典", + "engine": "", + "characterSet": "", + "collation": "", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "", + "encryption": false, + "createOptions": "", + "createTime": "", + "checkTime": "", + "dataFree": 0, + "dataLength": 0, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "index", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": true, + "comment": "数据完整性确认", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "index" + }, + { + "objectType": "TableField_MYSQL", + "name": "dict_id", + "type": "bigint", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "字典项id,", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "dict_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "pid", + "type": "bigint", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": true, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "字典项的父id", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "pid" + }, + { + "objectType": "TableField_MYSQL", + "name": "dict_key", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "字典项的唯一标识,id的显式表达", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "dict_key" + }, + { + "objectType": "TableField_MYSQL", + "name": "dict_desc", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "字典项描述", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "dict_desc" + }, + { + "objectType": "TableField_MYSQL", + "name": "dict_name", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "字典项名称", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "dict_name" + }, + { + "objectType": "TableField_MYSQL", + "name": "dict_icon", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Empty", + "defaultValue": "Empty String", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "字典项的图标", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "dict_icon" + }, + { + "objectType": "TableField_MYSQL", + "name": "dict_type", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": true, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "字典类型:0字符串、1图片、2图标,后面可拓展", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "dict_type" + }, + { + "objectType": "TableField_MYSQL", + "name": "own_of_pac", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": true, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "是否属于pac:默认0属于最高所有权,其他用户不可见", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "own_of_pac" + }, + { + "objectType": "TableField_MYSQL", + "name": "order_num", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": true, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "排序,默认0", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "order_num" + }, + { + "objectType": "TableField_MYSQL", + "name": "status", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": true, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "字典状态:0正常、1禁用可读", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "status" + }, + { + "objectType": "TableField_MYSQL", + "name": "service_of", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Empty", + "defaultValue": "Empty String", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "所属服务:0归属于当前服务:pacAuth", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "service_of" + }, + { + "objectType": "TableField_MYSQL", + "name": "have_children", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "是否含有子节点:默认0不含有,1含有", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "have_children" + }, + { + "objectType": "TableField_MYSQL", + "name": "createby", + "type": "bigint", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createby" + }, + { + "objectType": "TableField_MYSQL", + "name": "createtime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createtime" + }, + { + "objectType": "TableField_MYSQL", + "name": "updateby", + "type": "bigint", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updateby" + }, + { + "objectType": "TableField_MYSQL", + "name": "updatetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updatetime" + }, + { + "objectType": "TableField_MYSQL", + "name": "deleteby", + "type": "bigint", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deleteby" + }, + { + "objectType": "TableField_MYSQL", + "name": "deletetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deletetime" + } + ], + "indexes": [ + { + "objectType": "Index_MYSQL", + "name": "pac_index", + "type": "UNIQUE", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "IsVisibleIndex": true, + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + } + ], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "dict_id", + "keyLength": -2147483648, + "order": "", + "oldName": "" + } + ], + "oldName": "", + "indexMethod": "", + "comment": "" + }, + "foreignKeys": [], + "checks": [], + "triggers": [], + "tablePartitions": [] + }, + { + "objectType": "Table_MYSQL", + "name": "pac_core_menu", + "comment": "系统菜单", + "engine": "", + "characterSet": "", + "collation": "", + "autoIncrement": 0, + "tablespace": "", + "storage": "", + "insertMethod": "", + "connection": "", + "checksum": false, + "rowFormat": "", + "avgRowLength": 0, + "maxRows": 0, + "minRows": 0, + "keyBlockSize": 0, + "packKeys": "", + "delayKeyWrite": false, + "dataDirectory": "", + "indexDirectory": "", + "statsAutoRecalc": "", + "statsPersistent": "", + "statsSamplePages": 0, + "union": "", + "pageCheckSum": false, + "transactional": false, + "compression": "", + "oldName": "", + "encryption": false, + "createOptions": "", + "createTime": "", + "checkTime": "", + "dataFree": 0, + "dataLength": 0, + "indexLength": 0, + "maxDataLength": 0, + "rows": 0, + "updateTime": "", + "DDL": "", + "partitionBy": "", + "partitionByExpr": "", + "partitions": 0, + "partitionKeyAlgorithm": "", + "subPartitionBy": "", + "subPartitionByExpr": "", + "subPartitions": 0, + "subPartitionKeyAlgorithm": "", + "fields": [ + { + "objectType": "TableField_MYSQL", + "name": "index", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": true, + "comment": "数据完整性确认", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "index" + }, + { + "objectType": "TableField_MYSQL", + "name": "menu_id", + "type": "bigint", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "菜单ID", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "menu_id" + }, + { + "objectType": "TableField_MYSQL", + "name": "pid", + "type": "bigint", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "父ID", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "pid" + }, + { + "objectType": "TableField_MYSQL", + "name": "have_children", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "是否含有子节点:默认0不含有", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "have_children" + }, + { + "objectType": "TableField_MYSQL", + "name": "api_path", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "后端权限地址", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "api_path" + }, + { + "objectType": "TableField_MYSQL", + "name": "web_path", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "前端路由地址", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "web_path" + }, + { + "objectType": "TableField_MYSQL", + "name": "menu_name", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "菜单名称", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "menu_name" + }, + { + "objectType": "TableField_MYSQL", + "name": "menu_desc", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "菜单描述", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "menu_desc" + }, + { + "objectType": "TableField_MYSQL", + "name": "menu_type", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "菜单类型:来源于字典,默认0为默认类型", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "menu_type" + }, + { + "objectType": "TableField_MYSQL", + "name": "menu_icon", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "菜单图标", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "menu_icon" + }, + { + "objectType": "TableField_MYSQL", + "name": "is_frame", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "是否是外链:默认0不是外链,1时外链", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "is_frame" + }, + { + "objectType": "TableField_MYSQL", + "name": "is_visible", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "是否为显示的菜单:默认0显示、1为不显示", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "is_visible" + }, + { + "objectType": "TableField_MYSQL", + "name": "is_activate", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "是否激活:默认0为激活可用状态,1为不可用", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "is_activate" + }, + { + "objectType": "TableField_MYSQL", + "name": "order_num", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "排序:默认0", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "order_num" + }, + { + "objectType": "TableField_MYSQL", + "name": "status", + "type": "int", + "length": -2147483648, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "菜单状态:0正常、1禁用", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "status" + }, + { + "objectType": "TableField_MYSQL", + "name": "service_of", + "type": "varchar", + "length": 255, + "decimals": -2147483648, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "0", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "所属服务:0归属于当前服务:pacAuth", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "service_of" + }, + { + "objectType": "TableField_MYSQL", + "name": "createby", + "type": "bigint", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createby" + }, + { + "objectType": "TableField_MYSQL", + "name": "createtime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": false, + "defaultType": "Others", + "defaultValue": "", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "创建时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "createtime" + }, + { + "objectType": "TableField_MYSQL", + "name": "updateby", + "type": "bigint", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updateby" + }, + { + "objectType": "TableField_MYSQL", + "name": "updatetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "更新时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "updatetime" + }, + { + "objectType": "TableField_MYSQL", + "name": "deleteby", + "type": "bigint", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除人", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deleteby" + }, + { + "objectType": "TableField_MYSQL", + "name": "deletetime", + "type": "datetime", + "length": 0, + "decimals": 0, + "isUnsigned": false, + "isZeroFill": false, + "setEnumValues": "", + "isBinary": false, + "charset": "", + "collation": "", + "isNullable": true, + "defaultType": "Null", + "defaultValue": "NULL", + "isOnUpdateCurrentTimestamp": false, + "isAutoInc": false, + "comment": "删除时间", + "columnFormat": "", + "storage": "", + "isVirtual": false, + "isGeneratedAlways": false, + "virtualExpr": "", + "virtualType": "", + "oldName": "deletetime" + } + ], + "indexes": [ + { + "objectType": "Index_MYSQL", + "name": "pac_index", + "type": "UNIQUE", + "method": "", + "comment": "", + "oldName": "", + "online": false, + "keyBlockSize": 0, + "parser": "", + "algorithm": "", + "lock": "", + "collation": "", + "cardinality": "", + "packed": "", + "IsVisibleIndex": true, + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "index", + "keyLength": 0, + "order": "", + "oldName": "" + } + ] + } + ], + "primaryKey": { + "objectType": "PrimaryKey_MYSQL", + "name": "", + "fields": [ + { + "objectType": "IndexField_MYSQL", + "name": "menu_id", + "keyLength": -2147483648, + "order": "", + "oldName": "" + } + ], + "oldName": "", + "indexMethod": "", + "comment": "" + }, + "foreignKeys": [], + "checks": [], + "triggers": [], + "tablePartitions": [] + } + ], + "views": [] + } + ] + }, + "diagrams": [ + { + "name": "Diagram 1", + "paperWidth": 2, + "paperHeight": 2, + "tableFont": "Arial Unicode MS", + "tableFontSize": 14, + "isBalckWhite": false, + "showDBSchemaName": true, + "showViewRelations": true, + "notation": "default", + "showFieldComment": true, + "showTableComment": true, + "shapes": [ + { + "type": "table", + "schemaName": "pacAuth0_2", + "tableName": "pac_core_env", + "x": 30, + "y": 610, + "width": 453, + "height": 450, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "pacAuth0_2", + "tableName": "pac_core_service", + "x": 1080, + "y": 610, + "width": 284, + "height": 270, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "pacAuth0_2", + "tableName": "pac_core_dict", + "x": 550, + "y": 610, + "width": 453, + "height": 450, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "pacAuth0_2", + "tableName": "pac_core_menu", + "x": 30, + "y": 30, + "width": 393, + "height": 510, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "pacAuth0_2", + "tableName": "pac_auth_dept", + "x": 890, + "y": 30, + "width": 306, + "height": 410, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "pacAuth0_2", + "tableName": "pac_auth_post", + "x": 860, + "y": 1130, + "width": 272, + "height": 330, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "pacAuth0_2", + "tableName": "pac_auth_role", + "x": 30, + "y": 1130, + "width": 758, + "height": 410, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "pacAuth0_2", + "tableName": "pac_auth_role_data_scope", + "x": 1200, + "y": 1130, + "width": 285, + "height": 270, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "pacAuth0_2", + "tableName": "pac_auth_user", + "x": 490, + "y": 30, + "width": 327, + "height": 470, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "pacAuth0_2", + "tableName": "pac_auth_link_role_menu", + "x": 1270, + "y": 30, + "width": 279, + "height": 250, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "pacAuth0_2", + "tableName": "pac_auth_link_user_role", + "x": 1430, + "y": 610, + "width": 270, + "height": 250, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "pacAuth0_2", + "tableName": "pac_auth_link_user_post", + "x": 1560, + "y": 1130, + "width": 273, + "height": 250, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + }, + { + "type": "table", + "schemaName": "pacAuth0_2", + "tableName": "pac_auth_link_user_dept", + "x": 30, + "y": 1610, + "width": 274, + "height": 250, + "isBold": false, + "titleColor": { + "r": 55, + "g": 131, + "b": 192, + "a": 1 + } + } + ], + "layers": [], + "relations": [], + "viewRelations": [] + } + ] +} \ No newline at end of file diff --git a/docs/swaggerApi.md b/docs/swaggerApi.md new file mode 100644 index 0000000..c3019d6 --- /dev/null +++ b/docs/swaggerApi.md @@ -0,0 +1,337 @@ +这些装饰器是 `@nestjs/swagger` 包提供的一部分,用于增强 Swagger 文档的可读性和完整性。以下是每个装饰器的详细介绍和使用方法: + +### @ApiOperation() +- **位置**: 方法 +- **用途**: 为 API 操作添加一个简短的描述。 + +```typescript +@ApiOperation({ summary: '描述这个操作', description: '更详细的描述信息' }) +``` + +### @ApiResponse() +- **位置**: 方法/控制器 +- **用途**: 定义一个预期的响应。 + +```typescript +@ApiResponse({ status: 200, description: '描述响应', type: SomeType }) +``` + +### @ApiProduces() +- **位置**: 方法/控制器 +- **用途**: 指定 API 可以返回哪些 MIME 类型。 + +```typescript +@ApiProduces(['application/json']) +``` + +### @ApiConsumes() +- **位置**: 方法/控制器 +- **用途**: 指定 API 可以接收哪些 MIME 类型。 + +```typescript +@ApiConsumes(['application/json']) +``` + +### @ApiBearerAuth() +- **位置**: 方法/控制器 +- **用途**: 表示该 API 使用 Bearer Token 进行身份验证。 + +```typescript +@ApiBearerAuth() +``` + +### @ApiOAuth2() +- **位置**: 方法/控制器 +- **用途**: 表示该 API 使用 OAuth2 进行身份验证,并允许指定授权流程的详细信息。 + +```typescript +@ApiOAuth2(['read', 'write']) +``` + +### @ApiBasicAuth() +- **位置**: 方法/控制器 +- **用途**: 表示该 API 使用基本认证。 + +```typescript +@ApiBasicAuth() +``` + +### @ApiSecurity() +- **位置**: 方法/控制器 +- **用途**: 为 API 添加安全定义的引用。 + +```typescript +@ApiSecurity('APIKey') +``` + +### @ApiExtraModels() +- **位置**: 方法/控制器 +- **用途**: 允许在 Swagger 文档中包含额外的模型,即使它们没有被直接使用。 + +```typescript +@ApiExtraModels(ExtraModelType) +``` + +### @ApiBody() +- **位置**: 方法 +- **用途**: 描述请求体。 + +```typescript +@ApiBody({ type: CreateCatDto }) +``` + +### @ApiParam() +- **位置**: 方法 +- **用途**: 描述一个路径参数或查询参数。 + +```typescript +@ApiParam({ name: 'id', required: true }) +``` + +### @ApiQuery() +- **位置**: 方法 +- **用途**: 描述一个查询参数。 + +```typescript +@ApiQuery({ name: 'query', required: false }) +``` + +### @ApiHeader() +- **位置**: 方法/控制器 +- **用途**: 描述一个 HTTP 头参数。 + +```typescript +@ApiHeader({ name: 'X-Custom-Header', required: false }) +``` + +### @ApiExcludeEndpoint() +- **位置**: 方法 +- **用途**: 从 Swagger 文档中排除一个特定的端点。 + +```typescript +@ApiExcludeEndpoint() +``` + +### @ApiTags() +- **位置**: 方法/控制器 +- **用途**: 为 API 端点添加一个或多个标签。 + +```typescript +@ApiTags('cats') +``` + +### @ApiProperty() +- **位置**: 模型 +- **用途**: 为模型的属性添加元数据。 + +```typescript +class CatDto { + @ApiProperty() + name: string; +} +``` + +### @ApiPropertyOptional() +- **位置**: 模型 +- **用途**: 表示模型属性是可选的。 + +```typescript +class CatDto { + @ApiPropertyOptional() + age?: number; +} +``` + +### @ApiHideProperty() +- **位置**: 模型 +- **用途**: 在 Swagger 文档中隐藏模型的属性。 + +```typescript +class CatDto { + @ApiHideProperty() + privateInfo: string; +} +``` + +### @ApiExtension() +- **位置**: 模型 +- **用途**: 添加自定义的字段到 Swagger 模型定义。 + +```typescript +class CatDto { + @ApiExtension('x-omitempty', true) + @ApiProperty() + name: string; +} +``` + +使用这些装饰器,你可以为 NestJS 应用中的每个 API 端点提供丰富的 Swagger 文档,从而帮助开发者更好地理解和使用你的 API。 + + + + +`@ApiProperty` 装饰器有许多参数,可以用来描述属性的各种信息。以下是常用的参数及其描述: + +### 常用参数 + +1. **description**: 属性的描述。 + ```typescript + @ApiProperty({ description: 'The username of the user' }) + username: string; + ``` + +2. **type**: 属性的数据类型。可以是基本类型、数组或类类型。 + ```typescript + @ApiProperty({ type: String }) + username: string; + + @ApiProperty({ type: [String] }) + roles: string[]; + ``` + +3. **example**: 属性的示例值。 + ```typescript + @ApiProperty({ example: 'john_doe' }) + username: string; + ``` + +4. **enum**: 属性的枚举值。 + ```typescript + enum UserRole { + Admin = 'admin', + User = 'user', + } + + @ApiProperty({ enum: UserRole }) + role: UserRole; + ``` + +5. **default**: 属性的默认值。 + ```typescript + @ApiProperty({ default: 'user' }) + role: string; + ``` + +6. **required**: 属性是否为必需的(默认为 true)。 + ```typescript + @ApiProperty({ required: false }) + email?: string; + ``` + +7. **format**: 属性的数据格式,例如 `email`, `date-time`, `uuid` 等。 + ```typescript + @ApiProperty({ format: 'email' }) + email: string; + ``` + +8. **minimum**: 数字属性的最小值。 + ```typescript + @ApiProperty({ minimum: 1 }) + age: number; + ``` + +9. **maximum**: 数字属性的最大值。 + ```typescript + @ApiProperty({ maximum: 100 }) + age: number; + ``` + +10. **minLength**: 字符串属性的最小长度。 + ```typescript + @ApiProperty({ minLength: 5 }) + password: string; + ``` + +11. **maxLength**: 字符串属性的最大长度。 + ```typescript + @ApiProperty({ maxLength: 20 }) + username: string; + ``` + +12. **minItems**: 数组属性的最小项目数。 + ```typescript + @ApiProperty({ minItems: 1 }) + tags: string[]; + ``` + +13. **maxItems**: 数组属性的最大项目数。 + ```typescript + @ApiProperty({ maxItems: 10 }) + tags: string[]; + ``` + +14. **uniqueItems**: 数组项目是否唯一。 + ```typescript + @ApiProperty({ uniqueItems: true }) + tags: string[]; + ``` + +15. **pattern**: 字符串属性的正则表达式模式。 + ```typescript + @ApiProperty({ pattern: '/^[a-z0-9]+$/i' }) + username: string; + ``` + +### 示例 + +以下是一个包含多个 `@ApiProperty` 参数的示例 DTO 类: + +```typescript +import { IsString, Length, IsEmail, IsEnum, IsOptional } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; + +enum UserRole { + Admin = 'admin', + User = 'user', +} + +export class CreateUserDto { + @ApiProperty({ + description: 'The username of the user', + example: 'john_doe', + minLength: 5, + maxLength: 20, + pattern: '^[a-zA-Z0-9]+$', + }) + @IsString() + @Length(5, 20) + username: string; + + @ApiProperty({ + description: 'The password of the user', + example: 's3cr3t', + minLength: 8, + }) + @IsString() + @Length(8, 50) + password: string; + + @ApiProperty({ + description: 'The email of the user', + example: 'john_doe@example.com', + format: 'email', + }) + @IsEmail() + email: string; + + @ApiProperty({ + description: 'The role of the user', + enum: UserRole, + example: UserRole.User, + default: UserRole.User, + }) + @IsEnum(UserRole) + role: UserRole; + + @ApiProperty({ + description: 'The tags associated with the user', + type: [String], + example: ['admin', 'user'], + required: false, + }) + @IsOptional() + tags?: string[]; +} +``` + +通过配置这些参数,可以为属性提供丰富的元数据,从而生成更详细的 Swagger 文档。 diff --git a/docs/生命周期.md b/docs/生命周期.md new file mode 100644 index 0000000..461c204 --- /dev/null +++ b/docs/生命周期.md @@ -0,0 +1,58 @@ +在 NestJS 应用中,拦截器(Interceptors)、中间件(Middlewares)、过滤器(Filters)、管道(Pipes)、守卫(Guards)和控制器(Controllers)都是构成应用程序请求-响应周期的不同组件,每个组件都有其特定的用途和执行时机。下面是它们各自的作用和区别: + +1. **控制器(Controllers)**: + - 作用:处理 HTTP 请求并返回响应。控制器定义了应用程序的 API 端点。 + - 执行时机:请求被路由到特定的控制器方法时。 + +2. **中间件(Middlewares)**: + - 作用:在请求处理管道的任何阶段执行自定义代码,可以处理请求体、修改请求头、结束请求或将请求传递给下一个中间件。 + - 执行时机:请求进入 NestJS 应用后,控制器之前。 + +3. **守卫(Guards)**: + - 作用:保护路由或端点,可以基于权限、角色或其他条件允许或拒绝请求。 + - 执行时机:请求通过中间件后,管道中的下一个拦截器、过滤器或管道之前。 + +4. **过滤器(Filters)**: + - 作用:处理请求过程中发生的错误。可以捕获异常或处理应用程序错误。 + - 执行时机:请求通过守卫后,如果发生错误,响应通过管道之前。 + +5. **管道(Pipes)**: + - 作用:用于数据验证和转换,可以应用于路由处理程序的参数、返回值或 HTTP 客户端。 + - 执行时机:请求通过守卫后,控制器方法之前。 + +6. **拦截器(Interceptors)**: + - 作用:拦截请求或响应,可以改变请求数据、响应数据或执行附加操作。 + - 执行时机:请求通过管道后,控制器方法之后,响应通过管道之前。 + +7. **守卫(Guards)**(再次提及,以强调其在请求处理流程中的位置): + - 作用:守卫通常用于权限控制,确保只有符合条件的请求能够到达控制器。 + - 执行时机:在过滤器之前,管道之后。 + +这些组件按照请求处理的顺序排列如下: + +``` +请求进入应用 + | + v +中间件 + | + v +守卫 + | + v +管道 + | + v +控制器 + | + v +拦截器 + | + v +过滤器(处理错误) + | + v +响应返回给客户端 +``` + +每个组件都是 NestJS 请求处理管道中的一部分,它们协同工作,提供了一种灵活和模块化的方式来构建和管理应用程序的请求-响应周期。 diff --git a/drizzle.config.js b/drizzle.config.js new file mode 100644 index 0000000..a852738 --- /dev/null +++ b/drizzle.config.js @@ -0,0 +1,36 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: drizzle20240508 +// | @文件描述: drizzle.config.js - +// | @创建时间: 2024-05-08 15:59 +// | @更新时间: 2024-05-08 15:59 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +import { defineConfig } from 'drizzle-kit'; + +const config = { + dialect: 'mysql', + schema: './src/entities/schema.ts', + out: './src/entities', + + // 'pg' | 'mysql2' | 'better-sqlite' | 'libsql' | 'turso' + // driver: 'mysql2', + dbCredentials: { + host: '172.16.1.10', + port: 3306, + user: 'root', + password: 'Hxl1314521', + database: 'pacauth', + }, + verbose: true, + introspect: { + // 启用驼峰命名 + casing: 'camel', + }, +}; +export default defineConfig(config); diff --git a/nest-cli.json b/nest-cli.json new file mode 100644 index 0000000..f9aa683 --- /dev/null +++ b/nest-cli.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/nest-cli", + "collection": "@nestjs/schematics", + "sourceRoot": "src", + "compilerOptions": { + "deleteOutDir": true + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..1a3e094 --- /dev/null +++ b/package.json @@ -0,0 +1,98 @@ +{ + "name": "pac-auth", + "version": "0.0.1", + "description": "", + "author": "", + "type": "commonjs", + "private": true, + "license": "UNLICENSED", + "imports": { + "#/*": "./src/*", + "#config/*": "./src/config/*", + "#common/*": "./src/common/*", + "#utils/*": "./src/utils/*" + }, + "scripts": { + "build": "nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "start": "nest start", + "start:dev": "nest start --watch", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/main", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", + "test": "jest", + "test:watch": "jest --watch", + "test:cov": "jest --coverage", + "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "jest --config ./test/jest-e2e.json", + "sendEmail": "node ./test/testsend.js", + "makeEntity": "drizzle-kit introspect", + "sqlV": "drizzle-kit studio", + "getOldPackage": "pnpm outdated", + "updatePackage": "pnpm update --latest" + }, + "dependencies": { + "@fastify/static": "^7.0.4", + "@nestjs/common": "^10.3.9", + "@nestjs/config": "^3.2.2", + "@nestjs/core": "^10.3.9", + "@nestjs/platform-express": "^10.3.9", + "@nestjs/platform-fastify": "^10.3.9", + "@nestjs/swagger": "^7.3.1", + "change-case-all": "^2.1.0", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", + "colors": "^1.4.0", + "drizzle-orm": "^0.31.0", + "fastify": "^4.27.0", + "mysql2": "^3.10.0", + "nodemailer": "^6.9.13", + "redis": "^4.6.14", + "reflect-metadata": "^0.2.2", + "rxjs": "^7.8.1", + "ua-parser-js": "^1.0.38", + "winston": "^3.13.0", + "winston-daily-rotate-file": "^5.0.0" + }, + "devDependencies": { + "@nestjs/cli": "^10.3.2", + "@nestjs/schematics": "^10.1.1", + "@nestjs/testing": "^10.3.9", + "@types/express": "^4.17.21", + "@types/jest": "^29.5.12", + "@types/node": "^20.14.1", + "@types/supertest": "^6.0.2", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", + "drizzle-kit": "^0.22.1", + "eslint": "=8.42.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "jest": "^29.7.0", + "prettier": "^3.3.0", + "source-map-support": "^0.5.21", + "supertest": "^7.0.0", + "ts-jest": "^29.1.4", + "ts-loader": "^9.5.1", + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.4.5" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "rootDir": "src", + "testRegex": ".*\\.spec\\.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "collectCoverageFrom": [ + "**/*.(t|j)s" + ], + "coverageDirectory": "../coverage", + "testEnvironment": "node" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..ae949c5 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,7558 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@fastify/static': + specifier: ^7.0.4 + version: 7.0.4 + '@nestjs/common': + specifier: ^10.3.9 + version: 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/config': + specifier: ^3.2.2 + version: 3.2.2(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(rxjs@7.8.1) + '@nestjs/core': + specifier: ^10.3.9 + version: 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/platform-express': + specifier: ^10.3.9 + version: 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9) + '@nestjs/platform-fastify': + specifier: ^10.3.9 + version: 10.3.9(@fastify/static@7.0.4)(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1)) + '@nestjs/swagger': + specifier: ^7.3.1 + version: 7.3.1(@fastify/static@7.0.4)(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2) + change-case-all: + specifier: ^2.1.0 + version: 2.1.0 + class-transformer: + specifier: ^0.5.1 + version: 0.5.1 + class-validator: + specifier: ^0.14.1 + version: 0.14.1 + colors: + specifier: ^1.4.0 + version: 1.4.0 + drizzle-orm: + specifier: ^0.31.0 + version: 0.31.1(mysql2@3.10.0) + fastify: + specifier: ^4.27.0 + version: 4.27.0 + mysql2: + specifier: ^3.10.0 + version: 3.10.0 + nodemailer: + specifier: ^6.9.13 + version: 6.9.13 + redis: + specifier: ^4.6.14 + version: 4.6.14 + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 + rxjs: + specifier: ^7.8.1 + version: 7.8.1 + ua-parser-js: + specifier: ^1.0.38 + version: 1.0.38 + winston: + specifier: ^3.13.0 + version: 3.13.0 + winston-daily-rotate-file: + specifier: ^5.0.0 + version: 5.0.0(winston@3.13.0) + devDependencies: + '@nestjs/cli': + specifier: ^10.3.2 + version: 10.3.2(esbuild@0.19.12) + '@nestjs/schematics': + specifier: ^10.1.1 + version: 10.1.1(chokidar@3.6.0)(typescript@5.4.5) + '@nestjs/testing': + specifier: ^10.3.9 + version: 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9)) + '@types/express': + specifier: ^4.17.21 + version: 4.17.21 + '@types/jest': + specifier: ^29.5.12 + version: 29.5.12 + '@types/node': + specifier: ^20.14.1 + version: 20.14.1 + '@types/supertest': + specifier: ^6.0.2 + version: 6.0.2 + '@typescript-eslint/eslint-plugin': + specifier: ^6.0.0 + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.42.0)(typescript@5.4.5))(eslint@8.42.0)(typescript@5.4.5) + '@typescript-eslint/parser': + specifier: ^6.0.0 + version: 6.21.0(eslint@8.42.0)(typescript@5.4.5) + drizzle-kit: + specifier: ^0.22.1 + version: 0.22.2 + eslint: + specifier: '=8.42.0' + version: 8.42.0 + eslint-config-prettier: + specifier: ^9.0.0 + version: 9.1.0(eslint@8.42.0) + eslint-plugin-prettier: + specifier: ^5.0.0 + version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.42.0))(eslint@8.42.0)(prettier@3.3.0) + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + prettier: + specifier: ^3.3.0 + version: 3.3.0 + source-map-support: + specifier: ^0.5.21 + version: 0.5.21 + supertest: + specifier: ^7.0.0 + version: 7.0.0 + ts-jest: + specifier: ^29.1.4 + version: 29.1.4(@babel/core@7.24.6)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.6))(esbuild@0.19.12)(jest@29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)))(typescript@5.4.5) + ts-loader: + specifier: ^9.5.1 + version: 9.5.1(typescript@5.4.5)(webpack@5.90.1(esbuild@0.19.12)) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.14.1)(typescript@5.4.5) + tsconfig-paths: + specifier: ^4.2.0 + version: 4.2.0 + typescript: + specifier: ^5.4.5 + version: 5.4.5 + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@angular-devkit/core@17.1.2': + resolution: {integrity: sha512-ku+/W/HMCBacSWFppenr9y6Lx8mDuTuQvn1IkTyBLiJOpWnzgVbx9kHDeaDchGa1PwLlJUBBrv27t3qgJOIDPw==} + engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^3.5.2 + peerDependenciesMeta: + chokidar: + optional: true + + '@angular-devkit/schematics-cli@17.1.2': + resolution: {integrity: sha512-bvXykYzSST05qFdlgIzUguNOb3z0hCa8HaTwtqdmQo9aFPf+P+/AC56I64t1iTchMjQtf3JrBQhYM25gUdcGbg==} + engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + hasBin: true + + '@angular-devkit/schematics@17.1.2': + resolution: {integrity: sha512-8S9RuM8olFN/gwN+mjbuF1CwHX61f0i59EGXz9tXLnKRUTjsRR+8vVMTAmX0dvVAT5fJTG/T69X+HX7FeumdqA==} + engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + + '@babel/code-frame@7.24.6': + resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.24.6': + resolution: {integrity: sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.24.6': + resolution: {integrity: sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.24.6': + resolution: {integrity: sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.24.6': + resolution: {integrity: sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-environment-visitor@7.24.6': + resolution: {integrity: sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-function-name@7.24.6': + resolution: {integrity: sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-hoist-variables@7.24.6': + resolution: {integrity: sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.6': + resolution: {integrity: sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.24.6': + resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.24.6': + resolution: {integrity: sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-simple-access@7.24.6': + resolution: {integrity: sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.24.6': + resolution: {integrity: sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.6': + resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.6': + resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.24.6': + resolution: {integrity: sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.24.6': + resolution: {integrity: sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.6': + resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.24.6': + resolution: {integrity: sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.24.6': + resolution: {integrity: sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.24.6': + resolution: {integrity: sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.24.6': + resolution: {integrity: sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.24.6': + resolution: {integrity: sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.24.6': + resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@dabh/diagnostics@2.0.3': + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + + '@esbuild-kit/core-utils@3.3.2': + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + + '@esbuild-kit/esm-loader@2.6.5': + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + + '@esbuild/aix-ppc64@0.19.12': + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.19.12': + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.19.12': + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.19.12': + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.19.12': + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.19.12': + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.19.12': + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.19.12': + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.19.12': + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.19.12': + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.19.12': + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.19.12': + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.19.12': + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.19.12': + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.19.12': + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.19.12': + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.19.12': + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.19.12': + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.19.12': + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.19.12': + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.19.12': + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.19.12': + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.19.12': + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.10.1': + resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.42.0': + resolution: {integrity: sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@fastify/accept-negotiator@1.1.0': + resolution: {integrity: sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==} + engines: {node: '>=14'} + + '@fastify/ajv-compiler@3.5.0': + resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==} + + '@fastify/cors@9.0.1': + resolution: {integrity: sha512-YY9Ho3ovI+QHIL2hW+9X4XqQjXLjJqsU+sMV/xFsxZkE8p3GNnYVFpoOxF7SsP5ZL76gwvbo3V9L+FIekBGU4Q==} + + '@fastify/error@3.4.1': + resolution: {integrity: sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==} + + '@fastify/fast-json-stringify-compiler@4.3.0': + resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} + + '@fastify/formbody@7.4.0': + resolution: {integrity: sha512-H3C6h1GN56/SMrZS8N2vCT2cZr7mIHzBHzOBa5OPpjfB/D6FzP9mMpE02ZzrFX0ANeh0BAJdoXKOF2e7IbV+Og==} + + '@fastify/merge-json-schemas@0.1.1': + resolution: {integrity: sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==} + + '@fastify/middie@8.3.1': + resolution: {integrity: sha512-qrQ8U3iCdjNum3+omnIvAyz21ifFx+Pp5jYW7PJJ7b9ueKTCPXsH6vEvaZQrjEZvOpTnWte+CswfBODWD0NqYQ==} + + '@fastify/send@2.1.0': + resolution: {integrity: sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA==} + + '@fastify/static@7.0.4': + resolution: {integrity: sha512-p2uKtaf8BMOZWLs6wu+Ihg7bWNBdjNgCwDza4MJtTqg+5ovKmcbgbR9Xs5/smZ1YISfzKOCNYmZV8LaCj+eJ1Q==} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@ljharb/through@2.3.13': + resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} + engines: {node: '>= 0.4'} + + '@lukeed/csprng@1.1.0': + resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} + engines: {node: '>=8'} + + '@lukeed/ms@2.0.2': + resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} + engines: {node: '>=8'} + + '@microsoft/tsdoc@0.14.2': + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + + '@nestjs/cli@10.3.2': + resolution: {integrity: sha512-aWmD1GLluWrbuC4a1Iz/XBk5p74Uj6nIVZj6Ov03JbTfgtWqGFLtXuMetvzMiHxfrHehx/myt2iKAPRhKdZvTg==} + engines: {node: '>= 16.14'} + hasBin: true + peerDependencies: + '@swc/cli': ^0.1.62 || ^0.3.0 + '@swc/core': ^1.3.62 + peerDependenciesMeta: + '@swc/cli': + optional: true + '@swc/core': + optional: true + + '@nestjs/common@10.3.9': + resolution: {integrity: sha512-JAQONPagMa+sy/fcIqh/Hn3rkYQ9pQM51vXCFNOM5ujefxUVqn3gwFRMN8Y1+MxdUHipV+8daEj2jEm0IqJzOA==} + peerDependencies: + class-transformer: '*' + class-validator: '*' + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/config@3.2.2': + resolution: {integrity: sha512-vGICPOui5vE6kPz1iwQ7oCnp3qWgqxldPmBQ9onkVoKlBtyc83KJCr7CjuVtf4OdovMAVcux1d8Q6jglU2ZphA==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + rxjs: ^7.1.0 + + '@nestjs/core@10.3.9': + resolution: {integrity: sha512-NzZUfWAmaf8sqhhwoRA+CuqxQe+P4Rz8PZp5U7CdCbjyeB9ZVGcBkihcJC9wMdtiOWHRndB2J8zRfs5w06jK3w==} + peerDependencies: + '@nestjs/common': ^10.0.0 + '@nestjs/microservices': ^10.0.0 + '@nestjs/platform-express': ^10.0.0 + '@nestjs/websockets': ^10.0.0 + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + '@nestjs/websockets': + optional: true + + '@nestjs/mapped-types@2.0.5': + resolution: {integrity: sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + class-transformer: ^0.4.0 || ^0.5.0 + class-validator: ^0.13.0 || ^0.14.0 + reflect-metadata: ^0.1.12 || ^0.2.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/platform-express@10.3.9': + resolution: {integrity: sha512-si/UzobP6YUtYtCT1cSyQYHHzU3yseqYT6l7OHSMVvfG1+TqxaAqI6nmrix02LO+l1YntHRXEs3p+v9a7EfrSQ==} + peerDependencies: + '@nestjs/common': ^10.0.0 + '@nestjs/core': ^10.0.0 + + '@nestjs/platform-fastify@10.3.9': + resolution: {integrity: sha512-bw/RjGjGQsUwTlHFgSYQv58XKSti6in/X6d32G7LYemh7NYzeEhiHjtYay/TpvNkhqW6mrMrX3GYvl8WVH96TQ==} + peerDependencies: + '@fastify/static': ^6.0.0 || ^7.0.0 + '@fastify/view': ^7.0.0 || ^8.0.0 + '@nestjs/common': ^10.0.0 + '@nestjs/core': ^10.0.0 + peerDependenciesMeta: + '@fastify/static': + optional: true + '@fastify/view': + optional: true + + '@nestjs/schematics@10.1.1': + resolution: {integrity: sha512-o4lfCnEeIkfJhGBbLZxTuVWcGuqDCFwg5OrvpgRUBM7vI/vONvKKiB5riVNpO+JqXoH0I42NNeDb0m4V5RREig==} + peerDependencies: + typescript: '>=4.8.2' + + '@nestjs/swagger@7.3.1': + resolution: {integrity: sha512-LUC4mr+5oAleEC/a2j8pNRh1S5xhKXJ1Gal5ZdRjt9XebQgbngXCdW7JTA9WOEcwGtFZN9EnKYdquzH971LZfw==} + peerDependencies: + '@fastify/static': ^6.0.0 || ^7.0.0 + '@nestjs/common': ^9.0.0 || ^10.0.0 + '@nestjs/core': ^9.0.0 || ^10.0.0 + class-transformer: '*' + class-validator: '*' + reflect-metadata: ^0.1.12 || ^0.2.0 + peerDependenciesMeta: + '@fastify/static': + optional: true + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/testing@10.3.9': + resolution: {integrity: sha512-z24SdpZIRtYyM5s2vnu7rbBosXJY/KcAP7oJlwgFa/h/z/wg8gzyoKy5lhibH//OZNO+pYKajV5wczxuy5WeAg==} + peerDependencies: + '@nestjs/common': ^10.0.0 + '@nestjs/core': ^10.0.0 + '@nestjs/microservices': ^10.0.0 + '@nestjs/platform-express': ^10.0.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nuxtjs/opencollective@0.3.2': + resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@redis/bloom@1.2.0': + resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/client@1.5.16': + resolution: {integrity: sha512-X1a3xQ5kEMvTib5fBrHKh6Y+pXbeKXqziYuxOUo1ojQNECg4M5Etd1qqyhMap+lFUOAh8S7UYevgJHOm4A+NOg==} + engines: {node: '>=14'} + + '@redis/graph@1.1.1': + resolution: {integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/json@1.0.6': + resolution: {integrity: sha512-rcZO3bfQbm2zPRpqo82XbW8zg4G/w4W3tI7X8Mqleq9goQjAGLL7q/1n1ZX4dXEAmORVZ4s1+uKLaUOg7LrUhw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/search@1.1.6': + resolution: {integrity: sha512-mZXCxbTYKBQ3M2lZnEddwEAks0Kc7nauire8q20oA0oA/LoA+E/b5Y5KZn232ztPb1FkIGqo12vh3Lf+Vw5iTw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/time-series@1.0.5': + resolution: {integrity: sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/cookiejar@2.1.5': + resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@8.56.10': + resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/express-serve-static-core@4.19.3': + resolution: {integrity: sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==} + + '@types/express@4.17.21': + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@29.5.12': + resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/methods@1.1.4': + resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/node@20.14.1': + resolution: {integrity: sha512-T2MzSGEu+ysB/FkWfqmhV3PLyQlowdptmmgD20C6QxsS8Fmv5SjpZ1ayXaEC0S21/h5UJ9iA6W/5vSNU5l00OA==} + + '@types/qs@6.9.15': + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + + '@types/serve-static@1.15.7': + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/superagent@8.1.7': + resolution: {integrity: sha512-NmIsd0Yj4DDhftfWvvAku482PZum4DBW7U51OvS8gvOkDDY0WT1jsVyDV3hK+vplrsYw8oDwi9QxOM7U68iwww==} + + '@types/supertest@6.0.2': + resolution: {integrity: sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==} + + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + + '@types/validator@13.11.10': + resolution: {integrity: sha512-e2PNXoXLr6Z+dbfx5zSh9TRlXJrELycxiaXznp4S5+D2M3b9bqJEitNHA5923jhnB2zzFiZHa2f0SI1HoIahpg==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.32': + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + + '@typescript-eslint/eslint-plugin@6.21.0': + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/type-utils@6.21.0': + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@6.21.0': + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@webassemblyjs/ast@1.12.1': + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + + '@webassemblyjs/floating-point-hex-parser@1.11.6': + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + + '@webassemblyjs/helper-api-error@1.11.6': + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + + '@webassemblyjs/helper-buffer@1.12.1': + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + + '@webassemblyjs/helper-numbers@1.11.6': + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + + '@webassemblyjs/helper-wasm-section@1.12.1': + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + + '@webassemblyjs/ieee754@1.11.6': + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + + '@webassemblyjs/leb128@1.11.6': + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + + '@webassemblyjs/utf8@1.11.6': + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + + '@webassemblyjs/wasm-edit@1.12.1': + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + + '@webassemblyjs/wasm-gen@1.12.1': + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + + '@webassemblyjs/wasm-opt@1.12.1': + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + + '@webassemblyjs/wasm-parser@1.12.1': + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + + '@webassemblyjs/wast-printer@1.12.1': + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + abstract-logging@2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-import-assertions@1.9.0: + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ajv@8.16.0: + resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + append-field@1.0.0: + resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + avvio@8.3.2: + resolution: {integrity: sha512-st8e519GWHa/azv8S87mcJvZs4WsgTBjOw/Ih1CP6u+8SZvcOeAYNG6JbsIrAUUJJ7JfmrnOkR8ipDS+u9SIRQ==} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-preset-current-node-syntax@1.0.1: + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001627: + resolution: {integrity: sha512-4zgNiB8nTyV/tHhwZrFs88ryjls/lHiqFhrxCW4qSTeuRByBVnPYpDInchOIySWknznucaf31Z4KYqjfbrecVw==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + change-case-all@2.1.0: + resolution: {integrity: sha512-v6b0WWWkZUMHVuYk82l+WROgkUm4qEN2w5hKRNWtEOYwWqUGoi8C6xH0l1RLF1EoWqDFK6MFclmN3od6ws3/uw==} + + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjs-module-lexer@1.3.1: + resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} + + class-transformer@0.5.1: + resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} + + class-validator@0.14.1: + resolution: {integrity: sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-table3@0.6.3: + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + engines: {node: 10.* || >= 12.*} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + cluster-key-slot@1.1.2: + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + engines: {node: '>=0.10.0'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + + colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + comment-json@4.2.3: + resolution: {integrity: sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==} + engines: {node: '>= 6'} + + component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + + consola@2.15.3: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + + cookiejar@2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + denque@2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + drizzle-kit@0.22.2: + resolution: {integrity: sha512-dxluXlhT1N9bpj2eZR3N/z3u4H0PbbrBYgyouIobFF25tOt2Buy1abx26Jii96qcYV0JgxjhnuV+FBcgR0Xa0w==} + hasBin: true + + drizzle-orm@0.31.1: + resolution: {integrity: sha512-hTbYne2XX3y6sV7WSxcPH6/vNSiQSUG9VZsFI27jBMCN0OT3Ok7ao3pIT5OMAqWkzJCRFgGjAaUeTAZWPgOKag==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=3' + '@electric-sql/pglite': '>=0.1.1' + '@libsql/client': '*' + '@neondatabase/serverless': '>=0.1' + '@op-engineering/op-sqlite': '>=2' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/react': '>=18' + '@types/sql.js': '*' + '@vercel/postgres': '>=0.8.0' + '@xata.io/client': '*' + better-sqlite3: '>=7' + bun-types: '*' + expo-sqlite: '>=13.2.0' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + react: '>=18' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@electric-sql/pglite': + optional: true + '@libsql/client': + optional: true + '@neondatabase/serverless': + optional: true + '@op-engineering/op-sqlite': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/react': + optional: true + '@types/sql.js': + optional: true + '@vercel/postgres': + optional: true + '@xata.io/client': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + expo-sqlite: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + react: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.4.789: + resolution: {integrity: sha512-0VbyiaXoT++Fi2vHGo2ThOeS6X3vgRCWrjPeO2FeIAWL6ItiSJ9BqlH8LfCXe3X1IdcG+S0iLoNaxQWhfZoGzQ==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + enhanced-resolve@5.17.0: + resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} + engines: {node: '>=10.13.0'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.5.3: + resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==} + + esbuild-register@3.5.0: + resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} + peerDependencies: + esbuild: '>=0.12 <1' + + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@5.1.3: + resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.42.0: + resolution: {integrity: sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + express@4.19.2: + resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} + engines: {node: '>= 0.10.0'} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-content-type-parse@1.1.0: + resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} + + fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-json-stringify@5.16.0: + resolution: {integrity: sha512-A4bg6E15QrkuVO3f0SwIASgzMzR6XC4qTyTqhf3hYXy0iazbAdZKwkE+ox4WgzKyzM6ygvbdq3r134UjOaaAnA==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-uri@2.3.0: + resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} + + fastify-plugin@4.5.1: + resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==} + + fastify@4.27.0: + resolution: {integrity: sha512-ci9IXzbigB8dyi0mSy3faa3Bsj0xWAPb9JeT4KRzubdSb6pNhcADRUaXCBml6V1Ss/a05kbtQls5LBmhHydoTA==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + figures@5.0.0: + resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} + engines: {node: '>=14'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-stream-rotator@0.6.1: + resolution: {integrity: sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + + find-my-way@8.2.0: + resolution: {integrity: sha512-HdWXgFYc6b1BJcOBDBwjqWuHJj1WYiqrxSh25qtU4DabpMFdj/gSunNBQb83t+8Zt67D7CXEzJWTkxaShMTMOA==} + engines: {node: '>=14'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + fork-ts-checker-webpack-plugin@9.0.2: + resolution: {integrity: sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==} + engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + peerDependencies: + typescript: '>3.6.0' + webpack: ^5.11.0 + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + formidable@3.5.1: + resolution: {integrity: sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-monkey@1.0.6: + resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + + generic-pool@3.9.0: + resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} + engines: {node: '>= 4'} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-tsconfig@4.7.5: + resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@10.4.1: + resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} + engines: {node: '>=16 || 14 >=14.18'} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hexoid@1.0.0: + resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} + engines: {node: '>=8'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + + inquirer@9.2.12: + resolution: {integrity: sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==} + engines: {node: '>=14.18.0'} + + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.2: + resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + iterare@1.2.1: + resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} + engines: {node: '>=6'} + + jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + + jackspeak@3.3.0: + resolution: {integrity: sha512-glPiBfKguqA7v8JsXO3iLjJWZ9FV1vNpoI0I9hI9Mnk5yetO9uPLSpiCEmiVijAssv2f54HpvtzvAHfhPieiDQ==} + engines: {node: '>=14'} + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-ref-resolver@1.0.1: + resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + + jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + libphonenumber-js@1.11.2: + resolution: {integrity: sha512-V9mGLlaXN1WETzqQvSu6qf6XVAr3nFuJvWsHcuzCCCo6xUKawwSxOPTpan5CGOSKTn5w/bQuCZcLPJkyysgC3w==} + + light-my-request@5.13.0: + resolution: {integrity: sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + logform@2.6.0: + resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==} + engines: {node: '>= 12.0.0'} + + long@5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + + lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + engines: {node: 14 || >=16.14} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + lru-cache@8.0.5: + resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} + engines: {node: '>=16.14'} + + magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + + merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mnemonist@0.39.6: + resolution: {integrity: sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA==} + + moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multer@1.4.4-lts.1: + resolution: {integrity: sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==} + engines: {node: '>= 6.0.0'} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + mysql2@3.10.0: + resolution: {integrity: sha512-qx0mfWYt1DpTPkw8mAcHW/OwqqyNqBLBHvY5IjN8+icIYTjt6znrgYJ+gxqNNRpVknb5Wc/gcCM4XjbCR0j5tw==} + engines: {node: '>= 8.0'} + + named-placeholders@1.1.3: + resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==} + engines: {node: '>=12.0.0'} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + + node-emoji@1.11.0: + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + + nodemailer@6.9.13: + resolution: {integrity: sha512-7o38Yogx6krdoBf3jCAqnIN4oSQFx+fMa0I7dK1D+me9kBxx12D+/33wSb+fhOCtIxvYJ+4x4IMEhmhCKfAiOA==} + engines: {node: '>=6.0.0'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + obliterator@2.0.4: + resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + + path-to-regexp@3.2.0: + resolution: {integrity: sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==} + + path-to-regexp@6.2.2: + resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@3.0.1: + resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} + engines: {node: '>=10'} + + pino-abstract-transport@1.2.0: + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@9.1.0: + resolution: {integrity: sha512-qUcgfrlyOtjwhNLdbhoL7NR4NkHjzykAPw0V2QLFbvu/zss29h4NkRnibyFzBrNCbzCOY3WZ9hhKSwfOkNggYA==} + hasBin: true + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@3.3.0: + resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process-warning@3.0.0: + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + + qs@6.12.1: + resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + redis@4.6.14: + resolution: {integrity: sha512-GrNg/e33HtsQwNXL7kJT+iNFPSwE1IPmd7wzV3j4f2z0EYxZfZE7FVTmUysgAtqQQtg5NXF5SNLR9OdO/UHOfw==} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + ret@0.4.3: + resolution: {integrity: sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==} + engines: {node: '>=10'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@4.4.1: + resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} + engines: {node: '>=14'} + hasBin: true + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex2@3.1.0: + resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==} + + safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + engines: {node: '>=10'} + hasBin: true + + send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + + seq-queue@0.0.5: + resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + + set-cookie-parser@2.6.0: + resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + sonic-boom@4.0.1: + resolution: {integrity: sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sponge-case@2.0.3: + resolution: {integrity: sha512-i4h9ZGRfxV6Xw3mpZSFOfbXjf0cQcYmssGWutgNIfFZ2VM+YIWfD71N/kjjwK6X/AAHzBr+rciEcn/L34S8TGw==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sqlstring@2.3.3: + resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} + engines: {node: '>= 0.6'} + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superagent@9.0.2: + resolution: {integrity: sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==} + engines: {node: '>=14.18.0'} + + supertest@7.0.0: + resolution: {integrity: sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==} + engines: {node: '>=14.18.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + swagger-ui-dist@5.11.2: + resolution: {integrity: sha512-jQG0cRgJNMZ7aCoiFofnoojeSaa/+KgWaDlfgs8QN+BXoGMpxeMVY5OEnjq4OlNvF3yjftO8c9GRAgcHlO+u7A==} + + swap-case@3.0.3: + resolution: {integrity: sha512-6p4op8wE9CQv7uDFzulI6YXUw4lD9n4oQierdbFThEKVWVQcbQcUjdP27W8XE7V4QnWmnq9jueSHceyyQnqQVA==} + + symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + + synckit@0.8.8: + resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + engines: {node: ^14.18.0 || >=16.0.0} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + terser-webpack-plugin@5.3.10: + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.31.0: + resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thread-stream@3.0.2: + resolution: {integrity: sha512-cBL4xF2A3lSINV4rD5tyqnKH4z/TgWPvT+NaVhJDSwK962oo/Ye7cHSMbDzwcu7tAE1SfU6Q4XtV6Hucmi6Hlw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + title-case@3.0.3: + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toad-cache@3.7.0: + resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} + engines: {node: '>=12'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-jest@29.1.4: + resolution: {integrity: sha512-YiHwDhSvCiItoAgsKtoLFCuakDzDsJ1DLDnSouTaTmdOcOwIkSzbLXduaQ6M5DRVhuZC/NYaaZ/mtHbWMv/S6Q==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + + ts-loader@9.5.1: + resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths-webpack-plugin@4.1.0: + resolution: {integrity: sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==} + engines: {node: '>=10.13.0'} + + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + + ua-parser-js@1.0.38: + resolution: {integrity: sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==} + + uid@2.0.2: + resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} + engines: {node: '>=8'} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.0.16: + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.2.0: + resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + engines: {node: '>=10.12.0'} + + validator@13.12.0: + resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + watchpack@2.4.1: + resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} + engines: {node: '>=10.13.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webpack-node-externals@3.0.0: + resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} + engines: {node: '>=6'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.90.1: + resolution: {integrity: sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + winston-daily-rotate-file@5.0.0: + resolution: {integrity: sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==} + engines: {node: '>=8'} + peerDependencies: + winston: ^3 + + winston-transport@4.7.0: + resolution: {integrity: sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==} + engines: {node: '>= 12.0.0'} + + winston@3.13.0: + resolution: {integrity: sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==} + engines: {node: '>= 12.0.0'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@angular-devkit/core@17.1.2(chokidar@3.6.0)': + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + jsonc-parser: 3.2.0 + picomatch: 3.0.1 + rxjs: 7.8.1 + source-map: 0.7.4 + optionalDependencies: + chokidar: 3.6.0 + + '@angular-devkit/schematics-cli@17.1.2(chokidar@3.6.0)': + dependencies: + '@angular-devkit/core': 17.1.2(chokidar@3.6.0) + '@angular-devkit/schematics': 17.1.2(chokidar@3.6.0) + ansi-colors: 4.1.3 + inquirer: 9.2.12 + symbol-observable: 4.0.0 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - chokidar + + '@angular-devkit/schematics@17.1.2(chokidar@3.6.0)': + dependencies: + '@angular-devkit/core': 17.1.2(chokidar@3.6.0) + jsonc-parser: 3.2.0 + magic-string: 0.30.5 + ora: 5.4.1 + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + + '@babel/code-frame@7.24.6': + dependencies: + '@babel/highlight': 7.24.6 + picocolors: 1.0.1 + + '@babel/compat-data@7.24.6': {} + + '@babel/core@7.24.6': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6) + '@babel/helpers': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/template': 7.24.6 + '@babel/traverse': 7.24.6 + '@babel/types': 7.24.6 + convert-source-map: 2.0.0 + debug: 4.3.5 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.24.6': + dependencies: + '@babel/types': 7.24.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-compilation-targets@7.24.6': + dependencies: + '@babel/compat-data': 7.24.6 + '@babel/helper-validator-option': 7.24.6 + browserslist: 4.23.0 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-environment-visitor@7.24.6': {} + + '@babel/helper-function-name@7.24.6': + dependencies: + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 + + '@babel/helper-hoist-variables@7.24.6': + dependencies: + '@babel/types': 7.24.6 + + '@babel/helper-module-imports@7.24.6': + dependencies: + '@babel/types': 7.24.6 + + '@babel/helper-module-transforms@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-module-imports': 7.24.6 + '@babel/helper-simple-access': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 + '@babel/helper-validator-identifier': 7.24.6 + + '@babel/helper-plugin-utils@7.24.6': {} + + '@babel/helper-simple-access@7.24.6': + dependencies: + '@babel/types': 7.24.6 + + '@babel/helper-split-export-declaration@7.24.6': + dependencies: + '@babel/types': 7.24.6 + + '@babel/helper-string-parser@7.24.6': {} + + '@babel/helper-validator-identifier@7.24.6': {} + + '@babel/helper-validator-option@7.24.6': {} + + '@babel/helpers@7.24.6': + dependencies: + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 + + '@babel/highlight@7.24.6': + dependencies: + '@babel/helper-validator-identifier': 7.24.6 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + + '@babel/parser@7.24.6': + dependencies: + '@babel/types': 7.24.6 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-jsx@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-typescript@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/template@7.24.6': + dependencies: + '@babel/code-frame': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 + + '@babel/traverse@7.24.6': + dependencies: + '@babel/code-frame': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-function-name': 7.24.6 + '@babel/helper-hoist-variables': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 + debug: 4.3.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.24.6': + dependencies: + '@babel/helper-string-parser': 7.24.6 + '@babel/helper-validator-identifier': 7.24.6 + to-fast-properties: 2.0.0 + + '@bcoe/v8-coverage@0.2.3': {} + + '@colors/colors@1.5.0': + optional: true + + '@colors/colors@1.6.0': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + + '@esbuild-kit/core-utils@3.3.2': + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + + '@esbuild-kit/esm-loader@2.6.5': + dependencies: + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.7.5 + + '@esbuild/aix-ppc64@0.19.12': + optional: true + + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm64@0.19.12': + optional: true + + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-arm@0.19.12': + optional: true + + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/android-x64@0.19.12': + optional: true + + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.19.12': + optional: true + + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.19.12': + optional: true + + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.19.12': + optional: true + + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.19.12': + optional: true + + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.19.12': + optional: true + + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-arm@0.19.12': + optional: true + + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.19.12': + optional: true + + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.19.12': + optional: true + + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.19.12': + optional: true + + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.19.12': + optional: true + + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.19.12': + optional: true + + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.19.12': + optional: true + + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/linux-x64@0.19.12': + optional: true + + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.19.12': + optional: true + + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.19.12': + optional: true + + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.19.12': + optional: true + + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.19.12': + optional: true + + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.19.12': + optional: true + + '@esbuild/win32-x64@0.18.20': + optional: true + + '@esbuild/win32-x64@0.19.12': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.42.0)': + dependencies: + eslint: 8.42.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.10.1': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.5 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.42.0': {} + + '@fastify/accept-negotiator@1.1.0': {} + + '@fastify/ajv-compiler@3.5.0': + dependencies: + ajv: 8.16.0 + ajv-formats: 2.1.1(ajv@8.16.0) + fast-uri: 2.3.0 + + '@fastify/cors@9.0.1': + dependencies: + fastify-plugin: 4.5.1 + mnemonist: 0.39.6 + + '@fastify/error@3.4.1': {} + + '@fastify/fast-json-stringify-compiler@4.3.0': + dependencies: + fast-json-stringify: 5.16.0 + + '@fastify/formbody@7.4.0': + dependencies: + fast-querystring: 1.1.2 + fastify-plugin: 4.5.1 + + '@fastify/merge-json-schemas@0.1.1': + dependencies: + fast-deep-equal: 3.1.3 + + '@fastify/middie@8.3.1': + dependencies: + '@fastify/error': 3.4.1 + fastify-plugin: 4.5.1 + path-to-regexp: 6.2.2 + reusify: 1.0.4 + + '@fastify/send@2.1.0': + dependencies: + '@lukeed/ms': 2.0.2 + escape-html: 1.0.3 + fast-decode-uri-component: 1.0.1 + http-errors: 2.0.0 + mime: 3.0.0 + + '@fastify/static@7.0.4': + dependencies: + '@fastify/accept-negotiator': 1.1.0 + '@fastify/send': 2.1.0 + content-disposition: 0.5.4 + fastify-plugin: 4.5.1 + fastq: 1.17.1 + glob: 10.4.1 + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.5 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.7 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 20.14.1 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 20.14.1 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.2.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.24.6 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.7 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.14.1 + '@types/yargs': 17.0.32 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@ljharb/through@2.3.13': + dependencies: + call-bind: 1.0.7 + + '@lukeed/csprng@1.1.0': {} + + '@lukeed/ms@2.0.2': {} + + '@microsoft/tsdoc@0.14.2': {} + + '@nestjs/cli@10.3.2(esbuild@0.19.12)': + dependencies: + '@angular-devkit/core': 17.1.2(chokidar@3.6.0) + '@angular-devkit/schematics': 17.1.2(chokidar@3.6.0) + '@angular-devkit/schematics-cli': 17.1.2(chokidar@3.6.0) + '@nestjs/schematics': 10.1.1(chokidar@3.6.0)(typescript@5.3.3) + chalk: 4.1.2 + chokidar: 3.6.0 + cli-table3: 0.6.3 + commander: 4.1.1 + fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.3.3)(webpack@5.90.1(esbuild@0.19.12)) + glob: 10.3.10 + inquirer: 8.2.6 + node-emoji: 1.11.0 + ora: 5.4.1 + rimraf: 4.4.1 + shelljs: 0.8.5 + source-map-support: 0.5.21 + tree-kill: 1.2.2 + tsconfig-paths: 4.2.0 + tsconfig-paths-webpack-plugin: 4.1.0 + typescript: 5.3.3 + webpack: 5.90.1(esbuild@0.19.12) + webpack-node-externals: 3.0.0 + transitivePeerDependencies: + - esbuild + - uglify-js + - webpack-cli + + '@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)': + dependencies: + iterare: 1.2.1 + reflect-metadata: 0.2.2 + rxjs: 7.8.1 + tslib: 2.6.2 + uid: 2.0.2 + optionalDependencies: + class-transformer: 0.5.1 + class-validator: 0.14.1 + + '@nestjs/config@3.2.2(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(rxjs@7.8.1)': + dependencies: + '@nestjs/common': 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + dotenv: 16.4.5 + dotenv-expand: 10.0.0 + lodash: 4.17.21 + rxjs: 7.8.1 + uuid: 9.0.1 + + '@nestjs/core@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1)': + dependencies: + '@nestjs/common': 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nuxtjs/opencollective': 0.3.2 + fast-safe-stringify: 2.1.1 + iterare: 1.2.1 + path-to-regexp: 3.2.0 + reflect-metadata: 0.2.2 + rxjs: 7.8.1 + tslib: 2.6.2 + uid: 2.0.2 + optionalDependencies: + '@nestjs/platform-express': 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9) + transitivePeerDependencies: + - encoding + + '@nestjs/mapped-types@2.0.5(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)': + dependencies: + '@nestjs/common': 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + reflect-metadata: 0.2.2 + optionalDependencies: + class-transformer: 0.5.1 + class-validator: 0.14.1 + + '@nestjs/platform-express@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9)': + dependencies: + '@nestjs/common': 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/core': 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1) + body-parser: 1.20.2 + cors: 2.8.5 + express: 4.19.2 + multer: 1.4.4-lts.1 + tslib: 2.6.2 + transitivePeerDependencies: + - supports-color + + '@nestjs/platform-fastify@10.3.9(@fastify/static@7.0.4)(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1))': + dependencies: + '@fastify/cors': 9.0.1 + '@fastify/formbody': 7.4.0 + '@fastify/middie': 8.3.1 + '@nestjs/common': 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/core': 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1) + fastify: 4.27.0 + light-my-request: 5.13.0 + path-to-regexp: 3.2.0 + tslib: 2.6.2 + optionalDependencies: + '@fastify/static': 7.0.4 + + '@nestjs/schematics@10.1.1(chokidar@3.6.0)(typescript@5.3.3)': + dependencies: + '@angular-devkit/core': 17.1.2(chokidar@3.6.0) + '@angular-devkit/schematics': 17.1.2(chokidar@3.6.0) + comment-json: 4.2.3 + jsonc-parser: 3.2.1 + pluralize: 8.0.0 + typescript: 5.3.3 + transitivePeerDependencies: + - chokidar + + '@nestjs/schematics@10.1.1(chokidar@3.6.0)(typescript@5.4.5)': + dependencies: + '@angular-devkit/core': 17.1.2(chokidar@3.6.0) + '@angular-devkit/schematics': 17.1.2(chokidar@3.6.0) + comment-json: 4.2.3 + jsonc-parser: 3.2.1 + pluralize: 8.0.0 + typescript: 5.4.5 + transitivePeerDependencies: + - chokidar + + '@nestjs/swagger@7.3.1(@fastify/static@7.0.4)(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)': + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@nestjs/common': 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/core': 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/mapped-types': 2.0.5(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2) + js-yaml: 4.1.0 + lodash: 4.17.21 + path-to-regexp: 3.2.0 + reflect-metadata: 0.2.2 + swagger-ui-dist: 5.11.2 + optionalDependencies: + '@fastify/static': 7.0.4 + class-transformer: 0.5.1 + class-validator: 0.14.1 + + '@nestjs/testing@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9))': + dependencies: + '@nestjs/common': 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/core': 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1) + tslib: 2.6.2 + optionalDependencies: + '@nestjs/platform-express': 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9) + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@nuxtjs/opencollective@0.3.2': + dependencies: + chalk: 4.1.2 + consola: 2.15.3 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.1.1': {} + + '@redis/bloom@1.2.0(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@redis/client@1.5.16': + dependencies: + cluster-key-slot: 1.1.2 + generic-pool: 3.9.0 + yallist: 4.0.0 + + '@redis/graph@1.1.1(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@redis/json@1.0.6(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@redis/search@1.1.6(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@redis/time-series@1.0.5(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@sinclair/typebox@0.27.8': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.24.6 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.24.6 + + '@types/body-parser@1.19.5': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 20.14.1 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 20.14.1 + + '@types/cookiejar@2.1.5': {} + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 8.56.10 + '@types/estree': 1.0.5 + + '@types/eslint@8.56.10': + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.5': {} + + '@types/express-serve-static-core@4.19.3': + dependencies: + '@types/node': 20.14.1 + '@types/qs': 6.9.15 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + + '@types/express@4.17.21': + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.3 + '@types/qs': 6.9.15 + '@types/serve-static': 1.15.7 + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 20.14.1 + + '@types/http-errors@2.0.4': {} + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@29.5.12': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + + '@types/json-schema@7.0.15': {} + + '@types/methods@1.1.4': {} + + '@types/mime@1.3.5': {} + + '@types/node@20.14.1': + dependencies: + undici-types: 5.26.5 + + '@types/qs@6.9.15': {} + + '@types/range-parser@1.2.7': {} + + '@types/semver@7.5.8': {} + + '@types/send@0.17.4': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 20.14.1 + + '@types/serve-static@1.15.7': + dependencies: + '@types/http-errors': 2.0.4 + '@types/node': 20.14.1 + '@types/send': 0.17.4 + + '@types/stack-utils@2.0.3': {} + + '@types/superagent@8.1.7': + dependencies: + '@types/cookiejar': 2.1.5 + '@types/methods': 1.1.4 + '@types/node': 20.14.1 + + '@types/supertest@6.0.2': + dependencies: + '@types/methods': 1.1.4 + '@types/superagent': 8.1.7 + + '@types/triple-beam@1.3.5': {} + + '@types/validator@13.11.10': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.32': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.42.0)(typescript@5.4.5))(eslint@8.42.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/regexpp': 4.10.1 + '@typescript-eslint/parser': 6.21.0(eslint@8.42.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.42.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.42.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.5 + eslint: 8.42.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@6.21.0(eslint@8.42.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.5 + eslint: 8.42.0 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + + '@typescript-eslint/type-utils@6.21.0(eslint@8.42.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.42.0)(typescript@5.4.5) + debug: 4.3.5 + eslint: 8.42.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@6.21.0': {} + + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.5 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@6.21.0(eslint@8.42.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + eslint: 8.42.0 + semver: 7.6.2 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + + '@webassemblyjs/ast@1.12.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + + '@webassemblyjs/floating-point-hex-parser@1.11.6': {} + + '@webassemblyjs/helper-api-error@1.11.6': {} + + '@webassemblyjs/helper-buffer@1.12.1': {} + + '@webassemblyjs/helper-numbers@1.11.6': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} + + '@webassemblyjs/helper-wasm-section@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 + + '@webassemblyjs/ieee754@1.11.6': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.11.6': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.11.6': {} + + '@webassemblyjs/wasm-edit@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 + + '@webassemblyjs/wasm-gen@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + + '@webassemblyjs/wasm-opt@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + + '@webassemblyjs/wasm-parser@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + + '@webassemblyjs/wast-printer@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + abstract-logging@2.0.1: {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-import-assertions@1.9.0(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + + acorn-jsx@5.3.2(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + + acorn-walk@8.3.2: {} + + acorn@8.11.3: {} + + ajv-formats@2.1.1(ajv@8.12.0): + optionalDependencies: + ajv: 8.12.0 + + ajv-formats@2.1.1(ajv@8.16.0): + optionalDependencies: + ajv: 8.16.0 + + ajv-formats@3.0.1(ajv@8.16.0): + optionalDependencies: + ajv: 8.16.0 + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ajv@8.16.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + append-field@1.0.0: {} + + arg@4.1.3: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-flatten@1.1.1: {} + + array-timsort@1.0.3: {} + + array-union@2.1.0: {} + + asap@2.0.6: {} + + async@3.2.5: {} + + asynckit@0.4.0: {} + + atomic-sleep@1.0.0: {} + + avvio@8.3.2: + dependencies: + '@fastify/error': 3.4.1 + fastq: 1.17.1 + + babel-jest@29.7.0(@babel/core@7.24.6): + dependencies: + '@babel/core': 7.24.6 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.24.6) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.24.6 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.6): + dependencies: + '@babel/core': 7.24.6 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.6) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.6) + + babel-preset-jest@29.6.3(@babel/core@7.24.6): + dependencies: + '@babel/core': 7.24.6 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.6) + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + binary-extensions@2.3.0: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + body-parser@1.20.2: + 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 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.23.0: + dependencies: + caniuse-lite: 1.0.30001627 + electron-to-chromium: 1.4.789 + node-releases: 2.0.14 + update-browserslist-db: 1.0.16(browserslist@4.23.0) + + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + bytes@3.1.2: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001627: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + change-case-all@2.1.0: + dependencies: + change-case: 5.4.4 + sponge-case: 2.0.3 + swap-case: 3.0.3 + title-case: 3.0.3 + + change-case@5.4.4: {} + + char-regex@1.0.2: {} + + chardet@0.7.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + 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 + + chrome-trace-event@1.0.4: {} + + ci-info@3.9.0: {} + + cjs-module-lexer@1.3.1: {} + + class-transformer@0.5.1: {} + + class-validator@0.14.1: + dependencies: + '@types/validator': 13.11.10 + libphonenumber-js: 1.11.2 + validator: 13.12.0 + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-spinners@2.9.2: {} + + cli-table3@0.6.3: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + + cli-width@3.0.0: {} + + cli-width@4.1.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@1.0.4: {} + + cluster-key-slot@1.1.2: {} + + co@4.6.0: {} + + collect-v8-coverage@1.0.2: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + + colors@1.4.0: {} + + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@2.20.3: {} + + commander@4.1.1: {} + + comment-json@4.2.3: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + + component-emitter@1.3.1: {} + + concat-map@0.0.1: {} + + concat-stream@1.6.2: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + + consola@2.15.3: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + convert-source-map@2.0.0: {} + + cookie-signature@1.0.6: {} + + cookie@0.6.0: {} + + cookiejar@2.1.4: {} + + core-util-is@1.0.3: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cosmiconfig@8.3.6(typescript@5.3.3): + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.3.3 + + create-jest@29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-require@1.1.1: {} + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.3.5: + dependencies: + ms: 2.1.2 + + dedent@1.5.3: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + delayed-stream@1.0.0: {} + + denque@2.1.0: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + detect-newline@3.1.0: {} + + dezalgo@1.0.4: + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + + diff-sequences@29.6.3: {} + + diff@4.0.2: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dotenv-expand@10.0.0: {} + + dotenv@16.4.5: {} + + drizzle-kit@0.22.2: + dependencies: + '@esbuild-kit/esm-loader': 2.6.5 + esbuild: 0.19.12 + esbuild-register: 3.5.0(esbuild@0.19.12) + transitivePeerDependencies: + - supports-color + + drizzle-orm@0.31.1(mysql2@3.10.0): + optionalDependencies: + mysql2: 3.10.0 + + eastasianwidth@0.2.0: {} + + ee-first@1.1.1: {} + + electron-to-chromium@1.4.789: {} + + emittery@0.13.1: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + enabled@2.0.0: {} + + encodeurl@1.0.2: {} + + enhanced-resolve@5.17.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-module-lexer@1.5.3: {} + + esbuild-register@3.5.0(esbuild@0.19.12): + dependencies: + debug: 4.3.5 + esbuild: 0.19.12 + transitivePeerDependencies: + - supports-color + + esbuild@0.18.20: + 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 + + esbuild@0.19.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + + escalade@3.1.2: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-config-prettier@9.1.0(eslint@8.42.0): + dependencies: + eslint: 8.42.0 + + eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.42.0))(eslint@8.42.0)(prettier@3.3.0): + dependencies: + eslint: 8.42.0 + prettier: 3.3.0 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.8 + optionalDependencies: + '@types/eslint': 8.56.10 + eslint-config-prettier: 9.1.0(eslint@8.42.0) + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.42.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) + '@eslint-community/regexpp': 4.10.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.42.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.5 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + + esprima@4.0.1: {} + + esquery@1.5.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + event-target-shim@5.0.1: {} + + events@3.3.0: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + exit@0.1.2: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + express@4.19.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.2 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.6.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 + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-content-type-parse@1.1.0: {} + + fast-decode-uri-component@1.0.1: {} + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.7 + + fast-json-stable-stringify@2.1.0: {} + + fast-json-stringify@5.16.0: + dependencies: + '@fastify/merge-json-schemas': 0.1.1 + ajv: 8.16.0 + ajv-formats: 3.0.1(ajv@8.16.0) + fast-deep-equal: 3.1.3 + fast-uri: 2.3.0 + json-schema-ref-resolver: 1.0.1 + rfdc: 1.3.1 + + fast-levenshtein@2.0.6: {} + + fast-querystring@1.1.2: + dependencies: + fast-decode-uri-component: 1.0.1 + + fast-redact@3.5.0: {} + + fast-safe-stringify@2.1.1: {} + + fast-uri@2.3.0: {} + + fastify-plugin@4.5.1: {} + + fastify@4.27.0: + dependencies: + '@fastify/ajv-compiler': 3.5.0 + '@fastify/error': 3.4.1 + '@fastify/fast-json-stringify-compiler': 4.3.0 + abstract-logging: 2.0.1 + avvio: 8.3.2 + fast-content-type-parse: 1.1.0 + fast-json-stringify: 5.16.0 + find-my-way: 8.2.0 + light-my-request: 5.13.0 + pino: 9.1.0 + process-warning: 3.0.0 + proxy-addr: 2.0.7 + rfdc: 1.3.1 + secure-json-parse: 2.7.0 + semver: 7.6.2 + toad-cache: 3.7.0 + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + fecha@4.2.3: {} + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + figures@5.0.0: + dependencies: + escape-string-regexp: 5.0.0 + is-unicode-supported: 1.3.0 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + file-stream-rotator@0.6.1: + dependencies: + moment: 2.30.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.2.0: + 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 + + find-my-way@8.2.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-querystring: 1.1.2 + safe-regex2: 3.1.0 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.1: {} + + fn.name@1.1.0: {} + + foreground-child@3.1.1: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.90.1(esbuild@0.19.12)): + dependencies: + '@babel/code-frame': 7.24.6 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 8.3.6(typescript@5.3.3) + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.2 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.6.2 + tapable: 2.2.1 + typescript: 5.3.3 + webpack: 5.90.1(esbuild@0.19.12) + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + formidable@3.5.1: + dependencies: + dezalgo: 1.0.4 + hexoid: 1.0.0 + once: 1.4.0 + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-monkey@1.0.6: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + generate-function@2.3.1: + dependencies: + is-property: 1.0.2 + + generic-pool@3.9.0: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-package-type@0.1.0: {} + + get-stream@6.0.1: {} + + get-tsconfig@4.7.5: + dependencies: + resolve-pkg-maps: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@10.3.10: + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.4 + minipass: 7.1.2 + path-scurry: 1.11.1 + + glob@10.4.1: + dependencies: + foreground-child: 3.1.1 + jackspeak: 3.3.0 + minimatch: 9.0.4 + minipass: 7.1.2 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@9.3.5: + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.11.1 + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-own-prop@2.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hexoid@1.0.0: {} + + html-escaper@2.0.2: {} + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + human-signals@2.1.0: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@5.3.1: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-local@3.1.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + inquirer@8.2.6: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + + inquirer@9.2.12: + dependencies: + '@ljharb/through': 2.3.13 + ansi-escapes: 4.3.2 + chalk: 5.3.0 + cli-cursor: 3.1.0 + cli-width: 4.1.0 + external-editor: 3.1.0 + figures: 5.0.0 + lodash: 4.17.21 + mute-stream: 1.0.0 + ora: 5.4.1 + run-async: 3.0.0 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + interpret@1.4.0: {} + + ipaddr.js@1.9.1: {} + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.13.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-fn@2.1.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-interactive@1.0.0: {} + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-property@1.0.2: {} + + is-stream@2.0.1: {} + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@1.3.0: {} + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.24.6 + '@babel/parser': 7.24.6 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.2: + dependencies: + '@babel/core': 7.24.6 + '@babel/parser': 7.24.6 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.2 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.3.5 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + iterare@1.2.1: {} + + jackspeak@2.3.6: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jackspeak@3.3.0: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)): + dependencies: + '@babel/core': 7.24.6 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.24.6) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.7 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.14.1 + ts-node: 10.9.2(@types/node@20.14.1)(typescript@5.4.5) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.14.1 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.7 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.24.6 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.7 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.8 + resolve.exports: 2.0.2 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + chalk: 4.1.2 + cjs-module-lexer: 1.3.1 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-syntax-typescript': 7.24.6(@babel/core@7.24.6) + '@babel/types': 7.24.6 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.6) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.6.2 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@27.5.1: + dependencies: + '@types/node': 20.14.1 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest-worker@29.7.0: + dependencies: + '@types/node': 20.14.1 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@2.5.2: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-ref-resolver@1.0.1: + dependencies: + fast-deep-equal: 3.1.3 + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jsonc-parser@3.2.0: {} + + jsonc-parser@3.2.1: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@3.0.3: {} + + kuler@2.0.0: {} + + leven@3.1.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + libphonenumber-js@1.11.2: {} + + light-my-request@5.13.0: + dependencies: + cookie: 0.6.0 + process-warning: 3.0.0 + set-cookie-parser: 2.6.0 + + lines-and-columns@1.2.4: {} + + loader-runner@4.3.0: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + logform@2.6.0: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.4.3 + triple-beam: 1.4.1 + + long@5.2.3: {} + + lru-cache@10.2.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@7.18.3: {} + + lru-cache@8.0.5: {} + + magic-string@0.30.5: + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + make-dir@4.0.0: + dependencies: + semver: 7.6.2 + + make-error@1.3.6: {} + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + media-typer@0.3.0: {} + + memfs@3.5.3: + dependencies: + fs-monkey: 1.0.6 + + merge-descriptors@1.0.1: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromatch@4.0.7: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mime@2.6.0: {} + + mime@3.0.0: {} + + mimic-fn@2.1.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@8.0.4: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.4: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@4.2.8: {} + + minipass@7.1.2: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mnemonist@0.39.6: + dependencies: + obliterator: 2.0.4 + + moment@2.30.1: {} + + ms@2.0.0: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + + multer@1.4.4-lts.1: + 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 + + mute-stream@0.0.8: {} + + mute-stream@1.0.0: {} + + mysql2@3.10.0: + dependencies: + denque: 2.1.0 + generate-function: 2.3.1 + iconv-lite: 0.6.3 + long: 5.2.3 + lru-cache: 8.0.5 + named-placeholders: 1.1.3 + seq-queue: 0.0.5 + sqlstring: 2.3.3 + + named-placeholders@1.1.3: + dependencies: + lru-cache: 7.18.3 + + natural-compare@1.4.0: {} + + negotiator@0.6.3: {} + + neo-async@2.6.2: {} + + node-abort-controller@3.1.1: {} + + node-emoji@1.11.0: + dependencies: + lodash: 4.17.21 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-int64@0.4.0: {} + + node-releases@2.0.14: {} + + nodemailer@6.9.13: {} + + normalize-path@3.0.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.1: {} + + obliterator@2.0.4: {} + + on-exit-leak-free@2.1.2: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + os-tmpdir@1.0.2: {} + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-try@2.2.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.24.6 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parseurl@1.3.3: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.2.2 + minipass: 7.1.2 + + path-to-regexp@0.1.7: {} + + path-to-regexp@3.2.0: {} + + path-to-regexp@6.2.2: {} + + path-type@4.0.0: {} + + picocolors@1.0.1: {} + + picomatch@2.3.1: {} + + picomatch@3.0.1: {} + + pino-abstract-transport@1.2.0: + dependencies: + readable-stream: 4.5.2 + split2: 4.2.0 + + pino-std-serializers@7.0.0: {} + + pino@9.1.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pino-std-serializers: 7.0.0 + process-warning: 3.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 4.0.1 + thread-stream: 3.0.2 + + pirates@4.0.6: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + pluralize@8.0.0: {} + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@3.3.0: {} + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + process-nextick-args@2.0.1: {} + + process-warning@3.0.0: {} + + process@0.11.10: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + punycode@2.3.1: {} + + pure-rand@6.1.0: {} + + qs@6.11.0: + dependencies: + side-channel: 1.0.6 + + qs@6.12.1: + dependencies: + side-channel: 1.0.6 + + queue-microtask@1.2.3: {} + + quick-format-unescaped@4.0.4: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + react-is@18.3.1: {} + + readable-stream@2.3.8: + 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 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readable-stream@4.5.2: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + real-require@0.2.0: {} + + rechoir@0.6.2: + dependencies: + resolve: 1.22.8 + + redis@4.6.14: + dependencies: + '@redis/bloom': 1.2.0(@redis/client@1.5.16) + '@redis/client': 1.5.16 + '@redis/graph': 1.1.1(@redis/client@1.5.16) + '@redis/json': 1.0.6(@redis/client@1.5.16) + '@redis/search': 1.1.6(@redis/client@1.5.16) + '@redis/time-series': 1.0.5(@redis/client@1.5.16) + + reflect-metadata@0.2.2: {} + + repeat-string@1.6.1: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve.exports@2.0.2: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + ret@0.4.3: {} + + reusify@1.0.4: {} + + rfdc@1.3.1: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rimraf@4.4.1: + dependencies: + glob: 9.3.5 + + run-async@2.4.1: {} + + run-async@3.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.6.3 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-regex2@3.1.0: + dependencies: + ret: 0.4.3 + + safe-stable-stringify@2.4.3: {} + + safer-buffer@2.1.2: {} + + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + secure-json-parse@2.7.0: {} + + semver@6.3.1: {} + + semver@7.6.2: {} + + send@0.18.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 + + seq-queue@0.0.5: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + serve-static@1.15.0: + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + + set-cookie-parser@2.6.0: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + setprototypeof@1.2.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shelljs@0.8.5: + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + sonic-boom@4.0.1: + dependencies: + atomic-sleep: 1.0.0 + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + split2@4.2.0: {} + + sponge-case@2.0.3: {} + + sprintf-js@1.0.3: {} + + sqlstring@2.3.3: {} + + stack-trace@0.0.10: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + statuses@2.0.1: {} + + streamsearch@1.1.0: {} + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + + strip-bom@3.0.0: {} + + strip-bom@4.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-json-comments@3.1.1: {} + + superagent@9.0.2: + dependencies: + component-emitter: 1.3.1 + cookiejar: 2.1.4 + debug: 4.3.5 + fast-safe-stringify: 2.1.1 + form-data: 4.0.0 + formidable: 3.5.1 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.12.1 + transitivePeerDependencies: + - supports-color + + supertest@7.0.0: + dependencies: + methods: 1.1.2 + superagent: 9.0.2 + transitivePeerDependencies: + - supports-color + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + swagger-ui-dist@5.11.2: {} + + swap-case@3.0.3: {} + + symbol-observable@4.0.0: {} + + synckit@0.8.8: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.3 + + tapable@2.2.1: {} + + terser-webpack-plugin@5.3.10(esbuild@0.19.12)(webpack@5.90.1(esbuild@0.19.12)): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.31.0 + webpack: 5.90.1(esbuild@0.19.12) + optionalDependencies: + esbuild: 0.19.12 + + terser@5.31.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.11.3 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + text-hex@1.0.0: {} + + text-table@0.2.0: {} + + thread-stream@3.0.2: + dependencies: + real-require: 0.2.0 + + through@2.3.8: {} + + title-case@3.0.3: + dependencies: + tslib: 2.6.3 + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + tmpl@1.0.5: {} + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toad-cache@3.7.0: {} + + toidentifier@1.0.1: {} + + tr46@0.0.3: {} + + tree-kill@1.2.2: {} + + triple-beam@1.4.1: {} + + ts-api-utils@1.3.0(typescript@5.4.5): + dependencies: + typescript: 5.4.5 + + ts-jest@29.1.4(@babel/core@7.24.6)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.6))(esbuild@0.19.12)(jest@29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)))(typescript@5.4.5): + dependencies: + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.6.2 + typescript: 5.4.5 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.24.6 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.24.6) + esbuild: 0.19.12 + + ts-loader@9.5.1(typescript@5.4.5)(webpack@5.90.1(esbuild@0.19.12)): + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.17.0 + micromatch: 4.0.7 + semver: 7.6.2 + source-map: 0.7.4 + typescript: 5.4.5 + webpack: 5.90.1(esbuild@0.19.12) + + ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.14.1 + acorn: 8.11.3 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.4.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tsconfig-paths-webpack-plugin@4.1.0: + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.17.0 + tsconfig-paths: 4.2.0 + + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.6.2: {} + + tslib@2.6.3: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typedarray@0.0.6: {} + + typescript@5.3.3: {} + + typescript@5.4.5: {} + + ua-parser-js@1.0.38: {} + + uid@2.0.2: + dependencies: + '@lukeed/csprng': 1.1.0 + + undici-types@5.26.5: {} + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + update-browserslist-db@1.0.16(browserslist@4.23.0): + dependencies: + browserslist: 4.23.0 + escalade: 3.1.2 + picocolors: 1.0.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + utils-merge@1.0.1: {} + + uuid@9.0.1: {} + + v8-compile-cache-lib@3.0.1: {} + + v8-to-istanbul@9.2.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + validator@13.12.0: {} + + vary@1.1.2: {} + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + watchpack@2.4.1: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + webidl-conversions@3.0.1: {} + + webpack-node-externals@3.0.0: {} + + webpack-sources@3.2.3: {} + + webpack@5.90.1(esbuild@0.19.12): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.11.3 + acorn-import-assertions: 1.9.0(acorn@8.11.3) + browserslist: 4.23.0 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.0 + es-module-lexer: 1.5.3 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(esbuild@0.19.12)(webpack@5.90.1(esbuild@0.19.12)) + watchpack: 2.4.1 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + winston-daily-rotate-file@5.0.0(winston@3.13.0): + dependencies: + file-stream-rotator: 0.6.1 + object-hash: 3.0.0 + triple-beam: 1.4.1 + winston: 3.13.0 + winston-transport: 4.7.0 + + winston-transport@4.7.0: + dependencies: + logform: 2.6.0 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + + winston@3.13.0: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.5 + is-stream: 2.0.1 + logform: 2.6.0 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.4.3 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.7.0 + + word-wrap@1.2.5: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} diff --git a/pnpm-lock.yamlss b/pnpm-lock.yamlss new file mode 100644 index 0000000..ee40313 --- /dev/null +++ b/pnpm-lock.yamlss @@ -0,0 +1,7523 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@fastify/static': + specifier: ^7.0.4 + version: 7.0.4 + '@nestjs/common': + specifier: ^10.3.9 + version: 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/config': + specifier: ^3.2.2 + version: 3.2.2(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(rxjs@7.8.1) + '@nestjs/core': + specifier: ^10.3.9 + version: 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/platform-express': + specifier: ^10.3.9 + version: 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9) + '@nestjs/platform-fastify': + specifier: ^10.3.9 + version: 10.3.9(@fastify/static@7.0.4)(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1)) + '@nestjs/swagger': + specifier: ^7.3.1 + version: 7.3.1(@fastify/static@7.0.4)(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2) + class-transformer: + specifier: ^0.5.1 + version: 0.5.1 + class-validator: + specifier: ^0.14.1 + version: 0.14.1 + colors: + specifier: ^1.4.0 + version: 1.4.0 + drizzle-orm: + specifier: ^0.31.1 + version: 0.31.1(mysql2@3.10.0) + fastify: + specifier: ^4.27.0 + version: 4.27.0 + mysql2: + specifier: ^3.10.0 + version: 3.10.0 + nodemailer: + specifier: ^6.9.13 + version: 6.9.13 + redis: + specifier: ^4.6.14 + version: 4.6.14 + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 + rxjs: + specifier: ^7.8.1 + version: 7.8.1 + ua-parser-js: + specifier: ^1.0.38 + version: 1.0.38 + winston: + specifier: ^3.13.0 + version: 3.13.0 + winston-daily-rotate-file: + specifier: ^5.0.0 + version: 5.0.0(winston@3.13.0) + devDependencies: + '@nestjs/cli': + specifier: ^10.3.2 + version: 10.3.2(esbuild@0.19.12) + '@nestjs/schematics': + specifier: ^10.1.1 + version: 10.1.1(chokidar@3.6.0)(typescript@5.4.5) + '@nestjs/testing': + specifier: ^10.3.9 + version: 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9)) + '@types/express': + specifier: ^4.17.21 + version: 4.17.21 + '@types/jest': + specifier: ^29.5.12 + version: 29.5.12 + '@types/node': + specifier: ^20.14.1 + version: 20.14.1 + '@types/supertest': + specifier: ^6.0.2 + version: 6.0.2 + '@typescript-eslint/eslint-plugin': + specifier: ^6.21.0 + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.42.0)(typescript@5.4.5))(eslint@8.42.0)(typescript@5.4.5) + '@typescript-eslint/parser': + specifier: ^6.21.0 + version: 6.21.0(eslint@8.42.0)(typescript@5.4.5) + drizzle-kit: + specifier: ^0.22.2 + version: 0.22.2 + eslint: + specifier: ^8.42.0 + version: 8.42.0 + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@8.42.0) + eslint-plugin-prettier: + specifier: ^5.1.3 + version: 5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.42.0))(eslint@8.42.0)(prettier@3.3.0) + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + prettier: + specifier: ^3.3.0 + version: 3.3.0 + source-map-support: + specifier: ^0.5.21 + version: 0.5.21 + supertest: + specifier: ^7.0.0 + version: 7.0.0 + ts-jest: + specifier: ^29.1.4 + version: 29.1.4(@babel/core@7.24.6)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.6))(esbuild@0.19.12)(jest@29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)))(typescript@5.4.5) + ts-loader: + specifier: ^9.5.1 + version: 9.5.1(typescript@5.4.5)(webpack@5.90.1(esbuild@0.19.12)) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.14.1)(typescript@5.4.5) + tsconfig-paths: + specifier: ^4.2.0 + version: 4.2.0 + typescript: + specifier: ^5.4.5 + version: 5.4.5 + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@angular-devkit/core@17.1.2': + resolution: {integrity: sha512-ku+/W/HMCBacSWFppenr9y6Lx8mDuTuQvn1IkTyBLiJOpWnzgVbx9kHDeaDchGa1PwLlJUBBrv27t3qgJOIDPw==} + engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^3.5.2 + peerDependenciesMeta: + chokidar: + optional: true + + '@angular-devkit/schematics-cli@17.1.2': + resolution: {integrity: sha512-bvXykYzSST05qFdlgIzUguNOb3z0hCa8HaTwtqdmQo9aFPf+P+/AC56I64t1iTchMjQtf3JrBQhYM25gUdcGbg==} + engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + hasBin: true + + '@angular-devkit/schematics@17.1.2': + resolution: {integrity: sha512-8S9RuM8olFN/gwN+mjbuF1CwHX61f0i59EGXz9tXLnKRUTjsRR+8vVMTAmX0dvVAT5fJTG/T69X+HX7FeumdqA==} + engines: {node: ^18.13.0 || >=20.9.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + + '@babel/code-frame@7.24.6': + resolution: {integrity: sha512-ZJhac6FkEd1yhG2AHOmfcXG4ceoLltoCVJjN5XsWN9BifBQr+cHJbWi0h68HZuSORq+3WtJ2z0hwF2NG1b5kcA==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.24.6': + resolution: {integrity: sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.24.6': + resolution: {integrity: sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.24.6': + resolution: {integrity: sha512-S7m4eNa6YAPJRHmKsLHIDJhNAGNKoWNiWefz1MBbpnt8g9lvMDl1hir4P9bo/57bQEmuwEhnRU/AMWsD0G/Fbg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.24.6': + resolution: {integrity: sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-environment-visitor@7.24.6': + resolution: {integrity: sha512-Y50Cg3k0LKLMjxdPjIl40SdJgMB85iXn27Vk/qbHZCFx/o5XO3PSnpi675h1KEmmDb6OFArfd5SCQEQ5Q4H88g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-function-name@7.24.6': + resolution: {integrity: sha512-xpeLqeeRkbxhnYimfr2PC+iA0Q7ljX/d1eZ9/inYbmfG2jpl8Lu3DyXvpOAnrS5kxkfOWJjioIMQsaMBXFI05w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-hoist-variables@7.24.6': + resolution: {integrity: sha512-SF/EMrC3OD7dSta1bLJIlrsVxwtd0UpjRJqLno6125epQMJ/kyFmpTT4pbvPbdQHzCHg+biQ7Syo8lnDtbR+uA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.6': + resolution: {integrity: sha512-a26dmxFJBF62rRO9mmpgrfTLsAuyHk4e1hKTUkD/fcMfynt8gvEKwQPQDVxWhca8dHoDck+55DFt42zV0QMw5g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.24.6': + resolution: {integrity: sha512-Y/YMPm83mV2HJTbX1Qh2sjgjqcacvOlhbzdCCsSlblOKjSYmQqEbO6rUniWQyRo9ncyfjT8hnUjlG06RXDEmcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.24.6': + resolution: {integrity: sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-simple-access@7.24.6': + resolution: {integrity: sha512-nZzcMMD4ZhmB35MOOzQuiGO5RzL6tJbsT37Zx8M5L/i9KSrukGXWTjLe1knIbb/RmxoJE9GON9soq0c0VEMM5g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.24.6': + resolution: {integrity: sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.6': + resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.6': + resolution: {integrity: sha512-4yA7s865JHaqUdRbnaxarZREuPTHrjpDT+pXoAZ1yhyo6uFnIEpS8VMu16siFOHDpZNKYv5BObhsB//ycbICyw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.24.6': + resolution: {integrity: sha512-Jktc8KkF3zIkePb48QO+IapbXlSapOW9S+ogZZkcO6bABgYAxtZcjZ/O005111YLf+j4M84uEgwYoidDkXbCkQ==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.24.6': + resolution: {integrity: sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.6': + resolution: {integrity: sha512-2YnuOp4HAk2BsBrJJvYCbItHx0zWscI1C3zgWkz+wDyD9I7GIVrfnLyrR4Y1VR+7p+chAEcrgRQYZAGIKMV7vQ==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.24.6': + resolution: {integrity: sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.24.6': + resolution: {integrity: sha512-lWfvAIFNWMlCsU0DRUun2GpFwZdGTukLaHJqRh1JRb80NdAP5Sb1HDHB5X9P9OtgZHQl089UzQkpYlBq2VTPRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.24.6': + resolution: {integrity: sha512-TzCtxGgVTEJWWwcYwQhCIQ6WaKlo80/B+Onsk4RRCcYqpYGFcG9etPW94VToGte5AAcxRrhjPUFvUS3Y2qKi4A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.24.6': + resolution: {integrity: sha512-3vgazJlLwNXi9jhrR1ef8qiB65L1RK90+lEQwv4OxveHnqC3BfmnHdgySwRLzf6akhlOYenT+b7AfWq+a//AHw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.24.6': + resolution: {integrity: sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.24.6': + resolution: {integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@dabh/diagnostics@2.0.3': + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + + '@esbuild-kit/core-utils@3.3.2': + resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} + + '@esbuild-kit/esm-loader@2.6.5': + resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} + + '@esbuild/aix-ppc64@0.19.12': + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.18.20': + resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm64@0.19.12': + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.18.20': + resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-arm@0.19.12': + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.18.20': + resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/android-x64@0.19.12': + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.18.20': + resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-arm64@0.19.12': + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.18.20': + resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/darwin-x64@0.19.12': + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.18.20': + resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-arm64@0.19.12': + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.18.20': + resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.19.12': + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.18.20': + resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm64@0.19.12': + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.18.20': + resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-arm@0.19.12': + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.18.20': + resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-ia32@0.19.12': + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.18.20': + resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-loong64@0.19.12': + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.18.20': + resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-mips64el@0.19.12': + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.18.20': + resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-ppc64@0.19.12': + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.18.20': + resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-riscv64@0.19.12': + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.18.20': + resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-s390x@0.19.12': + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.18.20': + resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/linux-x64@0.19.12': + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.18.20': + resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.19.12': + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.18.20': + resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.19.12': + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.18.20': + resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/sunos-x64@0.19.12': + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.18.20': + resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-arm64@0.19.12': + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.18.20': + resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-ia32@0.19.12': + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.18.20': + resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@esbuild/win32-x64@0.19.12': + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.10.1': + resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.42.0': + resolution: {integrity: sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@fastify/accept-negotiator@1.1.0': + resolution: {integrity: sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==} + engines: {node: '>=14'} + + '@fastify/ajv-compiler@3.5.0': + resolution: {integrity: sha512-ebbEtlI7dxXF5ziNdr05mOY8NnDiPB1XvAlLHctRt/Rc+C3LCOVW5imUVX+mhvUhnNzmPBHewUkOFgGlCxgdAA==} + + '@fastify/cors@9.0.1': + resolution: {integrity: sha512-YY9Ho3ovI+QHIL2hW+9X4XqQjXLjJqsU+sMV/xFsxZkE8p3GNnYVFpoOxF7SsP5ZL76gwvbo3V9L+FIekBGU4Q==} + + '@fastify/error@3.4.1': + resolution: {integrity: sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==} + + '@fastify/fast-json-stringify-compiler@4.3.0': + resolution: {integrity: sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==} + + '@fastify/formbody@7.4.0': + resolution: {integrity: sha512-H3C6h1GN56/SMrZS8N2vCT2cZr7mIHzBHzOBa5OPpjfB/D6FzP9mMpE02ZzrFX0ANeh0BAJdoXKOF2e7IbV+Og==} + + '@fastify/merge-json-schemas@0.1.1': + resolution: {integrity: sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==} + + '@fastify/middie@8.3.1': + resolution: {integrity: sha512-qrQ8U3iCdjNum3+omnIvAyz21ifFx+Pp5jYW7PJJ7b9ueKTCPXsH6vEvaZQrjEZvOpTnWte+CswfBODWD0NqYQ==} + + '@fastify/send@2.1.0': + resolution: {integrity: sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA==} + + '@fastify/static@7.0.4': + resolution: {integrity: sha512-p2uKtaf8BMOZWLs6wu+Ihg7bWNBdjNgCwDza4MJtTqg+5ovKmcbgbR9Xs5/smZ1YISfzKOCNYmZV8LaCj+eJ1Q==} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@ljharb/through@2.3.13': + resolution: {integrity: sha512-/gKJun8NNiWGZJkGzI/Ragc53cOdcLNdzjLaIa+GEjguQs0ulsurx8WN0jijdK9yPqDvziX995sMRLyLt1uZMQ==} + engines: {node: '>= 0.4'} + + '@lukeed/csprng@1.1.0': + resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} + engines: {node: '>=8'} + + '@lukeed/ms@2.0.2': + resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} + engines: {node: '>=8'} + + '@microsoft/tsdoc@0.14.2': + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + + '@nestjs/cli@10.3.2': + resolution: {integrity: sha512-aWmD1GLluWrbuC4a1Iz/XBk5p74Uj6nIVZj6Ov03JbTfgtWqGFLtXuMetvzMiHxfrHehx/myt2iKAPRhKdZvTg==} + engines: {node: '>= 16.14'} + hasBin: true + peerDependencies: + '@swc/cli': ^0.1.62 || ^0.3.0 + '@swc/core': ^1.3.62 + peerDependenciesMeta: + '@swc/cli': + optional: true + '@swc/core': + optional: true + + '@nestjs/common@10.3.9': + resolution: {integrity: sha512-JAQONPagMa+sy/fcIqh/Hn3rkYQ9pQM51vXCFNOM5ujefxUVqn3gwFRMN8Y1+MxdUHipV+8daEj2jEm0IqJzOA==} + peerDependencies: + class-transformer: '*' + class-validator: '*' + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/config@3.2.2': + resolution: {integrity: sha512-vGICPOui5vE6kPz1iwQ7oCnp3qWgqxldPmBQ9onkVoKlBtyc83KJCr7CjuVtf4OdovMAVcux1d8Q6jglU2ZphA==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + rxjs: ^7.1.0 + + '@nestjs/core@10.3.9': + resolution: {integrity: sha512-NzZUfWAmaf8sqhhwoRA+CuqxQe+P4Rz8PZp5U7CdCbjyeB9ZVGcBkihcJC9wMdtiOWHRndB2J8zRfs5w06jK3w==} + peerDependencies: + '@nestjs/common': ^10.0.0 + '@nestjs/microservices': ^10.0.0 + '@nestjs/platform-express': ^10.0.0 + '@nestjs/websockets': ^10.0.0 + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + '@nestjs/websockets': + optional: true + + '@nestjs/mapped-types@2.0.5': + resolution: {integrity: sha512-bSJv4pd6EY99NX9CjBIyn4TVDoSit82DUZlL4I3bqNfy5Gt+gXTa86i3I/i0iIV9P4hntcGM5GyO+FhZAhxtyg==} + peerDependencies: + '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 + class-transformer: ^0.4.0 || ^0.5.0 + class-validator: ^0.13.0 || ^0.14.0 + reflect-metadata: ^0.1.12 || ^0.2.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/platform-express@10.3.9': + resolution: {integrity: sha512-si/UzobP6YUtYtCT1cSyQYHHzU3yseqYT6l7OHSMVvfG1+TqxaAqI6nmrix02LO+l1YntHRXEs3p+v9a7EfrSQ==} + peerDependencies: + '@nestjs/common': ^10.0.0 + '@nestjs/core': ^10.0.0 + + '@nestjs/platform-fastify@10.3.9': + resolution: {integrity: sha512-bw/RjGjGQsUwTlHFgSYQv58XKSti6in/X6d32G7LYemh7NYzeEhiHjtYay/TpvNkhqW6mrMrX3GYvl8WVH96TQ==} + peerDependencies: + '@fastify/static': ^6.0.0 || ^7.0.0 + '@fastify/view': ^7.0.0 || ^8.0.0 + '@nestjs/common': ^10.0.0 + '@nestjs/core': ^10.0.0 + peerDependenciesMeta: + '@fastify/static': + optional: true + '@fastify/view': + optional: true + + '@nestjs/schematics@10.1.1': + resolution: {integrity: sha512-o4lfCnEeIkfJhGBbLZxTuVWcGuqDCFwg5OrvpgRUBM7vI/vONvKKiB5riVNpO+JqXoH0I42NNeDb0m4V5RREig==} + peerDependencies: + typescript: '>=4.8.2' + + '@nestjs/swagger@7.3.1': + resolution: {integrity: sha512-LUC4mr+5oAleEC/a2j8pNRh1S5xhKXJ1Gal5ZdRjt9XebQgbngXCdW7JTA9WOEcwGtFZN9EnKYdquzH971LZfw==} + peerDependencies: + '@fastify/static': ^6.0.0 || ^7.0.0 + '@nestjs/common': ^9.0.0 || ^10.0.0 + '@nestjs/core': ^9.0.0 || ^10.0.0 + class-transformer: '*' + class-validator: '*' + reflect-metadata: ^0.1.12 || ^0.2.0 + peerDependenciesMeta: + '@fastify/static': + optional: true + class-transformer: + optional: true + class-validator: + optional: true + + '@nestjs/testing@10.3.9': + resolution: {integrity: sha512-z24SdpZIRtYyM5s2vnu7rbBosXJY/KcAP7oJlwgFa/h/z/wg8gzyoKy5lhibH//OZNO+pYKajV5wczxuy5WeAg==} + peerDependencies: + '@nestjs/common': ^10.0.0 + '@nestjs/core': ^10.0.0 + '@nestjs/microservices': ^10.0.0 + '@nestjs/platform-express': ^10.0.0 + peerDependenciesMeta: + '@nestjs/microservices': + optional: true + '@nestjs/platform-express': + optional: true + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nuxtjs/opencollective@0.3.2': + resolution: {integrity: sha512-um0xL3fO7Mf4fDxcqx9KryrB7zgRM5JSlvGN5AGkP6JLM5XEKyjeAiPbNxdXVXQ16isuAhYpvP88NgL2BGd6aA==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@redis/bloom@1.2.0': + resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/client@1.5.16': + resolution: {integrity: sha512-X1a3xQ5kEMvTib5fBrHKh6Y+pXbeKXqziYuxOUo1ojQNECg4M5Etd1qqyhMap+lFUOAh8S7UYevgJHOm4A+NOg==} + engines: {node: '>=14'} + + '@redis/graph@1.1.1': + resolution: {integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/json@1.0.6': + resolution: {integrity: sha512-rcZO3bfQbm2zPRpqo82XbW8zg4G/w4W3tI7X8Mqleq9goQjAGLL7q/1n1ZX4dXEAmORVZ4s1+uKLaUOg7LrUhw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/search@1.1.6': + resolution: {integrity: sha512-mZXCxbTYKBQ3M2lZnEddwEAks0Kc7nauire8q20oA0oA/LoA+E/b5Y5KZn232ztPb1FkIGqo12vh3Lf+Vw5iTw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/time-series@1.0.5': + resolution: {integrity: sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/cookiejar@2.1.5': + resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@8.56.10': + resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/express-serve-static-core@4.19.3': + resolution: {integrity: sha512-KOzM7MhcBFlmnlr/fzISFF5vGWVSvN6fTd4T+ExOt08bA/dA5kpSzY52nMsI1KDFmUREpJelPYyuslLRSjjgCg==} + + '@types/express@4.17.21': + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jest@29.5.12': + resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/methods@1.1.4': + resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/node@20.14.1': + resolution: {integrity: sha512-T2MzSGEu+ysB/FkWfqmhV3PLyQlowdptmmgD20C6QxsS8Fmv5SjpZ1ayXaEC0S21/h5UJ9iA6W/5vSNU5l00OA==} + + '@types/qs@6.9.15': + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + + '@types/serve-static@1.15.7': + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/superagent@8.1.7': + resolution: {integrity: sha512-NmIsd0Yj4DDhftfWvvAku482PZum4DBW7U51OvS8gvOkDDY0WT1jsVyDV3hK+vplrsYw8oDwi9QxOM7U68iwww==} + + '@types/supertest@6.0.2': + resolution: {integrity: sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==} + + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + + '@types/validator@13.11.10': + resolution: {integrity: sha512-e2PNXoXLr6Z+dbfx5zSh9TRlXJrELycxiaXznp4S5+D2M3b9bqJEitNHA5923jhnB2zzFiZHa2f0SI1HoIahpg==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.32': + resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + + '@typescript-eslint/eslint-plugin@6.21.0': + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/type-utils@6.21.0': + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@6.21.0': + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@webassemblyjs/ast@1.12.1': + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + + '@webassemblyjs/floating-point-hex-parser@1.11.6': + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + + '@webassemblyjs/helper-api-error@1.11.6': + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + + '@webassemblyjs/helper-buffer@1.12.1': + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + + '@webassemblyjs/helper-numbers@1.11.6': + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + + '@webassemblyjs/helper-wasm-section@1.12.1': + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + + '@webassemblyjs/ieee754@1.11.6': + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + + '@webassemblyjs/leb128@1.11.6': + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + + '@webassemblyjs/utf8@1.11.6': + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + + '@webassemblyjs/wasm-edit@1.12.1': + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + + '@webassemblyjs/wasm-gen@1.12.1': + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + + '@webassemblyjs/wasm-opt@1.12.1': + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + + '@webassemblyjs/wasm-parser@1.12.1': + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + + '@webassemblyjs/wast-printer@1.12.1': + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + abstract-logging@2.0.1: + resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-import-assertions@1.9.0: + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + peerDependencies: + acorn: ^8 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + + acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@3.5.2: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ajv@8.16.0: + resolution: {integrity: sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + append-field@1.0.0: + resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-timsort@1.0.3: + resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + avvio@8.3.2: + resolution: {integrity: sha512-st8e519GWHa/azv8S87mcJvZs4WsgTBjOw/Ih1CP6u+8SZvcOeAYNG6JbsIrAUUJJ7JfmrnOkR8ipDS+u9SIRQ==} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-preset-current-node-syntax@1.0.1: + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + body-parser@1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001627: + resolution: {integrity: sha512-4zgNiB8nTyV/tHhwZrFs88ryjls/lHiqFhrxCW4qSTeuRByBVnPYpDInchOIySWknznucaf31Z4KYqjfbrecVw==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + cjs-module-lexer@1.3.1: + resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} + + class-transformer@0.5.1: + resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} + + class-validator@0.14.1: + resolution: {integrity: sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-table3@0.6.3: + resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} + engines: {node: 10.* || >= 12.*} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + cluster-key-slot@1.1.2: + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + engines: {node: '>=0.10.0'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + + colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + comment-json@4.2.3: + resolution: {integrity: sha512-SsxdiOf064DWoZLH799Ata6u7iV658A11PlWtZATDlXPpKGJnbJZ5Z24ybixAi+LUUqJ/GKowAejtC5GFUG7Tw==} + engines: {node: '>= 6'} + + component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + + consola@2.15.3: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.6.0: + resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + engines: {node: '>= 0.6'} + + cookiejar@2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + denque@2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dotenv-expand@10.0.0: + resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==} + engines: {node: '>=12'} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + drizzle-kit@0.22.2: + resolution: {integrity: sha512-dxluXlhT1N9bpj2eZR3N/z3u4H0PbbrBYgyouIobFF25tOt2Buy1abx26Jii96qcYV0JgxjhnuV+FBcgR0Xa0w==} + hasBin: true + + drizzle-orm@0.31.1: + resolution: {integrity: sha512-hTbYne2XX3y6sV7WSxcPH6/vNSiQSUG9VZsFI27jBMCN0OT3Ok7ao3pIT5OMAqWkzJCRFgGjAaUeTAZWPgOKag==} + peerDependencies: + '@aws-sdk/client-rds-data': '>=3' + '@cloudflare/workers-types': '>=3' + '@electric-sql/pglite': '>=0.1.1' + '@libsql/client': '*' + '@neondatabase/serverless': '>=0.1' + '@op-engineering/op-sqlite': '>=2' + '@opentelemetry/api': ^1.4.1 + '@planetscale/database': '>=1' + '@types/better-sqlite3': '*' + '@types/pg': '*' + '@types/react': '>=18' + '@types/sql.js': '*' + '@vercel/postgres': '>=0.8.0' + '@xata.io/client': '*' + better-sqlite3: '>=7' + bun-types: '*' + expo-sqlite: '>=13.2.0' + knex: '*' + kysely: '*' + mysql2: '>=2' + pg: '>=8' + postgres: '>=3' + react: '>=18' + sql.js: '>=1' + sqlite3: '>=5' + peerDependenciesMeta: + '@aws-sdk/client-rds-data': + optional: true + '@cloudflare/workers-types': + optional: true + '@electric-sql/pglite': + optional: true + '@libsql/client': + optional: true + '@neondatabase/serverless': + optional: true + '@op-engineering/op-sqlite': + optional: true + '@opentelemetry/api': + optional: true + '@planetscale/database': + optional: true + '@types/better-sqlite3': + optional: true + '@types/pg': + optional: true + '@types/react': + optional: true + '@types/sql.js': + optional: true + '@vercel/postgres': + optional: true + '@xata.io/client': + optional: true + better-sqlite3: + optional: true + bun-types: + optional: true + expo-sqlite: + optional: true + knex: + optional: true + kysely: + optional: true + mysql2: + optional: true + pg: + optional: true + postgres: + optional: true + react: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.4.789: + resolution: {integrity: sha512-0VbyiaXoT++Fi2vHGo2ThOeS6X3vgRCWrjPeO2FeIAWL6ItiSJ9BqlH8LfCXe3X1IdcG+S0iLoNaxQWhfZoGzQ==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + enhanced-resolve@5.17.0: + resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} + engines: {node: '>=10.13.0'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.5.3: + resolution: {integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==} + + esbuild-register@3.5.0: + resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} + peerDependencies: + esbuild: '>=0.12 <1' + + esbuild@0.18.20: + resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + engines: {node: '>=12'} + hasBin: true + + esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@5.1.3: + resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint@8.42.0: + resolution: {integrity: sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + express@4.19.2: + resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} + engines: {node: '>= 0.10.0'} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-content-type-parse@1.1.0: + resolution: {integrity: sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==} + + fast-decode-uri-component@1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-json-stringify@5.16.0: + resolution: {integrity: sha512-A4bg6E15QrkuVO3f0SwIASgzMzR6XC4qTyTqhf3hYXy0iazbAdZKwkE+ox4WgzKyzM6ygvbdq3r134UjOaaAnA==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-querystring@1.1.2: + resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-uri@2.3.0: + resolution: {integrity: sha512-eel5UKGn369gGEWOqBShmFJWfq/xSJvsgDzgLYC845GneayWvXBf0lJCBn5qTABfewy1ZDPoaR5OZCP+kssfuw==} + + fastify-plugin@4.5.1: + resolution: {integrity: sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==} + + fastify@4.27.0: + resolution: {integrity: sha512-ci9IXzbigB8dyi0mSy3faa3Bsj0xWAPb9JeT4KRzubdSb6pNhcADRUaXCBml6V1Ss/a05kbtQls5LBmhHydoTA==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + figures@5.0.0: + resolution: {integrity: sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==} + engines: {node: '>=14'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + file-stream-rotator@0.6.1: + resolution: {integrity: sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + + find-my-way@8.2.0: + resolution: {integrity: sha512-HdWXgFYc6b1BJcOBDBwjqWuHJj1WYiqrxSh25qtU4DabpMFdj/gSunNBQb83t+8Zt67D7CXEzJWTkxaShMTMOA==} + engines: {node: '>=14'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + fork-ts-checker-webpack-plugin@9.0.2: + resolution: {integrity: sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==} + engines: {node: '>=12.13.0', yarn: '>=1.0.0'} + peerDependencies: + typescript: '>3.6.0' + webpack: ^5.11.0 + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + formidable@3.5.1: + resolution: {integrity: sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-monkey@1.0.6: + resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + + generic-pool@3.9.0: + resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} + engines: {node: '>= 4'} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-tsconfig@4.7.5: + resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@10.4.1: + resolution: {integrity: sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==} + engines: {node: '>=16 || 14 >=14.18'} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-own-prop@2.0.0: + resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hexoid@1.0.0: + resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} + engines: {node: '>=8'} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + + inquirer@9.2.12: + resolution: {integrity: sha512-mg3Fh9g2zfuVWJn6lhST0O7x4n03k7G8Tx5nvikJkbq8/CK47WDVm+UznF0G6s5Zi0KcyUisr6DU8T67N5U+1Q==} + engines: {node: '>=14.18.0'} + + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.2: + resolution: {integrity: sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + iterare@1.2.1: + resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} + engines: {node: '>=6'} + + jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + + jackspeak@3.3.0: + resolution: {integrity: sha512-glPiBfKguqA7v8JsXO3iLjJWZ9FV1vNpoI0I9hI9Mnk5yetO9uPLSpiCEmiVijAssv2f54HpvtzvAHfhPieiDQ==} + engines: {node: '>=14'} + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-ref-resolver@1.0.1: + resolution: {integrity: sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.2.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + + jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + libphonenumber-js@1.11.2: + resolution: {integrity: sha512-V9mGLlaXN1WETzqQvSu6qf6XVAr3nFuJvWsHcuzCCCo6xUKawwSxOPTpan5CGOSKTn5w/bQuCZcLPJkyysgC3w==} + + light-my-request@5.13.0: + resolution: {integrity: sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + logform@2.6.0: + resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==} + engines: {node: '>= 12.0.0'} + + long@5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + + lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + engines: {node: 14 || >=16.14} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + lru-cache@8.0.5: + resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} + engines: {node: '>=16.14'} + + magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} + + merge-descriptors@1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.4: + resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mnemonist@0.39.6: + resolution: {integrity: sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA==} + + moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multer@1.4.4-lts.1: + resolution: {integrity: sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==} + engines: {node: '>= 6.0.0'} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + mysql2@3.10.0: + resolution: {integrity: sha512-qx0mfWYt1DpTPkw8mAcHW/OwqqyNqBLBHvY5IjN8+icIYTjt6znrgYJ+gxqNNRpVknb5Wc/gcCM4XjbCR0j5tw==} + engines: {node: '>= 8.0'} + + named-placeholders@1.1.3: + resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==} + engines: {node: '>=12.0.0'} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + + node-emoji@1.11.0: + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + + nodemailer@6.9.13: + resolution: {integrity: sha512-7o38Yogx6krdoBf3jCAqnIN4oSQFx+fMa0I7dK1D+me9kBxx12D+/33wSb+fhOCtIxvYJ+4x4IMEhmhCKfAiOA==} + engines: {node: '>=6.0.0'} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + obliterator@2.0.4: + resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + + path-to-regexp@3.2.0: + resolution: {integrity: sha512-jczvQbCUS7XmS7o+y1aEO9OBVFeZBQ1MDSEqmO7xSoPgOPoowY/SxLpZ6Vh97/8qHZOteiCKb7gkG9gA2ZUxJA==} + + path-to-regexp@6.2.2: + resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@3.0.1: + resolution: {integrity: sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==} + engines: {node: '>=10'} + + pino-abstract-transport@1.2.0: + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@9.1.0: + resolution: {integrity: sha512-qUcgfrlyOtjwhNLdbhoL7NR4NkHjzykAPw0V2QLFbvu/zss29h4NkRnibyFzBrNCbzCOY3WZ9hhKSwfOkNggYA==} + hasBin: true + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@3.3.0: + resolution: {integrity: sha512-J9odKxERhCQ10OC2yb93583f6UnYutOeiV5i0zEDS7UGTdUt0u+y8erxl3lBKvwo/JHyyoEdXjwp4dke9oyZ/g==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process-warning@3.0.0: + resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + + qs@6.12.1: + resolution: {integrity: sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + redis@4.6.14: + resolution: {integrity: sha512-GrNg/e33HtsQwNXL7kJT+iNFPSwE1IPmd7wzV3j4f2z0EYxZfZE7FVTmUysgAtqQQtg5NXF5SNLR9OdO/UHOfw==} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + ret@0.4.3: + resolution: {integrity: sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==} + engines: {node: '>=10'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@4.4.1: + resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} + engines: {node: '>=14'} + hasBin: true + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex2@3.1.0: + resolution: {integrity: sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==} + + safe-stable-stringify@2.4.3: + resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + + secure-json-parse@2.7.0: + resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + engines: {node: '>=10'} + hasBin: true + + send@0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + + seq-queue@0.0.5: + resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serve-static@1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + + set-cookie-parser@2.6.0: + resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + sonic-boom@4.0.1: + resolution: {integrity: sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sqlstring@2.3.3: + resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} + engines: {node: '>= 0.6'} + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + superagent@9.0.2: + resolution: {integrity: sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==} + engines: {node: '>=14.18.0'} + + supertest@7.0.0: + resolution: {integrity: sha512-qlsr7fIC0lSddmA3tzojvzubYxvlGtzumcdHgPwbFWMISQwL22MhM2Y3LNt+6w9Yyx7559VW5ab70dgphm8qQA==} + engines: {node: '>=14.18.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + swagger-ui-dist@5.11.2: + resolution: {integrity: sha512-jQG0cRgJNMZ7aCoiFofnoojeSaa/+KgWaDlfgs8QN+BXoGMpxeMVY5OEnjq4OlNvF3yjftO8c9GRAgcHlO+u7A==} + + symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + + synckit@0.8.8: + resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + engines: {node: ^14.18.0 || >=16.0.0} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + terser-webpack-plugin@5.3.10: + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.31.0: + resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thread-stream@3.0.2: + resolution: {integrity: sha512-cBL4xF2A3lSINV4rD5tyqnKH4z/TgWPvT+NaVhJDSwK962oo/Ye7cHSMbDzwcu7tAE1SfU6Q4XtV6Hucmi6Hlw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toad-cache@3.7.0: + resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==} + engines: {node: '>=12'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-jest@29.1.4: + resolution: {integrity: sha512-YiHwDhSvCiItoAgsKtoLFCuakDzDsJ1DLDnSouTaTmdOcOwIkSzbLXduaQ6M5DRVhuZC/NYaaZ/mtHbWMv/S6Q==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + + ts-loader@9.5.1: + resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths-webpack-plugin@4.1.0: + resolution: {integrity: sha512-xWFISjviPydmtmgeUAuXp4N1fky+VCtfhOkDUFIv5ea7p4wuTomI4QTrXvFBX2S4jZsmyTSrStQl+E+4w+RzxA==} + engines: {node: '>=10.13.0'} + + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + + ua-parser-js@1.0.38: + resolution: {integrity: sha512-Aq5ppTOfvrCMgAPneW1HfWj66Xi7XL+/mIy996R1/CLS/rcyJQm6QZdsKrUeivDFQ+Oc9Wyuwor8Ze8peEoUoQ==} + + uid@2.0.2: + resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} + engines: {node: '>=8'} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.0.16: + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.2.0: + resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + engines: {node: '>=10.12.0'} + + validator@13.12.0: + resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + watchpack@2.4.1: + resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} + engines: {node: '>=10.13.0'} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webpack-node-externals@3.0.0: + resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==} + engines: {node: '>=6'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.90.1: + resolution: {integrity: sha512-SstPdlAC5IvgFnhiRok8hqJo/+ArAbNv7rhU4fnWGHNVfN59HSQFaxZDSAL3IFG2YmqxuRs+IU33milSxbPlog==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + winston-daily-rotate-file@5.0.0: + resolution: {integrity: sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==} + engines: {node: '>=8'} + peerDependencies: + winston: ^3 + + winston-transport@4.7.0: + resolution: {integrity: sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==} + engines: {node: '>= 12.0.0'} + + winston@3.13.0: + resolution: {integrity: sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==} + engines: {node: '>= 12.0.0'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@angular-devkit/core@17.1.2(chokidar@3.6.0)': + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1(ajv@8.12.0) + jsonc-parser: 3.2.0 + picomatch: 3.0.1 + rxjs: 7.8.1 + source-map: 0.7.4 + optionalDependencies: + chokidar: 3.6.0 + + '@angular-devkit/schematics-cli@17.1.2(chokidar@3.6.0)': + dependencies: + '@angular-devkit/core': 17.1.2(chokidar@3.6.0) + '@angular-devkit/schematics': 17.1.2(chokidar@3.6.0) + ansi-colors: 4.1.3 + inquirer: 9.2.12 + symbol-observable: 4.0.0 + yargs-parser: 21.1.1 + transitivePeerDependencies: + - chokidar + + '@angular-devkit/schematics@17.1.2(chokidar@3.6.0)': + dependencies: + '@angular-devkit/core': 17.1.2(chokidar@3.6.0) + jsonc-parser: 3.2.0 + magic-string: 0.30.5 + ora: 5.4.1 + rxjs: 7.8.1 + transitivePeerDependencies: + - chokidar + + '@babel/code-frame@7.24.6': + dependencies: + '@babel/highlight': 7.24.6 + picocolors: 1.0.1 + + '@babel/compat-data@7.24.6': {} + + '@babel/core@7.24.6': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/helper-compilation-targets': 7.24.6 + '@babel/helper-module-transforms': 7.24.6(@babel/core@7.24.6) + '@babel/helpers': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/template': 7.24.6 + '@babel/traverse': 7.24.6 + '@babel/types': 7.24.6 + convert-source-map: 2.0.0 + debug: 4.3.5 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.24.6': + dependencies: + '@babel/types': 7.24.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-compilation-targets@7.24.6': + dependencies: + '@babel/compat-data': 7.24.6 + '@babel/helper-validator-option': 7.24.6 + browserslist: 4.23.0 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-environment-visitor@7.24.6': {} + + '@babel/helper-function-name@7.24.6': + dependencies: + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 + + '@babel/helper-hoist-variables@7.24.6': + dependencies: + '@babel/types': 7.24.6 + + '@babel/helper-module-imports@7.24.6': + dependencies: + '@babel/types': 7.24.6 + + '@babel/helper-module-transforms@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-module-imports': 7.24.6 + '@babel/helper-simple-access': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 + '@babel/helper-validator-identifier': 7.24.6 + + '@babel/helper-plugin-utils@7.24.6': {} + + '@babel/helper-simple-access@7.24.6': + dependencies: + '@babel/types': 7.24.6 + + '@babel/helper-split-export-declaration@7.24.6': + dependencies: + '@babel/types': 7.24.6 + + '@babel/helper-string-parser@7.24.6': {} + + '@babel/helper-validator-identifier@7.24.6': {} + + '@babel/helper-validator-option@7.24.6': {} + + '@babel/helpers@7.24.6': + dependencies: + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 + + '@babel/highlight@7.24.6': + dependencies: + '@babel/helper-validator-identifier': 7.24.6 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + + '@babel/parser@7.24.6': + dependencies: + '@babel/types': 7.24.6 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-jsx@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/plugin-syntax-typescript@7.24.6(@babel/core@7.24.6)': + dependencies: + '@babel/core': 7.24.6 + '@babel/helper-plugin-utils': 7.24.6 + + '@babel/template@7.24.6': + dependencies: + '@babel/code-frame': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 + + '@babel/traverse@7.24.6': + dependencies: + '@babel/code-frame': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/helper-environment-visitor': 7.24.6 + '@babel/helper-function-name': 7.24.6 + '@babel/helper-hoist-variables': 7.24.6 + '@babel/helper-split-export-declaration': 7.24.6 + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 + debug: 4.3.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.24.6': + dependencies: + '@babel/helper-string-parser': 7.24.6 + '@babel/helper-validator-identifier': 7.24.6 + to-fast-properties: 2.0.0 + + '@bcoe/v8-coverage@0.2.3': {} + + '@colors/colors@1.5.0': + optional: true + + '@colors/colors@1.6.0': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + + '@esbuild-kit/core-utils@3.3.2': + dependencies: + esbuild: 0.18.20 + source-map-support: 0.5.21 + + '@esbuild-kit/esm-loader@2.6.5': + dependencies: + '@esbuild-kit/core-utils': 3.3.2 + get-tsconfig: 4.7.5 + + '@esbuild/aix-ppc64@0.19.12': + optional: true + + '@esbuild/android-arm64@0.18.20': + optional: true + + '@esbuild/android-arm64@0.19.12': + optional: true + + '@esbuild/android-arm@0.18.20': + optional: true + + '@esbuild/android-arm@0.19.12': + optional: true + + '@esbuild/android-x64@0.18.20': + optional: true + + '@esbuild/android-x64@0.19.12': + optional: true + + '@esbuild/darwin-arm64@0.18.20': + optional: true + + '@esbuild/darwin-arm64@0.19.12': + optional: true + + '@esbuild/darwin-x64@0.18.20': + optional: true + + '@esbuild/darwin-x64@0.19.12': + optional: true + + '@esbuild/freebsd-arm64@0.18.20': + optional: true + + '@esbuild/freebsd-arm64@0.19.12': + optional: true + + '@esbuild/freebsd-x64@0.18.20': + optional: true + + '@esbuild/freebsd-x64@0.19.12': + optional: true + + '@esbuild/linux-arm64@0.18.20': + optional: true + + '@esbuild/linux-arm64@0.19.12': + optional: true + + '@esbuild/linux-arm@0.18.20': + optional: true + + '@esbuild/linux-arm@0.19.12': + optional: true + + '@esbuild/linux-ia32@0.18.20': + optional: true + + '@esbuild/linux-ia32@0.19.12': + optional: true + + '@esbuild/linux-loong64@0.18.20': + optional: true + + '@esbuild/linux-loong64@0.19.12': + optional: true + + '@esbuild/linux-mips64el@0.18.20': + optional: true + + '@esbuild/linux-mips64el@0.19.12': + optional: true + + '@esbuild/linux-ppc64@0.18.20': + optional: true + + '@esbuild/linux-ppc64@0.19.12': + optional: true + + '@esbuild/linux-riscv64@0.18.20': + optional: true + + '@esbuild/linux-riscv64@0.19.12': + optional: true + + '@esbuild/linux-s390x@0.18.20': + optional: true + + '@esbuild/linux-s390x@0.19.12': + optional: true + + '@esbuild/linux-x64@0.18.20': + optional: true + + '@esbuild/linux-x64@0.19.12': + optional: true + + '@esbuild/netbsd-x64@0.18.20': + optional: true + + '@esbuild/netbsd-x64@0.19.12': + optional: true + + '@esbuild/openbsd-x64@0.18.20': + optional: true + + '@esbuild/openbsd-x64@0.19.12': + optional: true + + '@esbuild/sunos-x64@0.18.20': + optional: true + + '@esbuild/sunos-x64@0.19.12': + optional: true + + '@esbuild/win32-arm64@0.18.20': + optional: true + + '@esbuild/win32-arm64@0.19.12': + optional: true + + '@esbuild/win32-ia32@0.18.20': + optional: true + + '@esbuild/win32-ia32@0.19.12': + optional: true + + '@esbuild/win32-x64@0.18.20': + optional: true + + '@esbuild/win32-x64@0.19.12': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.42.0)': + dependencies: + eslint: 8.42.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.10.1': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.5 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.42.0': {} + + '@fastify/accept-negotiator@1.1.0': {} + + '@fastify/ajv-compiler@3.5.0': + dependencies: + ajv: 8.16.0 + ajv-formats: 2.1.1(ajv@8.16.0) + fast-uri: 2.3.0 + + '@fastify/cors@9.0.1': + dependencies: + fastify-plugin: 4.5.1 + mnemonist: 0.39.6 + + '@fastify/error@3.4.1': {} + + '@fastify/fast-json-stringify-compiler@4.3.0': + dependencies: + fast-json-stringify: 5.16.0 + + '@fastify/formbody@7.4.0': + dependencies: + fast-querystring: 1.1.2 + fastify-plugin: 4.5.1 + + '@fastify/merge-json-schemas@0.1.1': + dependencies: + fast-deep-equal: 3.1.3 + + '@fastify/middie@8.3.1': + dependencies: + '@fastify/error': 3.4.1 + fastify-plugin: 4.5.1 + path-to-regexp: 6.2.2 + reusify: 1.0.4 + + '@fastify/send@2.1.0': + dependencies: + '@lukeed/ms': 2.0.2 + escape-html: 1.0.3 + fast-decode-uri-component: 1.0.1 + http-errors: 2.0.0 + mime: 3.0.0 + + '@fastify/static@7.0.4': + dependencies: + '@fastify/accept-negotiator': 1.1.0 + '@fastify/send': 2.1.0 + content-disposition: 0.5.4 + fastify-plugin: 4.5.1 + fastq: 1.17.1 + glob: 10.4.1 + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.5 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.3': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0 + jest-runner: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.7 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 20.14.1 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 20.14.1 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.2.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0': + dependencies: + '@babel/core': 7.24.6 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.7 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.14.1 + '@types/yargs': 17.0.32 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@ljharb/through@2.3.13': + dependencies: + call-bind: 1.0.7 + + '@lukeed/csprng@1.1.0': {} + + '@lukeed/ms@2.0.2': {} + + '@microsoft/tsdoc@0.14.2': {} + + '@nestjs/cli@10.3.2(esbuild@0.19.12)': + dependencies: + '@angular-devkit/core': 17.1.2(chokidar@3.6.0) + '@angular-devkit/schematics': 17.1.2(chokidar@3.6.0) + '@angular-devkit/schematics-cli': 17.1.2(chokidar@3.6.0) + '@nestjs/schematics': 10.1.1(chokidar@3.6.0)(typescript@5.3.3) + chalk: 4.1.2 + chokidar: 3.6.0 + cli-table3: 0.6.3 + commander: 4.1.1 + fork-ts-checker-webpack-plugin: 9.0.2(typescript@5.3.3)(webpack@5.90.1(esbuild@0.19.12)) + glob: 10.3.10 + inquirer: 8.2.6 + node-emoji: 1.11.0 + ora: 5.4.1 + rimraf: 4.4.1 + shelljs: 0.8.5 + source-map-support: 0.5.21 + tree-kill: 1.2.2 + tsconfig-paths: 4.2.0 + tsconfig-paths-webpack-plugin: 4.1.0 + typescript: 5.3.3 + webpack: 5.90.1(esbuild@0.19.12) + webpack-node-externals: 3.0.0 + transitivePeerDependencies: + - esbuild + - uglify-js + - webpack-cli + + '@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1)': + dependencies: + iterare: 1.2.1 + reflect-metadata: 0.2.2 + rxjs: 7.8.1 + tslib: 2.6.2 + uid: 2.0.2 + optionalDependencies: + class-transformer: 0.5.1 + class-validator: 0.14.1 + + '@nestjs/config@3.2.2(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(rxjs@7.8.1)': + dependencies: + '@nestjs/common': 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + dotenv: 16.4.5 + dotenv-expand: 10.0.0 + lodash: 4.17.21 + rxjs: 7.8.1 + uuid: 9.0.1 + + '@nestjs/core@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1)': + dependencies: + '@nestjs/common': 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nuxtjs/opencollective': 0.3.2 + fast-safe-stringify: 2.1.1 + iterare: 1.2.1 + path-to-regexp: 3.2.0 + reflect-metadata: 0.2.2 + rxjs: 7.8.1 + tslib: 2.6.2 + uid: 2.0.2 + optionalDependencies: + '@nestjs/platform-express': 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9) + transitivePeerDependencies: + - encoding + + '@nestjs/mapped-types@2.0.5(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)': + dependencies: + '@nestjs/common': 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + reflect-metadata: 0.2.2 + optionalDependencies: + class-transformer: 0.5.1 + class-validator: 0.14.1 + + '@nestjs/platform-express@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9)': + dependencies: + '@nestjs/common': 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/core': 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1) + body-parser: 1.20.2 + cors: 2.8.5 + express: 4.19.2 + multer: 1.4.4-lts.1 + tslib: 2.6.2 + transitivePeerDependencies: + - supports-color + + '@nestjs/platform-fastify@10.3.9(@fastify/static@7.0.4)(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1))': + dependencies: + '@fastify/cors': 9.0.1 + '@fastify/formbody': 7.4.0 + '@fastify/middie': 8.3.1 + '@nestjs/common': 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/core': 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1) + fastify: 4.27.0 + light-my-request: 5.13.0 + path-to-regexp: 3.2.0 + tslib: 2.6.2 + optionalDependencies: + '@fastify/static': 7.0.4 + + '@nestjs/schematics@10.1.1(chokidar@3.6.0)(typescript@5.3.3)': + dependencies: + '@angular-devkit/core': 17.1.2(chokidar@3.6.0) + '@angular-devkit/schematics': 17.1.2(chokidar@3.6.0) + comment-json: 4.2.3 + jsonc-parser: 3.2.1 + pluralize: 8.0.0 + typescript: 5.3.3 + transitivePeerDependencies: + - chokidar + + '@nestjs/schematics@10.1.1(chokidar@3.6.0)(typescript@5.4.5)': + dependencies: + '@angular-devkit/core': 17.1.2(chokidar@3.6.0) + '@angular-devkit/schematics': 17.1.2(chokidar@3.6.0) + comment-json: 4.2.3 + jsonc-parser: 3.2.1 + pluralize: 8.0.0 + typescript: 5.4.5 + transitivePeerDependencies: + - chokidar + + '@nestjs/swagger@7.3.1(@fastify/static@7.0.4)(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)': + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@nestjs/common': 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/core': 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/mapped-types': 2.0.5(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2) + js-yaml: 4.1.0 + lodash: 4.17.21 + path-to-regexp: 3.2.0 + reflect-metadata: 0.2.2 + swagger-ui-dist: 5.11.2 + optionalDependencies: + '@fastify/static': 7.0.4 + class-transformer: 0.5.1 + class-validator: 0.14.1 + + '@nestjs/testing@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9))': + dependencies: + '@nestjs/common': 10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1) + '@nestjs/core': 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/platform-express@10.3.9)(reflect-metadata@0.2.2)(rxjs@7.8.1) + tslib: 2.6.2 + optionalDependencies: + '@nestjs/platform-express': 10.3.9(@nestjs/common@10.3.9(class-transformer@0.5.1)(class-validator@0.14.1)(reflect-metadata@0.2.2)(rxjs@7.8.1))(@nestjs/core@10.3.9) + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@nuxtjs/opencollective@0.3.2': + dependencies: + chalk: 4.1.2 + consola: 2.15.3 + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.1.1': {} + + '@redis/bloom@1.2.0(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@redis/client@1.5.16': + dependencies: + cluster-key-slot: 1.1.2 + generic-pool: 3.9.0 + yallist: 4.0.0 + + '@redis/graph@1.1.1(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@redis/json@1.0.6(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@redis/search@1.1.6(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@redis/time-series@1.0.5(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@sinclair/typebox@0.27.8': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.24.6 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.24.6 + '@babel/types': 7.24.6 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.24.6 + + '@types/body-parser@1.19.5': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 20.14.1 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 20.14.1 + + '@types/cookiejar@2.1.5': {} + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 8.56.10 + '@types/estree': 1.0.5 + + '@types/eslint@8.56.10': + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.5': {} + + '@types/express-serve-static-core@4.19.3': + dependencies: + '@types/node': 20.14.1 + '@types/qs': 6.9.15 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + + '@types/express@4.17.21': + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.3 + '@types/qs': 6.9.15 + '@types/serve-static': 1.15.7 + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 20.14.1 + + '@types/http-errors@2.0.4': {} + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jest@29.5.12': + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + + '@types/json-schema@7.0.15': {} + + '@types/methods@1.1.4': {} + + '@types/mime@1.3.5': {} + + '@types/node@20.14.1': + dependencies: + undici-types: 5.26.5 + + '@types/qs@6.9.15': {} + + '@types/range-parser@1.2.7': {} + + '@types/semver@7.5.8': {} + + '@types/send@0.17.4': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 20.14.1 + + '@types/serve-static@1.15.7': + dependencies: + '@types/http-errors': 2.0.4 + '@types/node': 20.14.1 + '@types/send': 0.17.4 + + '@types/stack-utils@2.0.3': {} + + '@types/superagent@8.1.7': + dependencies: + '@types/cookiejar': 2.1.5 + '@types/methods': 1.1.4 + '@types/node': 20.14.1 + + '@types/supertest@6.0.2': + dependencies: + '@types/methods': 1.1.4 + '@types/superagent': 8.1.7 + + '@types/triple-beam@1.3.5': {} + + '@types/validator@13.11.10': {} + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.32': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.42.0)(typescript@5.4.5))(eslint@8.42.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/regexpp': 4.10.1 + '@typescript-eslint/parser': 6.21.0(eslint@8.42.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.42.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.42.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.5 + eslint: 8.42.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@6.21.0(eslint@8.42.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.5 + eslint: 8.42.0 + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + + '@typescript-eslint/type-utils@6.21.0(eslint@8.42.0)(typescript@5.4.5)': + dependencies: + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.42.0)(typescript@5.4.5) + debug: 4.3.5 + eslint: 8.42.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@6.21.0': {} + + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5)': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.5 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + optionalDependencies: + typescript: 5.4.5 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@6.21.0(eslint@8.42.0)(typescript@5.4.5)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + eslint: 8.42.0 + semver: 7.6.2 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + + '@webassemblyjs/ast@1.12.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + + '@webassemblyjs/floating-point-hex-parser@1.11.6': {} + + '@webassemblyjs/helper-api-error@1.11.6': {} + + '@webassemblyjs/helper-buffer@1.12.1': {} + + '@webassemblyjs/helper-numbers@1.11.6': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.11.6': {} + + '@webassemblyjs/helper-wasm-section@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 + + '@webassemblyjs/ieee754@1.11.6': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.11.6': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.11.6': {} + + '@webassemblyjs/wasm-edit@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 + + '@webassemblyjs/wasm-gen@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + + '@webassemblyjs/wasm-opt@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + + '@webassemblyjs/wasm-parser@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + + '@webassemblyjs/wast-printer@1.12.1': + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@xtuc/long': 4.2.2 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + abstract-logging@2.0.1: {} + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-import-assertions@1.9.0(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + + acorn-jsx@5.3.2(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + + acorn-walk@8.3.2: {} + + acorn@8.11.3: {} + + ajv-formats@2.1.1(ajv@8.12.0): + optionalDependencies: + ajv: 8.12.0 + + ajv-formats@2.1.1(ajv@8.16.0): + optionalDependencies: + ajv: 8.16.0 + + ajv-formats@3.0.1(ajv@8.16.0): + optionalDependencies: + ajv: 8.16.0 + + ajv-keywords@3.5.2(ajv@6.12.6): + dependencies: + ajv: 6.12.6 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ajv@8.16.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + append-field@1.0.0: {} + + arg@4.1.3: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-flatten@1.1.1: {} + + array-timsort@1.0.3: {} + + array-union@2.1.0: {} + + asap@2.0.6: {} + + async@3.2.5: {} + + asynckit@0.4.0: {} + + atomic-sleep@1.0.0: {} + + avvio@8.3.2: + dependencies: + '@fastify/error': 3.4.1 + fastq: 1.17.1 + + babel-jest@29.7.0(@babel/core@7.24.6): + dependencies: + '@babel/core': 7.24.6 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.24.6) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.24.6 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.24.6 + '@babel/types': 7.24.6 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.6): + dependencies: + '@babel/core': 7.24.6 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.6) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.6) + + babel-preset-jest@29.6.3(@babel/core@7.24.6): + dependencies: + '@babel/core': 7.24.6 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.6) + + balanced-match@1.0.2: {} + + base64-js@1.5.1: {} + + binary-extensions@2.3.0: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + + body-parser@1.20.2: + 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 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + browserslist@4.23.0: + dependencies: + caniuse-lite: 1.0.30001627 + electron-to-chromium: 1.4.789 + node-releases: 2.0.14 + update-browserslist-db: 1.0.16(browserslist@4.23.0) + + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + buffer-from@1.1.2: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + bytes@3.1.2: {} + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + + callsites@3.1.0: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001627: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.3.0: {} + + char-regex@1.0.2: {} + + chardet@0.7.0: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + 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 + + chrome-trace-event@1.0.4: {} + + ci-info@3.9.0: {} + + cjs-module-lexer@1.3.1: {} + + class-transformer@0.5.1: {} + + class-validator@0.14.1: + dependencies: + '@types/validator': 13.11.10 + libphonenumber-js: 1.11.2 + validator: 13.12.0 + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-spinners@2.9.2: {} + + cli-table3@0.6.3: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + + cli-width@3.0.0: {} + + cli-width@4.1.0: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@1.0.4: {} + + cluster-key-slot@1.1.2: {} + + co@4.6.0: {} + + collect-v8-coverage@1.0.2: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + + colors@1.4.0: {} + + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@2.20.3: {} + + commander@4.1.1: {} + + comment-json@4.2.3: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + + component-emitter@1.3.1: {} + + concat-map@0.0.1: {} + + concat-stream@1.6.2: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + + consola@2.15.3: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + convert-source-map@2.0.0: {} + + cookie-signature@1.0.6: {} + + cookie@0.6.0: {} + + cookiejar@2.1.4: {} + + core-util-is@1.0.3: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cosmiconfig@8.3.6(typescript@5.3.3): + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.3.3 + + create-jest@29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-require@1.1.1: {} + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@4.3.5: + dependencies: + ms: 2.1.2 + + dedent@1.5.3: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + delayed-stream@1.0.0: {} + + denque@2.1.0: {} + + depd@2.0.0: {} + + destroy@1.2.0: {} + + detect-newline@3.1.0: {} + + dezalgo@1.0.4: + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + + diff-sequences@29.6.3: {} + + diff@4.0.2: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dotenv-expand@10.0.0: {} + + dotenv@16.4.5: {} + + drizzle-kit@0.22.2: + dependencies: + '@esbuild-kit/esm-loader': 2.6.5 + esbuild: 0.19.12 + esbuild-register: 3.5.0(esbuild@0.19.12) + transitivePeerDependencies: + - supports-color + + drizzle-orm@0.31.1(mysql2@3.10.0): + optionalDependencies: + mysql2: 3.10.0 + + eastasianwidth@0.2.0: {} + + ee-first@1.1.1: {} + + electron-to-chromium@1.4.789: {} + + emittery@0.13.1: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + enabled@2.0.0: {} + + encodeurl@1.0.2: {} + + enhanced-resolve@5.17.0: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-module-lexer@1.5.3: {} + + esbuild-register@3.5.0(esbuild@0.19.12): + dependencies: + debug: 4.3.5 + esbuild: 0.19.12 + transitivePeerDependencies: + - supports-color + + esbuild@0.18.20: + 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 + + esbuild@0.19.12: + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + + escalade@3.1.2: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-config-prettier@9.1.0(eslint@8.42.0): + dependencies: + eslint: 8.42.0 + + eslint-plugin-prettier@5.1.3(@types/eslint@8.56.10)(eslint-config-prettier@9.1.0(eslint@8.42.0))(eslint@8.42.0)(prettier@3.3.0): + dependencies: + eslint: 8.42.0 + prettier: 3.3.0 + prettier-linter-helpers: 1.0.0 + synckit: 0.8.8 + optionalDependencies: + '@types/eslint': 8.56.10 + eslint-config-prettier: 9.1.0(eslint@8.42.0) + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.42.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.42.0) + '@eslint-community/regexpp': 4.10.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.42.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.5 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + + esprima@4.0.1: {} + + esquery@1.5.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + etag@1.8.1: {} + + event-target-shim@5.0.1: {} + + events@3.3.0: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + exit@0.1.2: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + express@4.19.2: + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.2 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.6.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 + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + fast-content-type-parse@1.1.0: {} + + fast-decode-uri-component@1.0.1: {} + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.7 + + fast-json-stable-stringify@2.1.0: {} + + fast-json-stringify@5.16.0: + dependencies: + '@fastify/merge-json-schemas': 0.1.1 + ajv: 8.16.0 + ajv-formats: 3.0.1(ajv@8.16.0) + fast-deep-equal: 3.1.3 + fast-uri: 2.3.0 + json-schema-ref-resolver: 1.0.1 + rfdc: 1.3.1 + + fast-levenshtein@2.0.6: {} + + fast-querystring@1.1.2: + dependencies: + fast-decode-uri-component: 1.0.1 + + fast-redact@3.5.0: {} + + fast-safe-stringify@2.1.1: {} + + fast-uri@2.3.0: {} + + fastify-plugin@4.5.1: {} + + fastify@4.27.0: + dependencies: + '@fastify/ajv-compiler': 3.5.0 + '@fastify/error': 3.4.1 + '@fastify/fast-json-stringify-compiler': 4.3.0 + abstract-logging: 2.0.1 + avvio: 8.3.2 + fast-content-type-parse: 1.1.0 + fast-json-stringify: 5.16.0 + find-my-way: 8.2.0 + light-my-request: 5.13.0 + pino: 9.1.0 + process-warning: 3.0.0 + proxy-addr: 2.0.7 + rfdc: 1.3.1 + secure-json-parse: 2.7.0 + semver: 7.6.2 + toad-cache: 3.7.0 + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + fecha@4.2.3: {} + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + figures@5.0.0: + dependencies: + escape-string-regexp: 5.0.0 + is-unicode-supported: 1.3.0 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + file-stream-rotator@0.6.1: + dependencies: + moment: 2.30.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@1.2.0: + 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 + + find-my-way@8.2.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-querystring: 1.1.2 + safe-regex2: 3.1.0 + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.1: {} + + fn.name@1.1.0: {} + + foreground-child@3.1.1: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + fork-ts-checker-webpack-plugin@9.0.2(typescript@5.3.3)(webpack@5.90.1(esbuild@0.19.12)): + dependencies: + '@babel/code-frame': 7.24.6 + chalk: 4.1.2 + chokidar: 3.6.0 + cosmiconfig: 8.3.6(typescript@5.3.3) + deepmerge: 4.3.1 + fs-extra: 10.1.0 + memfs: 3.5.3 + minimatch: 3.1.2 + node-abort-controller: 3.1.1 + schema-utils: 3.3.0 + semver: 7.6.2 + tapable: 2.2.1 + typescript: 5.3.3 + webpack: 5.90.1(esbuild@0.19.12) + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + formidable@3.5.1: + dependencies: + dezalgo: 1.0.4 + hexoid: 1.0.0 + once: 1.4.0 + + forwarded@0.2.0: {} + + fresh@0.5.2: {} + + fs-extra@10.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-monkey@1.0.6: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + generate-function@2.3.1: + dependencies: + is-property: 1.0.2 + + generic-pool@3.9.0: {} + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-package-type@0.1.0: {} + + get-stream@6.0.1: {} + + get-tsconfig@4.7.5: + dependencies: + resolve-pkg-maps: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@10.3.10: + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.4 + minipass: 7.1.2 + path-scurry: 1.11.1 + + glob@10.4.1: + dependencies: + foreground-child: 3.1.1 + jackspeak: 3.3.0 + minimatch: 9.0.4 + minipass: 7.1.2 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@9.3.5: + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.11.1 + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-own-prop@2.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hexoid@1.0.0: {} + + html-escaper@2.0.2: {} + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + human-signals@2.1.0: {} + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ieee754@1.2.1: {} + + ignore@5.3.1: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-local@3.1.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + inquirer@8.2.6: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + + inquirer@9.2.12: + dependencies: + '@ljharb/through': 2.3.13 + ansi-escapes: 4.3.2 + chalk: 5.3.0 + cli-cursor: 3.1.0 + cli-width: 4.1.0 + external-editor: 3.1.0 + figures: 5.0.0 + lodash: 4.17.21 + mute-stream: 1.0.0 + ora: 5.4.1 + run-async: 3.0.0 + rxjs: 7.8.1 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + + interpret@1.4.0: {} + + ipaddr.js@1.9.1: {} + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.13.1: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-generator-fn@2.1.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-interactive@1.0.0: {} + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-property@1.0.2: {} + + is-stream@2.0.1: {} + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@1.3.0: {} + + isarray@1.0.0: {} + + isexe@2.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.24.6 + '@babel/parser': 7.24.6 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.2: + dependencies: + '@babel/core': 7.24.6 + '@babel/parser': 7.24.6 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.6.2 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.3.5 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + iterare@1.2.1: {} + + jackspeak@2.3.6: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jackspeak@3.3.0: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3 + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)): + dependencies: + '@babel/core': 7.24.6 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.24.6) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0 + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.7 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.14.1 + ts-node: 10.9.2(@types/node@20.14.1)(typescript@5.4.5) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 20.14.1 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.7 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.24.6 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.7 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0: + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.8 + resolve.exports: 2.0.2 + slash: 3.0.0 + + jest-runner@29.7.0: + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0 + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + chalk: 4.1.2 + cjs-module-lexer: 1.3.1 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0: + dependencies: + '@babel/core': 7.24.6 + '@babel/generator': 7.24.6 + '@babel/plugin-syntax-jsx': 7.24.6(@babel/core@7.24.6) + '@babel/plugin-syntax-typescript': 7.24.6(@babel/core@7.24.6) + '@babel/types': 7.24.6 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.6) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.6.2 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.14.1 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@27.5.1: + dependencies: + '@types/node': 20.14.1 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest-worker@29.7.0: + dependencies: + '@types/node': 20.14.1 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)): + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@2.5.2: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-ref-resolver@1.0.1: + dependencies: + fast-deep-equal: 3.1.3 + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@2.2.3: {} + + jsonc-parser@3.2.0: {} + + jsonc-parser@3.2.1: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + kleur@3.0.3: {} + + kuler@2.0.0: {} + + leven@3.1.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + libphonenumber-js@1.11.2: {} + + light-my-request@5.13.0: + dependencies: + cookie: 0.6.0 + process-warning: 3.0.0 + set-cookie-parser: 2.6.0 + + lines-and-columns@1.2.4: {} + + loader-runner@4.3.0: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + logform@2.6.0: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.4.3 + triple-beam: 1.4.1 + + long@5.2.3: {} + + lru-cache@10.2.2: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@7.18.3: {} + + lru-cache@8.0.5: {} + + magic-string@0.30.5: + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + make-dir@4.0.0: + dependencies: + semver: 7.6.2 + + make-error@1.3.6: {} + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + media-typer@0.3.0: {} + + memfs@3.5.3: + dependencies: + fs-monkey: 1.0.6 + + merge-descriptors@1.0.1: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromatch@4.0.7: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mime@2.6.0: {} + + mime@3.0.0: {} + + mimic-fn@2.1.0: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@8.0.4: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.4: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@4.2.8: {} + + minipass@7.1.2: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mnemonist@0.39.6: + dependencies: + obliterator: 2.0.4 + + moment@2.30.1: {} + + ms@2.0.0: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + + multer@1.4.4-lts.1: + 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 + + mute-stream@0.0.8: {} + + mute-stream@1.0.0: {} + + mysql2@3.10.0: + dependencies: + denque: 2.1.0 + generate-function: 2.3.1 + iconv-lite: 0.6.3 + long: 5.2.3 + lru-cache: 8.0.5 + named-placeholders: 1.1.3 + seq-queue: 0.0.5 + sqlstring: 2.3.3 + + named-placeholders@1.1.3: + dependencies: + lru-cache: 7.18.3 + + natural-compare@1.4.0: {} + + negotiator@0.6.3: {} + + neo-async@2.6.2: {} + + node-abort-controller@3.1.1: {} + + node-emoji@1.11.0: + dependencies: + lodash: 4.17.21 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-int64@0.4.0: {} + + node-releases@2.0.14: {} + + nodemailer@6.9.13: {} + + normalize-path@3.0.0: {} + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.1: {} + + obliterator@2.0.4: {} + + on-exit-leak-free@2.1.2: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + os-tmpdir@1.0.2: {} + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-try@2.2.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.24.6 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parseurl@1.3.3: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.2.2 + minipass: 7.1.2 + + path-to-regexp@0.1.7: {} + + path-to-regexp@3.2.0: {} + + path-to-regexp@6.2.2: {} + + path-type@4.0.0: {} + + picocolors@1.0.1: {} + + picomatch@2.3.1: {} + + picomatch@3.0.1: {} + + pino-abstract-transport@1.2.0: + dependencies: + readable-stream: 4.5.2 + split2: 4.2.0 + + pino-std-serializers@7.0.0: {} + + pino@9.1.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 1.2.0 + pino-std-serializers: 7.0.0 + process-warning: 3.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.4.3 + sonic-boom: 4.0.1 + thread-stream: 3.0.2 + + pirates@4.0.6: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + pluralize@8.0.0: {} + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@3.3.0: {} + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + process-nextick-args@2.0.1: {} + + process-warning@3.0.0: {} + + process@0.11.10: {} + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + punycode@2.3.1: {} + + pure-rand@6.1.0: {} + + qs@6.11.0: + dependencies: + side-channel: 1.0.6 + + qs@6.12.1: + dependencies: + side-channel: 1.0.6 + + queue-microtask@1.2.3: {} + + quick-format-unescaped@4.0.4: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + react-is@18.3.1: {} + + readable-stream@2.3.8: + 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 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readable-stream@4.5.2: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + real-require@0.2.0: {} + + rechoir@0.6.2: + dependencies: + resolve: 1.22.8 + + redis@4.6.14: + dependencies: + '@redis/bloom': 1.2.0(@redis/client@1.5.16) + '@redis/client': 1.5.16 + '@redis/graph': 1.1.1(@redis/client@1.5.16) + '@redis/json': 1.0.6(@redis/client@1.5.16) + '@redis/search': 1.1.6(@redis/client@1.5.16) + '@redis/time-series': 1.0.5(@redis/client@1.5.16) + + reflect-metadata@0.2.2: {} + + repeat-string@1.6.1: {} + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve.exports@2.0.2: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + ret@0.4.3: {} + + reusify@1.0.4: {} + + rfdc@1.3.1: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rimraf@4.4.1: + dependencies: + glob: 9.3.5 + + run-async@2.4.1: {} + + run-async@3.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.6.3 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-regex2@3.1.0: + dependencies: + ret: 0.4.3 + + safe-stable-stringify@2.4.3: {} + + safer-buffer@2.1.2: {} + + schema-utils@3.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + + secure-json-parse@2.7.0: {} + + semver@6.3.1: {} + + semver@7.6.2: {} + + send@0.18.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 + + seq-queue@0.0.5: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + serve-static@1.15.0: + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + + set-cookie-parser@2.6.0: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + setprototypeof@1.2.0: {} + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + shelljs@0.8.5: + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + sonic-boom@4.0.1: + dependencies: + atomic-sleep: 1.0.0 + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + split2@4.2.0: {} + + sprintf-js@1.0.3: {} + + sqlstring@2.3.3: {} + + stack-trace@0.0.10: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + statuses@2.0.1: {} + + streamsearch@1.1.0: {} + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + + strip-bom@3.0.0: {} + + strip-bom@4.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-json-comments@3.1.1: {} + + superagent@9.0.2: + dependencies: + component-emitter: 1.3.1 + cookiejar: 2.1.4 + debug: 4.3.5 + fast-safe-stringify: 2.1.1 + form-data: 4.0.0 + formidable: 3.5.1 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.12.1 + transitivePeerDependencies: + - supports-color + + supertest@7.0.0: + dependencies: + methods: 1.1.2 + superagent: 9.0.2 + transitivePeerDependencies: + - supports-color + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + swagger-ui-dist@5.11.2: {} + + symbol-observable@4.0.0: {} + + synckit@0.8.8: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.3 + + tapable@2.2.1: {} + + terser-webpack-plugin@5.3.10(esbuild@0.19.12)(webpack@5.90.1(esbuild@0.19.12)): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.31.0 + webpack: 5.90.1(esbuild@0.19.12) + optionalDependencies: + esbuild: 0.19.12 + + terser@5.31.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.11.3 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + text-hex@1.0.0: {} + + text-table@0.2.0: {} + + thread-stream@3.0.2: + dependencies: + real-require: 0.2.0 + + through@2.3.8: {} + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + tmpl@1.0.5: {} + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toad-cache@3.7.0: {} + + toidentifier@1.0.1: {} + + tr46@0.0.3: {} + + tree-kill@1.2.2: {} + + triple-beam@1.4.1: {} + + ts-api-utils@1.3.0(typescript@5.4.5): + dependencies: + typescript: 5.4.5 + + ts-jest@29.1.4(@babel/core@7.24.6)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.24.6))(esbuild@0.19.12)(jest@29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)))(typescript@5.4.5): + dependencies: + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@20.14.1)(ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.6.2 + typescript: 5.4.5 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.24.6 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.24.6) + esbuild: 0.19.12 + + ts-loader@9.5.1(typescript@5.4.5)(webpack@5.90.1(esbuild@0.19.12)): + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.17.0 + micromatch: 4.0.7 + semver: 7.6.2 + source-map: 0.7.4 + typescript: 5.4.5 + webpack: 5.90.1(esbuild@0.19.12) + + ts-node@10.9.2(@types/node@20.14.1)(typescript@5.4.5): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.14.1 + acorn: 8.11.3 + acorn-walk: 8.3.2 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.4.5 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + tsconfig-paths-webpack-plugin@4.1.0: + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.17.0 + tsconfig-paths: 4.2.0 + + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.6.2: {} + + tslib@2.6.3: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typedarray@0.0.6: {} + + typescript@5.3.3: {} + + typescript@5.4.5: {} + + ua-parser-js@1.0.38: {} + + uid@2.0.2: + dependencies: + '@lukeed/csprng': 1.1.0 + + undici-types@5.26.5: {} + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + update-browserslist-db@1.0.16(browserslist@4.23.0): + dependencies: + browserslist: 4.23.0 + escalade: 3.1.2 + picocolors: 1.0.1 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + util-deprecate@1.0.2: {} + + utils-merge@1.0.1: {} + + uuid@9.0.1: {} + + v8-compile-cache-lib@3.0.1: {} + + v8-to-istanbul@9.2.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + validator@13.12.0: {} + + vary@1.1.2: {} + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + watchpack@2.4.1: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + webidl-conversions@3.0.1: {} + + webpack-node-externals@3.0.0: {} + + webpack-sources@3.2.3: {} + + webpack@5.90.1(esbuild@0.19.12): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.11.3 + acorn-import-assertions: 1.9.0(acorn@8.11.3) + browserslist: 4.23.0 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.0 + es-module-lexer: 1.5.3 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(esbuild@0.19.12)(webpack@5.90.1(esbuild@0.19.12)) + watchpack: 2.4.1 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + winston-daily-rotate-file@5.0.0(winston@3.13.0): + dependencies: + file-stream-rotator: 0.6.1 + object-hash: 3.0.0 + triple-beam: 1.4.1 + winston: 3.13.0 + winston-transport: 4.7.0 + + winston-transport@4.7.0: + dependencies: + logform: 2.6.0 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + + winston@3.13.0: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.5 + is-stream: 2.0.1 + logform: 2.6.0 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.4.3 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.7.0 + + word-wrap@1.2.5: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} diff --git a/src/application/app.controller.spec.ts b/src/application/app.controller.spec.ts new file mode 100644 index 0000000..2552ec5 --- /dev/null +++ b/src/application/app.controller.spec.ts @@ -0,0 +1,22 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { AppController } from './app.controller'; +import { AppService } from './app.service'; + +describe('AppController', () => { + let appController: AppController; + + beforeEach(async () => { + const app: TestingModule = await Test.createTestingModule({ + controllers: [AppController], + providers: [AppService], + }).compile(); + + appController = app.get(AppController); + }); + + describe('root', () => { + it('should return "Hello World!"', () => { + expect(appController.getHello()).toBe('Hello World!'); + }); + }); +}); diff --git a/src/application/app.controller.ts b/src/application/app.controller.ts new file mode 100644 index 0000000..82d1dc9 --- /dev/null +++ b/src/application/app.controller.ts @@ -0,0 +1,30 @@ +import { Controller, Get, Req } from '@nestjs/common'; +import { AppService } from './app.service'; +import { ApiOperation, ApiProduces, ApiTags } from '@nestjs/swagger'; +import { FastifyRequest } from 'fastify'; +import { RedisService } from '@common/service/redis/redis.service'; + +@ApiTags('首页Tags') +@Controller() +export class AppController { + constructor( + private readonly appService: AppService, + private readonly redisService: RedisService, + ) {} + + @ApiOperation({ + summary: 'Get操作', + description: '从这里访问根路径', + tags: ['xsx'], + }) + @ApiTags('首页默认方法') + @ApiProduces('application/json') + @Get() + async getHello(@Req() req: FastifyRequest): Promise { + // console.log(req.raw['browserInfo']); + this.redisService.setNX('init', 'bigwang').then((value) => { + // console.log(value); + }); + return this.appService.getHello(); + } +} diff --git a/src/application/app.module.ts b/src/application/app.module.ts new file mode 100644 index 0000000..6422058 --- /dev/null +++ b/src/application/app.module.ts @@ -0,0 +1,62 @@ +import { MiddlewareConsumer, Module, NestModule, RequestMethod } from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import configuration from '@config/configuration'; +import { LogRequestInfoMiddleware } from '@common/middleware/log-request-info/log-request-info.middleware'; +import { TestModule } from '@app/test/test.module'; +import { UserOperationLogInterceptor } from '@common/interceptor/user-operation-log/user-operation-log.interceptor'; +import { APP_INTERCEPTOR } from '@nestjs/core'; +import { AppController } from '@app/app.controller'; +import { AppService } from '@app/app.service'; +import { UserAgentMiddleware } from '@common/middleware/useragent/useragent.middleware'; +import { CoreServiceModule } from './core-service/core-service.module'; +import { HttpExceptFilter } from '@common/http-except/http-except.filter'; +import { CoreDictModule } from './core-dict/core-dict.module'; +import { GlobalModule } from '@app/global.module'; +import { CoreEnvModule } from './core-env/core-env.module'; + +@Module({ + imports: [ + ConfigModule.forRoot({ + isGlobal: true, + load: [configuration], + }), + TestModule, + CoreServiceModule, + CoreDictModule, + GlobalModule, + CoreEnvModule, + ], + controllers: [AppController], + providers: [ + HttpExceptFilter, + + /** + * 用户操作信息拦截器,操作日志 + * */ + UserOperationLogInterceptor, + { + provide: APP_INTERCEPTOR, + useExisting: UserOperationLogInterceptor, + }, + AppService, + ], +}) +export class AppModule implements NestModule { + configure(consumer: MiddlewareConsumer) { + // 请求信息中间件 + consumer + .apply(LogRequestInfoMiddleware) + + // .exclude( + // { path: 'cats', method: RequestMethod.GET }, + // { path: 'cats', method: RequestMethod.POST }, + // 'cats/(.*)', + // ) + .forRoutes({ path: '*', method: RequestMethod.ALL }); + + /** + * 浏览器信息中间件 + * */ + consumer.apply(UserAgentMiddleware).forRoutes({ path: '*', method: RequestMethod.ALL }); + } +} diff --git a/src/application/app.service.ts b/src/application/app.service.ts new file mode 100644 index 0000000..418cc58 --- /dev/null +++ b/src/application/app.service.ts @@ -0,0 +1,15 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class AppService { + async getHello(): Promise { + return 'Hello'; + return await new Promise((res) => { + setTimeout(() => { + res('Hello!'); + }, 30); + }); + + // return 'Hello World!'; + } +} diff --git a/src/application/core-dict/core-dict.controller.ts b/src/application/core-dict/core-dict.controller.ts new file mode 100644 index 0000000..001560b --- /dev/null +++ b/src/application/core-dict/core-dict.controller.ts @@ -0,0 +1,74 @@ +import { Controller, Get, Post, Body, Patch, Param, Delete, Query } from '@nestjs/common'; +import { CoreDictService } from './core-dict.service'; +import { CreateCoreDictDto } from './dto/create-core-dict.dto'; +import { UpdateCoreDictDto } from './dto/update-core-dict.dto'; +import { ApiOperation, ApiProduces, ApiTags } from '@nestjs/swagger'; +import { PacInfo } from '@common/decorator/pac-info/pac-info.decorator'; +import { PacInfoType } from '@utils/myType'; +import { GetPacCoreDictAllDto, PacCoreDictIdDto, PacCoreDictKeyDto, PacCoreDictTargetListDto } from '@app/core-dict/dto/get-core-dict.dto'; + +@ApiTags('字典服务') +@Controller('coredict') +export class CoreDictController { + constructor(private readonly coreDictService: CoreDictService) {} + + @ApiOperation({ + summary: '添加字典', + description: '增加一个字典内容,可以是具体的项,也可以是一个层级', + }) + @ApiProduces('application/json') + @Post() + create(@Body() createCoreDictDto: CreateCoreDictDto, @PacInfo() pacInfo: PacInfoType) { + return this.coreDictService.create(createCoreDictDto, pacInfo); + } + + @ApiOperation({ + summary: '查字典', + description: '查询字典分页或者列表', + }) + @ApiProduces('application/json') + @Get() + findAll(@Query() getCoreDictAllDto: GetPacCoreDictAllDto, @PacInfo() pacInfo: PacInfoType) { + return this.coreDictService.findAll(getCoreDictAllDto); + } + + @ApiOperation({ + summary: '查字典详情', + description: '查询字典详细信息', + }) + @ApiProduces('application/json') + @Get('/details/:dictId') + findOne(@Param() pacCoreDictIdDto: PacCoreDictIdDto) { + return this.coreDictService.findOne(pacCoreDictIdDto); + } + + @ApiOperation({ + summary: '查字典下的项/树', + description: '查询字典下的项,或者树', + }) + @ApiProduces('application/json') + @Get('/list/:dictKey') + findTargetList(@Param() pacCoreDictKeyDto: PacCoreDictKeyDto, @Query() pacCoreDictTreeDto: PacCoreDictTargetListDto) { + return this.coreDictService.findTargetList(pacCoreDictKeyDto, pacCoreDictTreeDto); + } + + @ApiOperation({ + summary: '修改字典内容', + description: '。', + }) + @ApiProduces('application/json') + @Patch(':dictId') + update(@Param() pacCoreDictIdDto: PacCoreDictIdDto, @Body() updateCoreDictDto: UpdateCoreDictDto, @PacInfo() pacInfo: PacInfoType) { + return this.coreDictService.update(pacCoreDictIdDto, updateCoreDictDto, pacInfo); + } + + @ApiOperation({ + summary: '删除指定字典项', + description: '删除指定字典项,子项存在不允许删除', + }) + @ApiProduces('application/json') + @Delete(':dictId') + remove(@Param() pacCoreDictIdDto: PacCoreDictIdDto, @PacInfo() pacInfo: PacInfoType) { + return this.coreDictService.remove(pacCoreDictIdDto, pacInfo); + } +} diff --git a/src/application/core-dict/core-dict.module.ts b/src/application/core-dict/core-dict.module.ts new file mode 100644 index 0000000..59b8449 --- /dev/null +++ b/src/application/core-dict/core-dict.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { CoreDictService } from './core-dict.service'; +import { CoreDictController } from './core-dict.controller'; + +@Module({ + controllers: [CoreDictController], + providers: [CoreDictService], +}) +export class CoreDictModule {} diff --git a/src/application/core-dict/core-dict.service.ts b/src/application/core-dict/core-dict.service.ts new file mode 100644 index 0000000..82757e0 --- /dev/null +++ b/src/application/core-dict/core-dict.service.ts @@ -0,0 +1,414 @@ +import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; +import { CreateCoreDictDto } from './dto/create-core-dict.dto'; +import { UpdateCoreDictDto } from './dto/update-core-dict.dto'; +import { LoggerService } from '@service/logger/logger.service'; +import { MysqlService } from '@common/service/mysql/mysql.service'; +import { RedisService } from '@common/service/redis/redis.service'; +import { pacAuthUser, pacCoreDict, pacCoreService } from '@entities/schema'; +import { and, asc, desc, eq, isNull, like, or, SQL, sql } from 'drizzle-orm'; +import { Snowflake } from '@service/snowflake/snowflake.service'; +import { GetPacCoreDictAllDto, PacCoreDictIdDto, PacCoreDictKeyDto, PacCoreDictTargetListDto } from '@app/core-dict/dto/get-core-dict.dto'; +import { ConfigService } from '@nestjs/config'; +import { likeQuery } from '@utils/likeQuery'; +import { QueryBuilder } from 'drizzle-orm/mysql-core'; +import { PacInfoType } from '@utils/myType'; +import { isTrueEnum, isExistKey } from '@utils/boolean.enum'; +import { customDrizzleRowWithRecursive } from '@utils/customDrizzleRowWithRecursive'; + +@Injectable() +export class CoreDictService { + // # 详细的字典信息 + private readonly dictMoreDataType = { + dictId: pacCoreDict.dictId, + pid: pacCoreDict.pid, + dictKey: pacCoreDict.dictKey, + dictDesc: pacCoreDict.dictDesc, + dictName: pacCoreDict.dictName, + dictIcon: pacCoreDict.dictIcon, + dictType: pacCoreDict.dictType, + ownOfPac: pacCoreDict.ownOfPac, + orderNum: pacCoreDict.orderNum, + status: pacCoreDict.status, + serviceOf: pacCoreDict.serviceOf, + serviceName: pacCoreService.serviceName, + haveChildren: pacCoreDict.haveChildren, + createby: pacCoreDict.createby, + createName: pacAuthUser.nickname, + createtime: pacCoreDict.createtime, + updateby: pacCoreDict.updateby, + updatetime: pacCoreDict.updatetime, + }; + + // # 字典列表信息 + private readonly dictListDataType = { + dictId: pacCoreDict.dictId, + pid: pacCoreDict.pid, + dictKey: pacCoreDict.dictKey, + dictName: pacCoreDict.dictName, + dictIcon: pacCoreDict.dictIcon, + dictType: pacCoreDict.dictType, + haveChildren: pacCoreDict.haveChildren, + }; + + constructor( + private readonly logger: LoggerService, + private readonly mysqlService: MysqlService, + private readonly redisService: RedisService, + private readonly snowflake: Snowflake, + private readonly config: ConfigService, + ) {} + + /** Service + * NAME: create + * DESC: 创建字典内容 + * DATE: 2024-05-31 19:12:47 - + * */ + public async create(createCoreDictDto: CreateCoreDictDto, userInfo) { + // ! 加目标锁 + const lock = await this.redisService.distributedLock('DICT' + createCoreDictDto.dictKey, createCoreDictDto.dictKey); + + // ? 存在正在进行写入的字典 + if (!lock) throw new HttpException('服务繁忙,字典标识重复!', HttpStatus.CONFLICT); + + // @ 核心内容 + try { + // ! 查重 + const result = await this.getDictDataForDictKey(createCoreDictDto.dictKey); + + // ? 是否存在重复的字典 + if (result.length > 0) throw new HttpException('字典标识重复!', HttpStatus.CONFLICT); + + // ! 添加字典数据 + const newPacCoreDict = await this.addDictData(createCoreDictDto, userInfo.userId); + + // ! 解锁 + lock(); + + // !更新父节点的子节点数量 + await this.haveChildrenSelfIncreasing(createCoreDictDto.pid); + + // ! 返回结果 + return newPacCoreDict; + } catch (e) { + // ! 解锁 + lock(); + + // ! 抛出错误 + throw e; + } + } + + /** Service + * NAME: findAll + * DESC: 查找字典分页/列表 + * DATE: 2024-05-31 21:33:40 - + * */ + public async findAll(getCoreDictAllDto: GetPacCoreDictAllDto) { + // ? 是否查询列表 + if (isExistKey(getCoreDictAllDto, 'isList') && isTrueEnum(getCoreDictAllDto['isList'])) { + // ! 返回列表数据 + return await this.getDictList(getCoreDictAllDto); + } else { + // ! 返回分页数据 + return await this.getDictPage(getCoreDictAllDto); + } + } + + /** Service + * NAME: findOne + * DESC: 查找字典项详细信息 + * DATE: 2024-06-04 19:21:40 - + * */ + public async findOne(pacCoreDictIdDto: PacCoreDictIdDto) { + return (await this.getMore(pacCoreDictIdDto.dictId))[0]; + } + + /** Service + * NAME: findTargetList + * DESC: 查找字典下的列表或树 + * DATE: 2024-06-04 19:21:40 - + * */ + public async findTargetList(pacCoreDictKeyDto: PacCoreDictKeyDto, pacCoreDictTargetListDto: PacCoreDictTargetListDto) { + const [result] = await this.getTargetDictList(pacCoreDictKeyDto, pacCoreDictTargetListDto); + return result; + } + + /** Service + * NAME: update + * DESC: 更新字典 + * DATE: 2024-06-04 23:24:18 - + * */ + public async update(pacCoreDictIdDto: PacCoreDictIdDto, updateCoreDictDto: UpdateCoreDictDto, pacInfo: PacInfoType) { + // ! 上锁 + const lock = await this.redisService.distributedLock('DICT' + updateCoreDictDto.dictKey, updateCoreDictDto.dictKey); + + // ? 存在正在运行的字典 + if (!lock) throw new HttpException('服务繁忙,字典标识重复!', HttpStatus.CONFLICT); + + // @ 核心业务 + try { + // ! 通过dictKey获取字典信息 重复 + const checkRepeat = await this.getDictDataForDictKey(updateCoreDictDto.dictKey); + + // ? 判断是否存在重名的字典,但是不包括自己 + if (checkRepeat.length > 0 && checkRepeat[0].dictId != pacCoreDictIdDto.dictId) { + throw new HttpException('服务繁忙,字典标识重复!', HttpStatus.CONFLICT); + } + + // ! 更新数据 + const result = await this.updateDictData(pacCoreDictIdDto, updateCoreDictDto, pacInfo); + + // ! 解锁 + lock(); + + // ! 返回 + return result; + } catch (e) { + // ! 解锁 + lock(); + + // ! 抛出错误 + throw e; + } + } + + /** Service + * NAME: remove + * DESC: 删除字典 + * DATE: 2024-06-04 22:01:11 - + * */ + public async remove(pacCoreDictIdDto: PacCoreDictIdDto, pacInfo: PacInfoType) { + // ! 查看目标字典项 + const result = await this.getMore(pacCoreDictIdDto.dictId); + + // ? 判断是否存在 + if (result.length > 0) { + // ! 存在目标字典项 + + // ? 判断是否存在子项 + if (result[0].haveChildren == 0) { + // ! 删除字典 + await this.deleteDictItem(pacCoreDictIdDto, pacInfo); + } else { + throw new HttpException('该字典存在子项!', HttpStatus.BAD_REQUEST); + } + + // ! 判断父节点是否存在 + if (result[0].pid != 0) { + // ! 减少父级子节点数量 + await this.haveChildrenSelfIncreasing(result[0].pid, false); + } + return '删除字典成功'; + } else { + // ! 不存在目标字典项,直接返回 + return '删除字典成功'; + } + } + + // DB 根据serviceKey查找服务数据 可用于查重 + private async getDictDataForDictKey(dictKey: string) { + return await this.mysqlService.db.select().from(pacCoreDict).where(eq(pacCoreDict.dictKey, dictKey)); + } + + // DB 写入Dict数据 + private async addDictData(createCoreDictDto: CreateCoreDictDto, userId) { + // ! 生成雪花id,用于字典主键 + const id = await this.snowflake.generate(); + + // ? 判断身份是否是pac,如果是pac才能写入是pac的数据 + const isPac = this.config.get('masterId') == userId && isTrueEnum(createCoreDictDto.ownOfPac); + + // ! 定义写入的字典数据 + const newDictData: typeof pacCoreDict.$inferInsert = { + pid: createCoreDictDto.pid, + dictId: id as any, + dictKey: createCoreDictDto.dictKey, + dictDesc: createCoreDictDto.dictDesc, + dictName: createCoreDictDto.dictName, + dictIcon: createCoreDictDto.dictIcon, + dictType: createCoreDictDto.dictType, + ownOfPac: isPac ? 0 : 1, + orderNum: createCoreDictDto.orderNum, + serviceOf: createCoreDictDto.serviceOf, + createby: userId, + createtime: sql`now()` as any, + }; + return await this.mysqlService.db.insert(pacCoreDict).values(newDictData); + } + + // DB 更新父级子元素数量 + private async haveChildrenSelfIncreasing(dictId: string, isAdd = true) { + return this.mysqlService.db + .update(pacCoreDict) + .set({ + haveChildren: isAdd ? sql`${pacCoreDict.haveChildren} + 1` : sql`${pacCoreDict.haveChildren} - 1`, + }) + .where(eq(pacCoreDict.dictId as any, dictId)); + } + + // DB 查字典项的查询函数QueryBuilder,作用于列表和分页查询 + private getDict(data, selectData = undefined) { + this.logger.info(JSON.stringify(data, null, 2)); + + // ! 定义基础查询函数 + // 启用动态查询模式 $dynamic + let query = this.mysqlService.db + .select(selectData) + .from(pacCoreDict) + .where(isNull(pacCoreDict.deleteby)) + .orderBy( + isTrueEnum(data.isAsc) ? asc(pacCoreDict.orderNum) : desc(pacCoreDict.orderNum), + isTrueEnum(data.isAsc) ? asc(pacCoreDict.dictId) : desc(pacCoreDict.dictId), + ) + .$dynamic(); + + // ? 模糊查询 + if (isExistKey(data, 'dictInfo')) { + query = query.where( + or( + like(pacCoreDict.dictKey, likeQuery(data.dictInfo)), + like(pacCoreDict.dictName, likeQuery(data.dictInfo)), + like(pacCoreDict.dictDesc, likeQuery(data.dictInfo)), + ), + ); + } + + // ? 是否查pac的数据 + if (isExistKey(data, 'ownOfPac') && isTrueEnum(data['ownOfPac'])) { + query = query.where(eq(pacCoreDict.ownOfPac, isTrueEnum(data['ownOfPac']) ? 0 : 1)); + } + + // ? 按照层级查 + if (isExistKey(data, 'hierarchy')) { + query = query.where(eq(pacCoreDict.pid, data.hierarchy)); + } + + // ? 是否存在目标service + if (isExistKey(data, 'serviceOf')) { + query = query.where(eq(pacCoreDict.serviceOf, data.serviceOf)); + } + + // ? 是否查字典类型 + if (isExistKey(data, 'dictType')) { + query = query.where(eq(pacCoreDict.dictType, data.dictType)); + } + + // ? 是否查字典状态 + if (isExistKey(data, 'status')) { + query = query.where(eq(pacCoreDict.status, data.status)); + } + return query; + } + + // DB 查Dict列表 + private getDictList(getCoreDictAllDto: GetPacCoreDictAllDto) { + return this.getDict(getCoreDictAllDto, this.dictListDataType); + } + + // DB 查Dict分页 + private async getDictPage(getCoreDictAllDto: GetPacCoreDictAllDto) { + const offset = (getCoreDictAllDto.pageNumber - 1) * getCoreDictAllDto.pageSize; + + // 使用基础查询构建查询总记录数 + const totalCountQuery = this.getDict(getCoreDictAllDto, { + totalCount: sql`COUNT(*)`, + }); + + // 使用基础查询构建分页查询 + const paginatedQuery = this.getDict(getCoreDictAllDto, this.dictMoreDataType) + .leftJoin(pacAuthUser, eq(pacCoreDict.createby, pacAuthUser.userId)) + .leftJoin(pacCoreService, eq(pacCoreService.serviceKey, pacCoreDict.serviceOf)) + .limit(getCoreDictAllDto.pageSize) + .offset(offset); + + return { + total: (await totalCountQuery)[0].totalCount, + rowData: await paginatedQuery, + searchData: getCoreDictAllDto, + }; + } + + // DB 通过ID查找Dict详细信息 + private async getMore(dictId: string) { + return this.mysqlService.db + .select(this.dictMoreDataType) + .from(pacCoreDict) + .leftJoin(pacAuthUser, eq(pacCoreDict.createby, pacAuthUser.userId)) + .leftJoin(pacCoreService, eq(pacCoreService.serviceKey, pacCoreDict.serviceOf)) + .where(and(eq(pacCoreDict.dictId, dictId), isNull(pacCoreDict.deleteby))); + } + + // DB 通过Key查找目标字典的信息?树结构 + private getTargetDictList(pacCoreDictKeyDto: PacCoreDictKeyDto, pacCoreDictTargetListDto: PacCoreDictTargetListDto) { + if (isExistKey(pacCoreDictTargetListDto, 'isTree') && isTrueEnum(pacCoreDictTargetListDto['isTree'])) { + // ! 基础层级 + const baseQueryBuilder = new QueryBuilder(); + const baseQuery = baseQueryBuilder + .select({ + ...this.dictListDataType, + level: sql`0`.as('level'), + }) + .from(pacCoreDict) + .where(and(isNull(pacCoreDict.deleteby), eq(pacCoreDict.dictKey, pacCoreDictKeyDto.dictKey))); + + // ! 递归层级 + const recursiveQueryBuilder = new QueryBuilder(); + const recursiveQuery = recursiveQueryBuilder + .select({ + ...this.dictListDataType, + level: sql`dictHierarchy.level + 1`.as('level'), + }) + .from(pacCoreDict) + .where(isNull(pacCoreDict.deleteby)) + .innerJoin(sql`dictHierarchy`, sql`dictHierarchy.dictId = ${pacCoreDict.pid}`); + + const rowName: SQL = customDrizzleRowWithRecursive(this.dictListDataType); + + // ! 执行原始SQL查询 + return this.mysqlService.db.execute( + sql`WITH RECURSIVE dictHierarchy(${rowName}) AS(${baseQuery} UNION ALL ${recursiveQuery}) SELECT * FROM dictHierarchy`, + ); + } else { + // ! 查询自己 + return this.mysqlService.db + .select(this.dictMoreDataType) + .from(pacCoreDict) + .leftJoin(pacAuthUser, eq(pacCoreDict.createby, pacAuthUser.userId)) + .leftJoin(pacCoreService, eq(pacCoreService.serviceKey, pacCoreDict.serviceOf)) + .where(and(eq(pacCoreDict.dictKey, pacCoreDictKeyDto.dictKey), isNull(pacCoreDict.deleteby))); + } + } + + // DB 通过ID删除字典项 + private deleteDictItem(pacCoreDictIdDto: PacCoreDictIdDto, pacInfo: PacInfoType) { + return this.mysqlService.db + .update(pacCoreDict) + .set({ + deletetime: sql`now()`, + deleteby: pacInfo.userId, + }) + .where(eq(pacCoreDict.dictId, pacCoreDictIdDto.dictId)); + } + + // DB 更新字典 + private updateDictData(pacCoreDictIdDto: PacCoreDictIdDto, updateCoreDictDto: UpdateCoreDictDto, pacInfo: PacInfoType) { + // ? 判断身份是否是pac,如果是pac才能写入是pac的数据 + const isPac = this.config.get('masterId') == pacInfo.userId && isTrueEnum(updateCoreDictDto.ownOfPac); + return this.mysqlService.db + .update(pacCoreDict) + .set({ + dictKey: updateCoreDictDto.dictKey, + dictDesc: updateCoreDictDto.dictDesc, + dictName: updateCoreDictDto.dictName, + dictIcon: updateCoreDictDto.dictIcon, + dictType: updateCoreDictDto.dictType, + orderNum: updateCoreDictDto.orderNum, + status: updateCoreDictDto.status, + ownOfPac: isPac ? 0 : 1, + serviceOf: updateCoreDictDto.serviceOf, + updateby: pacInfo.userId, + updatetime: sql`now()`, + }) + .where(eq(pacCoreDict.dictId, pacCoreDictIdDto.dictId)); + } +} diff --git a/src/application/core-dict/dto/create-core-dict.dto.ts b/src/application/core-dict/dto/create-core-dict.dto.ts new file mode 100644 index 0000000..245c526 --- /dev/null +++ b/src/application/core-dict/dto/create-core-dict.dto.ts @@ -0,0 +1,146 @@ +import { ApiProperty } from '@nestjs/swagger'; +import { + IsBoolean, + IsEnum, + IsInt, + IsOptional, + IsString, + Length, + Max, + Min +} from "class-validator"; +import Trim from '@common/decorator/trim/trim.decorator'; +import { + BooleanEnum +} from "@utils/boolean.enum"; + +export class CreateCoreDictDto { + @ApiProperty({ + description: '字典父ID', + type: String, + example: '0', + required: true, + minLength: 1, + maxLength: 32, + }) + @Trim() + @IsString({ message: '字典关联属性应为字符串格式!' }) + @IsOptional() + readonly pid?: string = '0'; + + @ApiProperty({ + description: '字典标志', + type: String, + example: 'Country', + required: true, + minLength: 1, + maxLength: 32, + }) + @Trim() + @IsString({ message: '字典标志应为字符串格式!' }) + @Length(1, 32, { message: '请将字典标志长度控制在1到32位之间!' }) + readonly dictKey: string; + + @ApiProperty({ + description: '字典描述信息', + type: String, + example: '这是一个关于国家的字典', + required: false, + minLength: 1, + maxLength: 255, + }) + @Trim() + @IsString({ message: '字典描述信息应为字符串格式!' }) + @Length(1, 255, { message: '请将字典描述信息长度控制在1到255位之间!' }) + @IsOptional() + readonly dictDesc: string; + + @ApiProperty({ + description: '字典名称', + type: String, + example: '国家集合', + required: true, + minLength: 1, + maxLength: 32, + }) + @Trim() + @IsString({ message: '字典名称应为字符串格式!' }) + @Length(1, 32, { message: '请将字典名称长度控制在1到32位之间!' }) + readonly dictName: string; + + @ApiProperty({ + description: '字典图标', + type: String, + example: 'happy', + required: false, + minLength: 1, + maxLength: 255, + }) + @Trim() + @IsString({ message: '字典图标应为字符串格式!' }) + @Length(1, 255, { message: '请将字典图标长度控制在1到255位之间!' }) + @IsOptional() + readonly dictIcon: string; + + @ApiProperty({ + description: '字典类型', + type: Number, + example: 0, + required: false, + minimum: 0, + }) + @Min(0, { + message: '字典类型异常,需要大于等于0!', + }) + @IsInt({ + message: '字典类型异常,是一个整数!', + }) + @IsOptional() + readonly dictType?: number = 0; + + @ApiProperty({ + description: '是否属于PAC', + type: BooleanEnum, + enum: BooleanEnum, + example: false, + required: false, + }) + @Trim() + @IsEnum(BooleanEnum, { message: 'ownOfPac参数格式错误' }) + @IsOptional() + readonly ownOfPac?: BooleanEnum = BooleanEnum.FALSE; + + @ApiProperty({ + description: '排序', + type: Number, + example: 10, + required: false, + minimum: -1000, + maximum: 1000, + }) + @IsOptional() + @IsInt({ + message: '排序必须是整数!', + }) + @Min(-1000, { + message: '排序不能小于-1000!', + }) + @Max(1000, { + message: '排序不能超过1000', + }) + readonly orderNum?: number = 0; + + @ApiProperty({ + description: '服务的唯一标识', + type: String, + example: 'CORE-PAC-AUTH', + required: false, + minLength: 2, + maxLength: 16, + }) + @Trim() + @IsString({ message: '服务标识应为字符串格式!' }) + @Length(2, 16, { message: '请将服务标识长度控制在2到16位之间!' }) + @IsOptional() + readonly serviceOf: string; +} diff --git a/src/application/core-dict/dto/get-core-dict.dto.ts b/src/application/core-dict/dto/get-core-dict.dto.ts new file mode 100644 index 0000000..602f157 --- /dev/null +++ b/src/application/core-dict/dto/get-core-dict.dto.ts @@ -0,0 +1,151 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: get-core-dict.dto.ts - +// | @创建时间: 2024-05-31 18:53 +// | @更新时间: 2024-05-31 18:53 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +import { GetDto } from '@dto/get.dto'; +import { ApiProperty } from '@nestjs/swagger'; +import Trim from '@common/decorator/trim/trim.decorator'; +import { IsEnum, IsInt, IsOptional, IsString, Length, Max, Min } from 'class-validator'; +import { BooleanEnum } from '@utils/boolean.enum'; + +export class GetPacCoreDictAllDto extends GetDto { + @ApiProperty({ + description: '字典信息', + type: String, + example: '国家', + required: false, + minLength: 1, + maxLength: 128, + }) + @Trim() + @IsString({ message: '字典信息应为字符串格式!' }) + @Length(0, 128, { message: '请将字典信息长度控制在1到128位之间!' }) + @IsOptional() + readonly dictInfo?: string; + + @ApiProperty({ + description: '字典类型', + type: String, + example: 0, + required: false, + }) + @Trim() + @IsString({ message: '字典类型应为字符串格式!' }) + @IsOptional() + readonly dictType?: string; + + @ApiProperty({ + description: '是否属于PAC', + type: BooleanEnum, + enum: BooleanEnum, + example: 0, + required: false, + }) + @Trim() + @IsEnum(BooleanEnum, { message: 'ownOfPac参数格式错误' }) + @IsOptional() + readonly ownOfPac: BooleanEnum; + + @ApiProperty({ + description: '服务的唯一标识', + type: String, + example: 'CORE-PAC-AUTH', + required: false, + minLength: 2, + maxLength: 16, + }) + @Trim() + @IsString({ message: '服务标识应为字符串格式!' }) + @Length(2, 16, { message: '请将服务标识长度控制在2到16位之间!' }) + @IsOptional() + readonly serviceOf: string; + + @ApiProperty({ + description: '字典状态', + type: Number, + example: 0, + required: false, + minimum: -100, + maximum: 100, + }) + @Trim() + @IsInt({ + message: '字典状态必须是整数!', + }) + @Min(-100, { + message: '字典状态需要大于-100!', + }) + @Max(100, { + message: '字典状态不能超过100', + }) + @IsOptional() + readonly status?: number; + + @ApiProperty({ + description: '字典层级id', + type: Number, + example: 0, + required: false, + minimum: 0, + maximum: 100, + }) + @Trim() + @IsString({ message: '字典层级id应为字符串格式!' }) + @Length(1, 20, { message: '字典层级id格式错误!' }) + @IsOptional() + readonly hierarchy?: string; +} + +export class PacCoreDictIdDto { + @ApiProperty({ + description: '字典ID', + type: String, + example: '1123817263136', + required: true, + minLength: 19, + maxLength: 19, + }) + @IsString() + @Length(19, 19, { message: '字典ID格式错误!' }) + readonly dictId: string; +} + +export class PacCoreDictKeyDto { + @ApiProperty({ + description: '字典标志', + type: String, + example: 'Country', + required: true, + minLength: 1, + maxLength: 32, + }) + @Trim() + @IsString({ message: '字典标志应为字符串格式!' }) + @Length(1, 32, { message: '请将字典标志长度控制在1到32位之间!' }) + readonly dictKey: string; +} + +export class PacCoreDictTargetListDto { + @ApiProperty({ + description: '是否查找树结构', + type: BooleanEnum, + enum: BooleanEnum, + example: 0, + required: false, + }) + @Trim() + @IsEnum(BooleanEnum, { + message: '查找树结构数据错误', + }) + @IsOptional() + readonly isTree: BooleanEnum; +} diff --git a/src/application/core-dict/dto/update-core-dict.dto.ts b/src/application/core-dict/dto/update-core-dict.dto.ts new file mode 100644 index 0000000..6fee79b --- /dev/null +++ b/src/application/core-dict/dto/update-core-dict.dto.ts @@ -0,0 +1,25 @@ +import { ApiProperty, PartialType } from '@nestjs/swagger'; +import { CreateCoreDictDto } from './create-core-dict.dto'; +import { IsInt, IsOptional, Max, Min } from 'class-validator'; + +export class UpdateCoreDictDto extends PartialType(CreateCoreDictDto) { + @ApiProperty({ + description: '状态', + type: Number, + example: 10, + required: false, + minimum: -100, + maximum: 100, + }) + @IsOptional() + @IsInt({ + message: '状态必须是整数!', + }) + @Min(-1000, { + message: '状态不能小于-100!', + }) + @Max(1000, { + message: '状态不能超过100', + }) + readonly status: number; +} diff --git a/src/application/core-dict/entities/core-dict.entity.ts b/src/application/core-dict/entities/core-dict.entity.ts new file mode 100644 index 0000000..058b11a --- /dev/null +++ b/src/application/core-dict/entities/core-dict.entity.ts @@ -0,0 +1 @@ +export class CoreDict {} diff --git a/src/application/core-env/core-env.controller.ts b/src/application/core-env/core-env.controller.ts new file mode 100644 index 0000000..889db2b --- /dev/null +++ b/src/application/core-env/core-env.controller.ts @@ -0,0 +1,74 @@ +import { Controller, Get, Post, Body, Patch, Param, Delete, Query } from '@nestjs/common'; +import { CoreEnvService } from './core-env.service'; +import { CreateCoreEnvDto } from './dto/create-core-env.dto'; +import { UpdateCoreEnvDto } from './dto/update-core-env.dto'; +import { ApiOperation, ApiProduces, ApiTags } from '@nestjs/swagger'; +import { PacInfo } from '@common/decorator/pac-info/pac-info.decorator'; +import { PacInfoType } from '@utils/myType'; +import { CoreEnvIdDTO, CoreEnvKeyDTO, CoreEnvTargetListDTO, GetCoreEnvDTO } from '@app/core-env/dto/get-core-env.dto'; + +@ApiTags('环境变量服务') +@Controller('coreenv') +export class CoreEnvController { + constructor(private readonly coreEnvService: CoreEnvService) {} + + @ApiOperation({ + summary: '添加环境变量', + description: '增加一个环境变量内容,可以是具体的项,也可以是一个层级', + }) + @ApiProduces('application/json') + @Post() + create(@Body() createCoreEnvDto: CreateCoreEnvDto, @PacInfo() pacInfo: PacInfoType) { + return this.coreEnvService.create(createCoreEnvDto, pacInfo); + } + + @ApiOperation({ + summary: '查环境变量', + description: '查询环境变量分页或者列表', + }) + @ApiProduces('application/json') + @Get() + findAll(@Query() getCoreEnvDTO: GetCoreEnvDTO, @PacInfo() pacInfo: PacInfoType) { + return this.coreEnvService.findAll(getCoreEnvDTO); + } + + @ApiOperation({ + summary: '查环境变量详情', + description: '查询环境变量详细信息', + }) + @ApiProduces('application/json') + @Get('/details/:envId') + findOne(@Param() coreEnvIdDTO: CoreEnvIdDTO) { + return this.coreEnvService.findOne(coreEnvIdDTO); + } + + @ApiOperation({ + summary: '查环境变量下的项/树', + description: '查询环境变量下的项,或者树', + }) + @ApiProduces('application/json') + @Get('/list/:envKey') + findTargetList(@Param() coreEnvKeyDTO: CoreEnvKeyDTO, @Query() coreEnvTargetListDTO: CoreEnvTargetListDTO) { + return this.coreEnvService.findTargetList(coreEnvKeyDTO, coreEnvTargetListDTO); + } + + @ApiOperation({ + summary: '修改环境变量内容', + description: '。', + }) + @ApiProduces('application/json') + @Patch(':envId') + update(@Param() coreEnvIdDTO: CoreEnvIdDTO, @Body() updateCoreEnvDto: UpdateCoreEnvDto, @PacInfo() pacInfo: PacInfoType) { + return this.coreEnvService.update(coreEnvIdDTO, updateCoreEnvDto, pacInfo); + } + + @ApiOperation({ + summary: '删除指定环境变量项', + description: '删除指定环境变量项,子项存在不允许删除', + }) + @ApiProduces('application/json') + @Delete(':envId') + remove(@Param() coreEnvIdDTO: CoreEnvIdDTO, @PacInfo() pacInfo: PacInfoType) { + return this.coreEnvService.remove(coreEnvIdDTO, pacInfo); + } +} diff --git a/src/application/core-env/core-env.module.ts b/src/application/core-env/core-env.module.ts new file mode 100644 index 0000000..4ecf526 --- /dev/null +++ b/src/application/core-env/core-env.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { CoreEnvService } from './core-env.service'; +import { CoreEnvController } from './core-env.controller'; + +@Module({ + controllers: [CoreEnvController], + providers: [CoreEnvService], +}) +export class CoreEnvModule {} diff --git a/src/application/core-env/core-env.service.ts b/src/application/core-env/core-env.service.ts new file mode 100644 index 0000000..81fca95 --- /dev/null +++ b/src/application/core-env/core-env.service.ts @@ -0,0 +1,438 @@ +import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; +import { CreateCoreEnvDto } from './dto/create-core-env.dto'; +import { UpdateCoreEnvDto } from './dto/update-core-env.dto'; +import { LoggerService } from '@service/logger/logger.service'; +import { MysqlService } from '@common/service/mysql/mysql.service'; +import { RedisService } from '@common/service/redis/redis.service'; +import { Snowflake } from '@service/snowflake/snowflake.service'; +import { ConfigService } from '@nestjs/config'; +import { pacAuthUser, pacCoreDict, pacCoreEnv, pacCoreService } from '@entities/schema'; +import { and, asc, desc, eq, isNull, like, or, sql } from 'drizzle-orm'; +import { isExistKey, isTrueEnum } from '@utils/boolean.enum'; +import { CoreEnvIdDTO, CoreEnvKeyDTO, CoreEnvTargetListDTO, GetCoreEnvDTO } from '@app/core-env/dto/get-core-env.dto'; +import { likeQuery } from '@utils/likeQuery'; +import { QueryBuilder } from 'drizzle-orm/mysql-core'; +import { customDrizzleRowWithRecursive } from '@utils/customDrizzleRowWithRecursive'; +import { PacInfoType } from '@utils/myType'; +import { PacCoreDictIdDto } from '@app/core-dict/dto/get-core-dict.dto'; +import { UpdateCoreDictDto } from '@app/core-dict/dto/update-core-dict.dto'; + +@Injectable() +export class CoreEnvService { + // # 详细的环境变量信息 + private readonly envListDataType = { + envId: pacCoreEnv.envId, + pid: pacCoreEnv.pid, + envName: pacCoreEnv.envName, + envKey: pacCoreEnv.envKey, + envVal: pacCoreEnv.envVal, + envDictVal: pacCoreDict.dictKey, + envDictName: pacCoreDict.dictName, + valIsDict: pacCoreEnv.valIsDict, + haveChildren: pacCoreEnv.haveChildren, + ownOfPac: pacCoreEnv.ownOfPac, + orderNum: pacCoreEnv.orderNum, + status: pacCoreEnv.status, + serviceOf: pacCoreEnv.serviceOf, + }; + + // # 环境变量列表信息 + private readonly envMoreDataType = { + envId: pacCoreEnv.envId, + pid: pacCoreEnv.pid, + envName: pacCoreEnv.envName, + envKey: pacCoreEnv.envKey, + envVal: pacCoreEnv.envVal, + envDictVal: pacCoreDict.dictKey, + envDictName: pacCoreDict.dictName, + valIsDict: pacCoreEnv.valIsDict, + envDesc: pacCoreEnv.envDesc, + haveChildren: pacCoreEnv.haveChildren, + ownOfPac: pacCoreEnv.ownOfPac, + orderNum: pacCoreEnv.orderNum, + status: pacCoreEnv.status, + serviceOf: pacCoreEnv.serviceOf, + serviceName: pacCoreService.serviceName, + createby: pacCoreEnv.createby, + createName: pacAuthUser.nickname, + createtime: pacCoreEnv.createtime, + updateby: pacCoreEnv.updateby, + updatetime: pacCoreEnv.updatetime, + }; + constructor( + private readonly logger: LoggerService, + private readonly mysqlService: MysqlService, + private readonly redisService: RedisService, + private readonly snowflake: Snowflake, + private readonly config: ConfigService, + ) {} + + /** Service + * NAME: create + * DESC: 创建环境变量内容 + * DATE: 2024-06-05 11:48:04 - + * */ + public async create(createCoreEnvDto: CreateCoreEnvDto, userInfo) { + // ! 加目标锁 + const lock = await this.redisService.distributedLock('ENV' + createCoreEnvDto.envKey, createCoreEnvDto.envKey); + + // ? 存在正在进行写入的环境变量 + if (!lock) throw new HttpException('服务繁忙,环境变量标识重复!', HttpStatus.CONFLICT); + + // @ 核心内容 + try { + // ! 查重 + const result = await this.getEnvForEnvKey(createCoreEnvDto.envKey); + + // ? 是否存在重复的环境变量 + if (result.length > 0) throw new HttpException('环境变量标识重复!', HttpStatus.CONFLICT); + + // ! 添加环境变量数据 + const newPacCoreEnv = await this.addEnvData(createCoreEnvDto, userInfo); + + // ! 解锁 + lock(); + + // !更新父节点的子节点数量 + await this.haveChildrenSelfIncreasing(createCoreEnvDto.pid); + + // ! 返回结果 + return newPacCoreEnv; + } catch (e) { + // ! 解锁 + lock(); + + // ! 抛出错误 + throw e; + } + } + + /** Service + * NAME: findAll + * DESC: 查找环境变量分页/列表 + * DATE: 2024-06-05 12:58:53 - + * */ + public async findAll(getCoreEnvDTO: GetCoreEnvDTO) { + // ? 是否查询列表 + if (isExistKey(getCoreEnvDTO, 'isList') && isTrueEnum(getCoreEnvDTO['isList'])) { + // ! 返回列表数据 + return await this.getEnvList(getCoreEnvDTO); + } else { + // ! 返回分页数据 + return await this.getEnvPage(getCoreEnvDTO); + } + } + + /** Service + * NAME: findOne + * DESC: 查找环境变量项详细信息 + * DATE: 2024-06-05 14:58:44 - + * */ + public async findOne(coreEnvIdDTO: CoreEnvIdDTO) { + return (await this.getMore(coreEnvIdDTO.envId))[0]; + } + + /** Service + * NAME: findTargetList + * DESC: 查找环境变量下的列表或树 + * DATE: 2024-06-05 15:15:33 - + * */ + public async findTargetList(coreEnvKeyDTO: CoreEnvKeyDTO, coreEnvTargetListDTO: CoreEnvTargetListDTO) { + const [result] = await this.getTargetDictList(coreEnvKeyDTO, coreEnvTargetListDTO); + return result; + } + + public async update(coreEnvIdDTO: CoreEnvIdDTO, updateCoreEnvDto: UpdateCoreEnvDto, pacInfo: PacInfoType) { + // ! 上锁 + const lock = await this.redisService.distributedLock('ENV' + updateCoreEnvDto.envKey, updateCoreEnvDto.envKey); + + // ? 存在正在运行的环境变量 + if (!lock) throw new HttpException('服务繁忙,环境变量标识重复!', HttpStatus.CONFLICT); + + // @ 核心业务 + try { + // ! 通过dictKey获取环境变量信息 重复 + const checkRepeat = await this.getEnvForEnvKey(updateCoreEnvDto.envKey); + + // ? 判断是否存在重名的环境变量,但是不包括自己 + if (checkRepeat.length > 0 && checkRepeat[0].envId != coreEnvIdDTO.envId) { + throw new HttpException('环境变量标识重复!', HttpStatus.CONFLICT); + } + + // ! 更新数据 + const result = await this.updateEnvData(coreEnvIdDTO, updateCoreEnvDto, pacInfo); + + // ! 解锁 + lock(); + + // ! 返回 + return result; + } catch (e) { + // ! 解锁 + lock(); + + // ! 抛出错误 + throw e; + } + } + + /** Service + * NAME: remove + * DESC: 删除环境变量 + * DATE: 2024-06-05 17:17:28 - + * */ + public async remove(coreEnvIdDTO: CoreEnvIdDTO, pacInfo: PacInfoType) { + // ! 查看目标环境变量 + const result = await this.getMore(coreEnvIdDTO.envId); + + // ? 判断是否存在 + if (result.length > 0) { + // ! 存在目标环境变量 + + // ? 判断是否存在子项 + if (result[0].haveChildren == 0) { + // ! 删除目标环境变量 + await this.deleteEnvItem(coreEnvIdDTO, pacInfo); + } else { + throw new HttpException('目标环境变量存在子项!', HttpStatus.BAD_REQUEST); + } + + // ! 判断父节点是否存在 + if (result[0].pid != 0) { + // ! 减少父级子节点数量 + await this.haveChildrenSelfIncreasing(result[0].pid, false); + } + return '删除目标环境变量成功'; + } else { + // ! 不存在目标环境变量,直接返回 + return '删除目标环境变量成功'; + } + } + + // DB 通过EnvKey获取env信息,主要用于查重 + private getEnvForEnvKey(envKey: string) { + return this.mysqlService.db.select().from(pacCoreEnv).where(eq(pacCoreEnv.envKey, envKey)); + } + + // DB 添加Env数据 + private async addEnvData(createCoreEnvDto: CreateCoreEnvDto, userInfo) { + // ! 生成雪花id,用于环境变量主键 + const id = await this.snowflake.generate(); + + // ? 判断身份是否是pac,如果是pac才能写入 + const isPac = this.config.get('masterId') == userInfo.userId && isTrueEnum(createCoreEnvDto.ownOfPac); + + // ! 定义即将写入的环境变量数据 + const newEnvData = { + envId: id, + pid: createCoreEnvDto.pid, + envName: createCoreEnvDto.envName, + envKey: createCoreEnvDto.envKey, + envVal: createCoreEnvDto.envVal, + valIsDict: isTrueEnum(createCoreEnvDto.valIsDict) ? 1 : 0, + envDesc: createCoreEnvDto.envDesc, + ownOfPac: isPac ? 0 : 1, + orderNum: createCoreEnvDto.orderNum, + serviceOf: createCoreEnvDto.serviceOf, + createby: userInfo.userId, + createtime: sql`now()`, + }; + + // ! 返回写入的数据 + return this.mysqlService.db.insert(pacCoreEnv).values(newEnvData); + } + + // DB 更新父级子元素数量 + private haveChildrenSelfIncreasing(envId: string, isAdd = true) { + return this.mysqlService.db + .update(pacCoreEnv) + .set({ + haveChildren: isAdd ? sql`${pacCoreEnv.haveChildren} + 1` : sql`${pacCoreEnv.haveChildren} - 1`, + }) + .where(eq(pacCoreEnv.envId as any, envId)); + } + + // DB 查Env项的查询函数QueryBuilder,作用于列表和分页查询 + private getEnv(data, selectData = undefined) { + this.logger.info(JSON.stringify(data, null, 2)); + + // ! 定义基础查询函数 + // 启用动态查询模式 $dynamic + let query = this.mysqlService.db + .select(selectData) + .from(pacCoreEnv) + .where(isNull(pacCoreEnv.deleteby)) + .leftJoin(pacCoreDict, and(eq(pacCoreDict.dictId, pacCoreEnv.envVal), eq(pacCoreEnv.valIsDict, 1))) + .orderBy( + isTrueEnum(data.isAsc) ? asc(pacCoreEnv.orderNum) : desc(pacCoreEnv.orderNum), + isTrueEnum(data.isAsc) ? asc(pacCoreEnv.envId) : desc(pacCoreEnv.envId), + ) + .where( + or( + like(pacCoreEnv.envKey, likeQuery(data.envInfo)), + like(pacCoreEnv.envName, likeQuery(data.envInfo)), + like(pacCoreEnv.envDesc, likeQuery(data.envInfo)), + like(pacCoreEnv.envVal, likeQuery(data.envInfo)), + like(pacCoreDict.dictKey, likeQuery(data.envInfo)), + like(pacCoreDict.dictName, likeQuery(data.envInfo)), + ).if(isExistKey(data, 'envInfo')), + ) + .$dynamic(); + + // ? 模糊查询 + // if (isExistKey(data, 'envInfo')) { + // query = query.where( + // or( + // like(pacCoreEnv.envKey, likeQuery(data.envInfo)), + // like(pacCoreEnv.envName, likeQuery(data.envInfo)), + // like(pacCoreEnv.envDesc, likeQuery(data.envInfo)), + // like(pacCoreEnv.envVal, likeQuery(data.envInfo)), + // like(pacCoreDict.dictKey, likeQuery(data.envInfo)), + // like(pacCoreDict.dictName, likeQuery(data.envInfo)), + // ), + // ); + // } + + // ? 来源于字典 + // if (isTrueEnum(data.valIsDict)) { + // } + + // ? 是否查pac的数据 + if (isExistKey(data, 'ownOfPac') && isTrueEnum(data['ownOfPac'])) { + query = query.where(eq(pacCoreEnv.ownOfPac, isTrueEnum(data['ownOfPac']) ? 0 : 1)); + } + + // ? 按照层级查 + if (isExistKey(data, 'hierarchy')) { + query = query.where(eq(pacCoreEnv.pid, data.hierarchy)); + } + + // ? 是否存在目标service + if (isExistKey(data, 'serviceOf')) { + query = query.where(eq(pacCoreEnv.serviceOf, data.serviceOf)); + } + + // ? 是否查环境变量状态 + if (isExistKey(data, 'status')) { + query = query.where(eq(pacCoreEnv.status, data.status)); + } + return query; + } + + // DB 查Env列表 + private getEnvList(getCoreEnvDTO: GetCoreEnvDTO) { + return this.getEnv(getCoreEnvDTO, this.envListDataType); + } + + // DB 查Env分页 + private async getEnvPage(getCoreEnvDTO: GetCoreEnvDTO) { + const offset = (getCoreEnvDTO.pageNumber - 1) * getCoreEnvDTO.pageSize; + + // 使用基础查询构建查询总记录数 + const totalCountQuery = this.getEnv(getCoreEnvDTO, { + totalCount: sql`COUNT(*)`, + }); + + // 使用基础查询构建分页查询 + const paginatedQuery = this.getEnv(getCoreEnvDTO, this.envMoreDataType) + .leftJoin(pacAuthUser, eq(pacCoreEnv.createby, pacAuthUser.userId)) + .leftJoin(pacCoreService, eq(pacCoreEnv.serviceOf, pacCoreService.serviceKey)) + .limit(getCoreEnvDTO.pageSize) + .offset(offset); + + return { + total: (await totalCountQuery)[0].totalCount, + rowData: await paginatedQuery, + searchData: getCoreEnvDTO, + }; + } + + // DB 通过ID查找Env详细信息 + private getMore(envId: string) { + return this.mysqlService.db + .select(this.envMoreDataType) + .from(pacCoreEnv) + .leftJoin(pacAuthUser, eq(pacCoreEnv.createby, pacAuthUser.userId)) + .leftJoin(pacCoreService, eq(pacCoreEnv.serviceOf, pacCoreService.serviceKey)) + .leftJoin(pacCoreDict, and(eq(pacCoreDict.dictId, pacCoreEnv.envVal), eq(pacCoreEnv.valIsDict, 1))) + .where(and(eq(pacCoreEnv.envId, envId), isNull(pacCoreEnv.deleteby))); + } + + // DB 通过Key查找目标Env的信息?树结构 + private getTargetDictList(coreEnvKeyDTO: CoreEnvKeyDTO, coreEnvTargetListDTO: CoreEnvTargetListDTO) { + if (isExistKey(coreEnvTargetListDTO, 'isTree') && isTrueEnum(coreEnvTargetListDTO['isTree'])) { + // ! 基础层级 + const baseQueryBuilder = new QueryBuilder(); + const baseQuery = baseQueryBuilder + .select({ + ...this.envListDataType, + level: sql`0`.as('level'), + }) + .from(pacCoreEnv) + .leftJoin(pacCoreDict, and(eq(pacCoreDict.dictId, pacCoreEnv.envVal), eq(pacCoreEnv.valIsDict, 1))) + .where(and(isNull(pacCoreEnv.deleteby), eq(pacCoreEnv.envKey, coreEnvKeyDTO.envKey))); + + // ! 递归层级 + const recursiveQueryBuilder = new QueryBuilder(); + const recursiveQuery = recursiveQueryBuilder + .select({ + ...this.envListDataType, + level: sql`envHierarchy.level + 1`.as('level'), + }) + .from(pacCoreEnv) + .leftJoin(pacCoreDict, and(eq(pacCoreDict.dictId, pacCoreEnv.envVal), eq(pacCoreEnv.valIsDict, 1))) + .where(isNull(pacCoreEnv.deleteby)) + .innerJoin(sql`envHierarchy`, sql`envHierarchy.envId = ${pacCoreEnv.pid}`); + + const rowName = customDrizzleRowWithRecursive(this.envListDataType); + + // ! 定义SQL + const SQL = sql`WITH RECURSIVE envHierarchy (${rowName}) AS(${baseQuery} UNION ALL ${recursiveQuery}) SELECT * FROM envHierarchy`; + + // ! 执行原始SQL查询 + return this.mysqlService.db.execute(SQL); + } else { + // ! 查询自己 + return this.mysqlService.db + .select(this.envMoreDataType) + .from(pacCoreEnv) + .leftJoin(pacAuthUser, eq(pacCoreEnv.createby, pacAuthUser.userId)) + .leftJoin(pacCoreService, eq(pacCoreEnv.serviceOf, pacCoreService.serviceKey)) + .leftJoin(pacCoreDict, and(eq(pacCoreDict.dictId, pacCoreEnv.envVal), eq(pacCoreEnv.valIsDict, 1))) + .where(and(eq(pacCoreEnv.envKey, coreEnvKeyDTO.envKey), isNull(pacCoreEnv.deleteby))); + } + } + + // DB 通过ID删除Env + private deleteEnvItem(coreEnvIdDTO: CoreEnvIdDTO, pacInfo: PacInfoType) { + return this.mysqlService.db + .update(pacCoreEnv) + .set({ + deletetime: sql`now()`, + deleteby: pacInfo.userId, + }) + .where(eq(pacCoreEnv.envId, coreEnvIdDTO.envId)); + } + + // DB 更新Env + private updateEnvData(coreEnvIdDTO: CoreEnvIdDTO, updateCoreEnvDto: UpdateCoreEnvDto, pacInfo: PacInfoType) { + // ? 判断身份是否是pac,如果是pac才能写入 + const isPac = this.config.get('masterId') == pacInfo.userId && isTrueEnum(updateCoreEnvDto.ownOfPac); + return this.mysqlService.db + .update(pacCoreEnv) + .set({ + envName: updateCoreEnvDto.envName, + envKey: updateCoreEnvDto.envKey, + envVal: updateCoreEnvDto.envVal, + valIsDict: isTrueEnum(updateCoreEnvDto.valIsDict) ? 1 : 0, + envDesc: updateCoreEnvDto.envDesc, + ownOfPac: isPac ? 0 : 1, + orderNum: updateCoreEnvDto.orderNum, + status: updateCoreEnvDto.status, + serviceOf: updateCoreEnvDto.serviceOf, + updateby: pacInfo.userId, + updatetime: sql`now()`, + }) + .where(eq(pacCoreEnv.envId, coreEnvIdDTO.envId)); + } +} diff --git a/src/application/core-env/dto/create-core-env.dto.ts b/src/application/core-env/dto/create-core-env.dto.ts new file mode 100644 index 0000000..78781f6 --- /dev/null +++ b/src/application/core-env/dto/create-core-env.dto.ts @@ -0,0 +1,133 @@ +import { BooleanEnum } from '@utils/boolean.enum'; +import { ApiProperty } from '@nestjs/swagger'; +import Trim from '@common/decorator/trim/trim.decorator'; +import { IsEnum, IsInt, IsOptional, IsString, Length, Max, Min } from 'class-validator'; +import ChangeCase, { CaseType } from '@common/decorator/change-case/change-case.decorator'; + +export class CreateCoreEnvDto { + @ApiProperty({ + description: '环境变量父ID', + type: String, + example: '0', + required: true, + minLength: 1, + maxLength: 20, + }) + @Trim() + @IsString({ message: '环境变量关联属性应为字符串格式!' }) + @IsOptional() + public readonly pid?: string = '0'; + + @ApiProperty({ + description: '环境变量名称', + type: String, + example: '主题', + required: true, + minLength: 1, + maxLength: 32, + }) + @Trim() + @IsString({ message: '环境变量名称应为字符串格式!' }) + @Length(1, 32, { message: '请将环境变量名称长度控制在1到32位之间!' }) + public readonly envName: string; + + @ApiProperty({ + description: '环境变量标志', + type: String, + example: 'THEME', + required: true, + minLength: 1, + maxLength: 32, + }) + @ChangeCase(CaseType.constant) + @Trim() + @IsString({ message: '环境变量标志应为字符串格式!' }) + @Length(1, 32, { message: '请将环境变量标志长度控制在1到32位之间!' }) + public readonly envKey: string; + + @ApiProperty({ + description: '环境变量值', + type: String, + example: '#33333333a', + required: false, + minLength: 1, + maxLength: 255, + }) + @Trim() + @IsString({ message: '环境变量值应为字符串格式!' }) + @Length(1, 255, { message: '请将环境变量值长度控制在1到255位之间!' }) + @IsOptional() + public readonly envVal: string; + + @ApiProperty({ + description: '是否来源于字典', + type: BooleanEnum, + enum: BooleanEnum, + example: 0, + required: false, + }) + @Trim() + @IsEnum(BooleanEnum, { message: 'envIsDict参数格式错误' }) + @IsOptional() + public readonly valIsDict?: BooleanEnum.FALSE; + + @ApiProperty({ + description: '环境变量描述信息', + type: String, + example: '这里是web短的颜色主题', + required: false, + minLength: 1, + maxLength: 255, + }) + @Trim() + @IsString({ message: '环境变量描述信息应为字符串格式!' }) + @Length(1, 255, { message: '请将环境变量描述信息长度控制在1到255位之间!' }) + @IsOptional() + public readonly envDesc?: string; + + @ApiProperty({ + description: '是否属于PAC', + type: BooleanEnum, + enum: BooleanEnum, + example: false, + required: false, + }) + @Trim() + @IsEnum(BooleanEnum, { message: 'envIsDict参数格式错误' }) + @IsOptional() + public readonly ownOfPac: BooleanEnum = BooleanEnum.FALSE; + + @ApiProperty({ + description: '排序', + type: Number, + example: 10, + required: false, + minimum: -1000, + maximum: 1000, + }) + @IsOptional() + @IsInt({ + message: '排序必须是整数!', + }) + @Min(-1000, { + message: '排序不能小于-1000!', + }) + @Max(1000, { + message: '排序不能超过1000', + }) + public readonly orderNum?: number = 0; + + @ApiProperty({ + description: '服务的唯一标识', + type: String, + example: 'CORE-PAC-AUTH', + required: false, + minLength: 2, + maxLength: 16, + }) + @Trim() + @IsString({ message: '服务标识应为字符串格式!' }) + @Length(2, 16, { message: '请将服务标识长度控制在2到16位之间!' }) + @IsOptional() + public readonly serviceOf: string; +} diff --git a/src/application/core-env/dto/get-core-env.dto.ts b/src/application/core-env/dto/get-core-env.dto.ts new file mode 100644 index 0000000..da13f54 --- /dev/null +++ b/src/application/core-env/dto/get-core-env.dto.ts @@ -0,0 +1,142 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: get-core-env.dto.ts - +// | @创建时间: 2024-06-05 11:41 +// | @更新时间: 2024-06-05 11:41 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +import { GetDto } from '@dto/get.dto'; +import { ApiProperty } from '@nestjs/swagger'; +import Trim from '@common/decorator/trim/trim.decorator'; +import { IsEnum, IsInt, IsOptional, IsString, Length, Max, Min } from 'class-validator'; +import { BooleanEnum } from '@utils/boolean.enum'; +import ChangeCase, { CaseType } from '@common/decorator/change-case/change-case.decorator'; + +export class GetCoreEnvDTO extends GetDto { + @ApiProperty({ + description: '环境变量信息', + type: String, + example: '主题', + required: false, + minLength: 1, + maxLength: 128, + }) + @Trim() + @IsString({ message: '环境变量信息应为字符串格式!' }) + @Length(0, 128, { message: '请将环境变量信息长度控制在1到128位之间!' }) + @IsOptional() + readonly envInfo?: string; + + @ApiProperty({ + description: '是否属于PAC', + type: BooleanEnum, + enum: BooleanEnum, + example: 0, + required: false, + }) + @Trim() + @IsEnum(BooleanEnum, { message: 'ownOfPac参数格式错误' }) + @IsOptional() + readonly ownOfPac: BooleanEnum; + + @ApiProperty({ + description: '服务的唯一标识', + type: String, + example: 'CORE-PAC-AUTH', + required: false, + minLength: 2, + maxLength: 16, + }) + @Trim() + @IsString({ message: '服务标识应为字符串格式!' }) + @Length(2, 16, { message: '请将服务标识长度控制在2到16位之间!' }) + @IsOptional() + readonly serviceOf: string; + + @ApiProperty({ + description: '环境变量状态', + type: Number, + example: 0, + required: false, + minimum: -100, + maximum: 100, + }) + @Trim() + @IsInt({ + message: '环境变量状态必须是整数!', + }) + @Min(-100, { + message: '环境变量状态需要大于-100!', + }) + @Max(100, { + message: '环境变量状态不能超过100', + }) + @IsOptional() + readonly status?: number; + + @ApiProperty({ + description: '环境变量层级id', + type: Number, + example: 0, + required: false, + minimum: 0, + maximum: 100, + }) + @Trim() + @IsString({ message: '环境变量层级id应为字符串格式!' }) + @Length(1, 20, { message: '环境变量层级id格式错误!' }) + @IsOptional() + readonly hierarchy?: string; +} + +export class CoreEnvIdDTO { + @ApiProperty({ + description: '环境变量ID', + type: String, + example: '1123817263136', + required: true, + minLength: 19, + maxLength: 19, + }) + @IsString() + @Length(19, 19, { message: '环境变量ID格式错误!' }) + readonly envId: string; +} + +export class CoreEnvKeyDTO { + @ApiProperty({ + description: '环境变量标志', + type: String, + example: 'Country', + required: true, + minLength: 1, + maxLength: 32, + }) + @Trim() + @ChangeCase(CaseType.constant) + @IsString({ message: '环境变量标志应为字符串格式!' }) + @Length(1, 32, { message: '请将环境变量标志长度控制在1到32位之间!' }) + readonly envKey: string; +} + +export class CoreEnvTargetListDTO { + @ApiProperty({ + description: '是否查找树结构', + type: BooleanEnum, + enum: BooleanEnum, + example: 0, + required: false, + }) + @Trim() + @IsEnum(BooleanEnum, { + message: '查找数结构数据错误', + }) + @IsOptional() + readonly isTree: BooleanEnum; +} diff --git a/src/application/core-env/dto/update-core-env.dto.ts b/src/application/core-env/dto/update-core-env.dto.ts new file mode 100644 index 0000000..7451cff --- /dev/null +++ b/src/application/core-env/dto/update-core-env.dto.ts @@ -0,0 +1,25 @@ +import { ApiProperty, PartialType } from '@nestjs/swagger'; +import { CreateCoreEnvDto } from './create-core-env.dto'; +import { IsInt, IsOptional, Max, Min } from 'class-validator'; + +export class UpdateCoreEnvDto extends PartialType(CreateCoreEnvDto) { + @ApiProperty({ + description: '状态', + type: Number, + example: 10, + required: false, + minimum: -100, + maximum: 100, + }) + @IsOptional() + @IsInt({ + message: '状态必须是整数!', + }) + @Min(-1000, { + message: '状态不能小于-100!', + }) + @Max(1000, { + message: '状态不能超过100', + }) + readonly status: number; +} diff --git a/src/application/core-env/entities/core-env.entity.ts b/src/application/core-env/entities/core-env.entity.ts new file mode 100644 index 0000000..5b059b6 --- /dev/null +++ b/src/application/core-env/entities/core-env.entity.ts @@ -0,0 +1 @@ +export class CoreEnv {} diff --git a/src/application/core-service/core-service.controller.spec.ts b/src/application/core-service/core-service.controller.spec.ts new file mode 100644 index 0000000..4f275d3 --- /dev/null +++ b/src/application/core-service/core-service.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CoreServiceController } from './core-service.controller'; +import { CoreServiceService } from './core-service.service'; + +describe('CoreServiceController', () => { + let controller: CoreServiceController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [CoreServiceController], + providers: [CoreServiceService], + }).compile(); + + controller = module.get(CoreServiceController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/application/core-service/core-service.controller.ts b/src/application/core-service/core-service.controller.ts new file mode 100644 index 0000000..4702639 --- /dev/null +++ b/src/application/core-service/core-service.controller.ts @@ -0,0 +1,65 @@ +import { Controller, Get, Post, Body, Patch, Param, Delete, Query } from '@nestjs/common'; +import { CoreServiceService } from './core-service.service'; +import { CreateCoreServiceDto } from './dto/create-core-service.dto'; +import { UpdateCoreServiceDto } from './dto/update-core-service.dto'; +import { ApiOperation, ApiProduces, ApiTags } from '@nestjs/swagger'; +import { PacInfo } from '@common/decorator/pac-info/pac-info.decorator'; +import { PacInfoType } from '@utils/myType'; +import { GetCoreServiceDto } from './dto/get-core-service.dto'; +import { ServiceKeyDto } from '@app/core-service/dto/serviceKey.dto'; + +@ApiTags('系统服务') +@Controller('coreservice') +export class CoreServiceController { + constructor(private readonly coreServiceService: CoreServiceService) {} + + @ApiOperation({ + summary: '添加服务', + description: '增加新服务', + }) + @ApiProduces('application/json') + @Post() + create(@Body() createCoreServiceDto: CreateCoreServiceDto, @PacInfo() pacInfo: PacInfoType): Promise { + return this.coreServiceService.create(createCoreServiceDto, pacInfo); + } + + @ApiOperation({ + summary: '服务列表', + description: '获取服务分页/列表', + }) + @ApiProduces('application/json') + @Get() + findAll(@Query() getCoreServiceDto: GetCoreServiceDto): Promise { + return this.coreServiceService.findAll(getCoreServiceDto); + } + + // @ApiOperation({ + // summary: '服务详情', + // description: '查找指定服务的详细信息', + // }) + // @ApiProduces('application/json') + // @Get(':id') + // findOne(@Param('id') id: string) { + // return this.coreServiceService.findOne(+id); + // } + + @ApiOperation({ + summary: '更新服务', + description: '更新指定服务的信息', + }) + @ApiProduces('application/json') + @Patch(':serviceKey') + update(@Param() serviceKey: ServiceKeyDto, @Body() updateCoreServiceDto: UpdateCoreServiceDto, @PacInfo() pacInfo: PacInfoType) { + return this.coreServiceService.update(serviceKey, updateCoreServiceDto, pacInfo); + } + + @ApiOperation({ + summary: '删除服务', + description: '删除指定服务', + }) + @ApiProduces('application/json') + @Delete(':serviceKey') + remove(@Param() serviceKey: ServiceKeyDto, @PacInfo() pacInfo: PacInfoType) { + return this.coreServiceService.remove(serviceKey, pacInfo); + } +} diff --git a/src/application/core-service/core-service.module.ts b/src/application/core-service/core-service.module.ts new file mode 100644 index 0000000..4dde3ce --- /dev/null +++ b/src/application/core-service/core-service.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { CoreServiceService } from './core-service.service'; +import { CoreServiceController } from './core-service.controller'; + +@Module({ + controllers: [CoreServiceController], + providers: [CoreServiceService], +}) +export class CoreServiceModule {} diff --git a/src/application/core-service/core-service.service.spec.ts b/src/application/core-service/core-service.service.spec.ts new file mode 100644 index 0000000..ab36631 --- /dev/null +++ b/src/application/core-service/core-service.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CoreServiceService } from './core-service.service'; + +describe('CoreServiceService', () => { + let service: CoreServiceService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [CoreServiceService], + }).compile(); + + service = module.get(CoreServiceService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/application/core-service/core-service.service.ts b/src/application/core-service/core-service.service.ts new file mode 100644 index 0000000..a854136 --- /dev/null +++ b/src/application/core-service/core-service.service.ts @@ -0,0 +1,234 @@ +import { HttpException, HttpStatus, Injectable } from '@nestjs/common'; +import { CreateCoreServiceDto } from './dto/create-core-service.dto'; +import { UpdateCoreServiceDto } from './dto/update-core-service.dto'; +import { LoggerService } from '@service/logger/logger.service'; +import { MysqlService } from '@common/service/mysql/mysql.service'; +import { pacAuthUser, pacCoreService } from '@entities/schema'; +import { asc, desc, eq, isNull, like, or, sql } from 'drizzle-orm'; +import { PacInfoType } from '@utils/myType'; +import { GetCoreServiceDto } from '@app/core-service/dto/get-core-service.dto'; +import { likeQuery } from '@utils/likeQuery'; +import { ServiceKeyDto } from '@app/core-service/dto/serviceKey.dto'; +import { RedisService } from '@common/service/redis/redis.service'; +import { isTrueEnum } from '@utils/boolean.enum'; + +@Injectable() +export class CoreServiceService { + constructor( + private readonly logger: LoggerService, + private readonly mysqlService: MysqlService, + private readonly redisService: RedisService, + ) {} + + /** Service + * NAME: create + * DESC: 创建服务 + * DATE: 2024-05-30 21:06:24 - + * */ + async create(createCoreServiceDto: CreateCoreServiceDto, pacInfo: PacInfoType) { + // ! 上锁 + const lock = await this.redisService.distributedLock('SERVICE' + createCoreServiceDto.serviceKey, createCoreServiceDto.serviceKey); + + // ? 存在正在进行写入的服务 + if (!lock) throw new HttpException('服务繁忙,服务标识重复!', HttpStatus.CONFLICT); + + // @ 核心业务 + try { + // ! 查重 + const result = await this.getServiceDataForServiceKey(createCoreServiceDto.serviceKey); + + // ? 存在重复 + if (result.length > 0) throw new HttpException('服务标识重复!', HttpStatus.CONFLICT); + + // ! 添加服务数据 + const newPacCoreService = await this.addServiceData(createCoreServiceDto, pacInfo); + + // ! 解锁 + lock(); + + // ! 返回结果 + return newPacCoreService; + } catch (e) { + // ! 解锁 + lock(); + + // ! 抛出错误 + throw e; + } + } + + /** Service + * NAME: findAll + * DESC: 查找服务分页/列表 + * DATE: 2024-05-30 21:07:40 - + * */ + async findAll(getCoreServiceDto: GetCoreServiceDto) { + // ? 是否查询列表 + if (isTrueEnum(getCoreServiceDto.isList)) { + // ! 返回列表数据 + return await this.getServiceList(getCoreServiceDto); + } else { + // ! 返回分页数据 + return await this.getServicePage(getCoreServiceDto); + } + } + + /** Service + * NAME: update + * DESC: 更新数据 + * DATE: 2024-05-30 21:20:19 - + * */ + async update(serviceKey: ServiceKeyDto, updateCoreServiceDto: UpdateCoreServiceDto, pacInfo: PacInfoType) { + // ! 上锁 + const lock = await this.redisService.distributedLock('SERVICE' + updateCoreServiceDto.serviceKey, updateCoreServiceDto.serviceKey); + + // ? 存在正在运行的服务 + if (!lock) throw new HttpException('服务繁忙,服务标识重复!', HttpStatus.CONFLICT); + + // @ 核心业务 + try { + if (serviceKey.serviceKey != updateCoreServiceDto.serviceKey) { + // ! 查重 + const result = await this.getServiceDataForServiceKey(updateCoreServiceDto.serviceKey); + if (result.length > 0) { + throw new HttpException('服务标识重复!', HttpStatus.CONFLICT); + } + } + + // ! 更新数据 + const result = await this.updateServiceItem(serviceKey, updateCoreServiceDto, pacInfo); + + // ! 解锁 + lock(); + + // ! 返回数据 + return result; + } catch (e) { + // ! 解锁 + lock(); + + // ! 抛出错误 + throw e; + } + } + + /** Service + * NAME: remove + * DESC: 删除数据 + * DATE: 2024-05-30 21:24:33 - + * */ + async remove(serviceKey: ServiceKeyDto, pacInfo: PacInfoType) { + // ! 执行删除并返回 + return await this.deleteServiceItem(serviceKey, pacInfo); + } + + // DB 根据serviceKey查找服务数据 可用于查重 + async getServiceDataForServiceKey(serviceKey: string) { + return await this.mysqlService.db.select().from(pacCoreService).where(eq(pacCoreService.serviceKey, serviceKey)); + } + + // DB 添加服务数据 + async addServiceData(createCoreServiceDto: CreateCoreServiceDto, pacInfo: PacInfoType) { + const newServiceData: typeof pacCoreService.$inferInsert = { + createby: pacInfo.userId, + createtime: sql`now()` as any, + serviceKey: createCoreServiceDto.serviceKey, + serviceName: createCoreServiceDto.serviceName, + serviceVersion: createCoreServiceDto.serviceVersion, + serviceDesc: createCoreServiceDto.serviceDesc, + }; + return await this.mysqlService.db.insert(pacCoreService).values(newServiceData); + } + + // DB 获取服务分页 + async getServicePage(getCoreServiceDto: GetCoreServiceDto) { + const offset = (getCoreServiceDto.pageNumber - 1) * getCoreServiceDto.pageSize; + + // 定义基础查询函数 + const buildBaseQuery = (selectData = undefined) => { + // 启用动态查询模式 $dynamic + let query = this.mysqlService.db.select(selectData).from(pacCoreService).where(isNull(pacCoreService.deleteby)).$dynamic(); + + // 根据条件添加额外的WHERE子句 + if (getCoreServiceDto.serviceInfo) { + query = query.where( + or( + like(pacCoreService.serviceKey, likeQuery(getCoreServiceDto.serviceInfo)), + like(pacCoreService.serviceName, likeQuery(getCoreServiceDto.serviceInfo)), + like(pacCoreService.serviceDesc, likeQuery(getCoreServiceDto.serviceInfo)), + ), + ); + } + + return query; + }; + + // 使用基础查询构建查询总记录数 + const totalCountQuery = buildBaseQuery({ + totalCount: sql`COUNT(*)`, + }); + + // 使用基础查询构建分页查询 + const paginatedQuery = buildBaseQuery({ + serviceKey: pacCoreService.serviceKey, + serviceName: pacCoreService.serviceName, + serviceVersion: pacCoreService.serviceVersion, + serviceDesc: pacCoreService.serviceDesc, + createby: pacCoreService.createby, + createName: pacAuthUser.nickname, + createtime: pacCoreService.createtime, + }) + .leftJoin(pacAuthUser, eq(pacCoreService.createby, pacAuthUser.userId)) + .orderBy(isTrueEnum(getCoreServiceDto.isAsc) ? asc(pacCoreService.createtime) : desc(pacCoreService.createtime)) + .limit(getCoreServiceDto.pageSize) + .offset(offset); + + return { + total: (await totalCountQuery)[0].totalCount, + rowData: await paginatedQuery, + searchData: getCoreServiceDto, + }; + } + + // DB 获取服务列表 + async getServiceList(getCoreServiceDto: GetCoreServiceDto) { + return await this.mysqlService.db + .select({ + serviceKey: pacCoreService.serviceKey, + serviceName: pacCoreService.serviceName, + }) + .from(pacCoreService) + .orderBy(isTrueEnum(getCoreServiceDto.isAsc) ? asc(pacCoreService.createtime) : desc(pacCoreService.createtime)) + .where(isNull(pacCoreService.deleteby)); + } + + // DB 删除服务 + async deleteServiceItem(serviceKey: ServiceKeyDto, pacInfo: PacInfoType) { + const deleteData = { + serviceKey: serviceKey.serviceKey, + userId: pacInfo.userId, + }; + return await this.mysqlService.db + .update(pacCoreService) + .set({ + deletetime: sql`now()`, + deleteby: deleteData.userId, + }) + .where(eq(pacCoreService.serviceKey, deleteData.serviceKey)); + } + + // DB 更新服务 + updateServiceItem(serviceKey: ServiceKeyDto, updateCoreServiceDto: UpdateCoreServiceDto, pacInfo: PacInfoType) { + return this.mysqlService.db + .update(pacCoreService) + .set({ + serviceKey: updateCoreServiceDto.serviceKey, + serviceName: updateCoreServiceDto.serviceName, + serviceVersion: updateCoreServiceDto.serviceVersion, + serviceDesc: updateCoreServiceDto.serviceDesc, + updatetime: sql`now()`, + updateby: pacInfo.userId, + }) + .where(eq(pacCoreService.serviceKey, serviceKey.serviceKey)); + } +} diff --git a/src/application/core-service/dto/create-core-service.dto.ts b/src/application/core-service/dto/create-core-service.dto.ts new file mode 100644 index 0000000..685e075 --- /dev/null +++ b/src/application/core-service/dto/create-core-service.dto.ts @@ -0,0 +1,62 @@ +import { IsOptional, IsString, Length } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; +import Trim from '@common/decorator/trim/trim.decorator'; + +export class CreateCoreServiceDto { + @ApiProperty({ + description: '服务的唯一标识', + type: String, + example: 'CORE-PAC-AUTH', + required: true, + + // format: 'email', // email, date-time, uuid + // minimum: 1, // 数字属性的最小值 + minLength: 2, + maxLength: 16, + + // minItems: 1, // 数组属性的最小项目数 + }) + @Trim() + @IsString({ message: '服务标识应为字符串格式!' }) + @Length(2, 16, { message: '请将服务标识长度控制在2到16位之间!' }) + readonly serviceKey: string; + + @ApiProperty({ + description: '服务名称', + type: String, + example: 'PAC核心用户鉴权服务', + required: true, + minLength: 2, + maxLength: 32, + }) + @Trim() + @IsString({ message: '服务名称应为字符串格式!' }) + @Length(2, 32, { message: '请将服务名称长度控制在2到32位之间!' }) + readonly serviceName: string; + + @ApiProperty({ + description: '服务版本', + type: String, + example: '2.1', + required: false, + minLength: 1, + maxLength: 32, + }) + @Trim() + @IsOptional() + @Length(1, 32, { message: '请将服务版本长度控制在1到32位之间!' }) + readonly serviceVersion: string; + + @ApiProperty({ + description: '服务描述', + type: String, + example: '所有系统的前驱,管理用户', + required: false, + minLength: 1, + maxLength: 255, + }) + @Trim() + @IsOptional() + @Length(1, 255, { message: '请将服务描述长度控制在1到255位之间!' }) + readonly serviceDesc: string; +} diff --git a/src/application/core-service/dto/get-core-service.dto.ts b/src/application/core-service/dto/get-core-service.dto.ts new file mode 100644 index 0000000..0cfd081 --- /dev/null +++ b/src/application/core-service/dto/get-core-service.dto.ts @@ -0,0 +1,33 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: get-core-service.dto.ts - +// | @创建时间: 2024-05-28 18:43 +// | @更新时间: 2024-05-28 18:43 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +import { GetDto } from '@/dto/get.dto'; +import { IsOptional, IsString, Length } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; +import Trim from '@common/decorator/trim/trim.decorator'; + +export class GetCoreServiceDto extends GetDto { + @ApiProperty({ + description: '服务信息', + type: String, + example: 'PAC核心用户鉴权服务', + required: false, + minLength: 1, + maxLength: 128, + }) + @Trim() + @IsOptional() + @IsString({ message: '服务信息应为字符串格式!' }) + @Length(1, 128, { message: '请将服务信息长度控制在1到128位之间!' }) + readonly serviceInfo?: string; +} diff --git a/src/application/core-service/dto/serviceKey.dto.ts b/src/application/core-service/dto/serviceKey.dto.ts new file mode 100644 index 0000000..3d54b77 --- /dev/null +++ b/src/application/core-service/dto/serviceKey.dto.ts @@ -0,0 +1,36 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: serviceKey.dto.ts - +// | @创建时间: 2024-05-30 15:14 +// | @更新时间: 2024-05-30 15:14 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +import { ApiProperty } from '@nestjs/swagger'; +import { IsString, Length } from 'class-validator'; +import Trim from '@common/decorator/trim/trim.decorator'; + +export class ServiceKeyDto { + @ApiProperty({ + description: '服务的唯一标识', + type: String, + example: 'CORE-PAC-AUTH', + required: true, + + // format: 'email', // email, date-time, uuid + // minimum: 1, // 数字属性的最小值 + minLength: 2, + maxLength: 16, + + // minItems: 1, // 数组属性的最小项目数 + }) + @Trim() + @IsString({ message: '服务标识应为字符串格式!' }) + @Length(2, 16, { message: '请将服务标识长度控制在2到16位之间!' }) + readonly serviceKey: string; +} diff --git a/src/application/core-service/dto/update-core-service.dto.ts b/src/application/core-service/dto/update-core-service.dto.ts new file mode 100644 index 0000000..b49e8df --- /dev/null +++ b/src/application/core-service/dto/update-core-service.dto.ts @@ -0,0 +1,5 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreateCoreServiceDto } from './create-core-service.dto'; + +// 使用PartialType来创建一个所有属性都是可选的DTO +export class UpdateCoreServiceDto extends PartialType(CreateCoreServiceDto) {} diff --git a/src/application/core-service/entities/core-service.entity.ts b/src/application/core-service/entities/core-service.entity.ts new file mode 100644 index 0000000..0029827 --- /dev/null +++ b/src/application/core-service/entities/core-service.entity.ts @@ -0,0 +1 @@ +export class CoreService {} diff --git a/src/application/global.module.ts b/src/application/global.module.ts new file mode 100644 index 0000000..c2794cb --- /dev/null +++ b/src/application/global.module.ts @@ -0,0 +1,26 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: global.module.ts - +// | @创建时间: 2024-05-31 20:42 +// | @更新时间: 2024-05-31 20:42 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +import { Global, Module } from '@nestjs/common'; +import { LoggerService } from '@service/logger/logger.service'; +import { RedisService } from '@common/service/redis/redis.service'; +import { MysqlService } from '@common/service/mysql/mysql.service'; +import { Snowflake } from '@service/snowflake/snowflake.service'; + +@Global() +@Module({ + providers: [LoggerService, RedisService, MysqlService, Snowflake], + exports: [LoggerService, RedisService, MysqlService, Snowflake], + imports: [], +}) +export class GlobalModule {} diff --git a/src/application/test/dto/create-test.dto.ts b/src/application/test/dto/create-test.dto.ts new file mode 100644 index 0000000..75c6b7a --- /dev/null +++ b/src/application/test/dto/create-test.dto.ts @@ -0,0 +1 @@ +export class CreateTestDto {} diff --git a/src/application/test/dto/update-test.dto.ts b/src/application/test/dto/update-test.dto.ts new file mode 100644 index 0000000..136d68f --- /dev/null +++ b/src/application/test/dto/update-test.dto.ts @@ -0,0 +1,4 @@ +import { PartialType } from '@nestjs/swagger'; +import { CreateTestDto } from './create-test.dto'; + +export class UpdateTestDto extends PartialType(CreateTestDto) {} diff --git a/src/application/test/entities/test.entity.ts b/src/application/test/entities/test.entity.ts new file mode 100644 index 0000000..0613f19 --- /dev/null +++ b/src/application/test/entities/test.entity.ts @@ -0,0 +1 @@ +export class Test {} diff --git a/src/application/test/test.controller.spec.ts b/src/application/test/test.controller.spec.ts new file mode 100644 index 0000000..10711f7 --- /dev/null +++ b/src/application/test/test.controller.spec.ts @@ -0,0 +1,20 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { TestController } from './test.controller'; +import { TestService } from './test.service'; + +describe('TestController', () => { + let controller: TestController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [TestController], + providers: [TestService], + }).compile(); + + controller = module.get(TestController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/application/test/test.controller.ts b/src/application/test/test.controller.ts new file mode 100644 index 0000000..e65305b --- /dev/null +++ b/src/application/test/test.controller.ts @@ -0,0 +1,42 @@ +import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common'; +import { TestService } from './test.service'; +import { CreateTestDto } from './dto/create-test.dto'; +import { UpdateTestDto } from './dto/update-test.dto'; +import { ApiOperation, ApiProduces, ApiTags } from '@nestjs/swagger'; + +@ApiTags('Test测试') +@Controller('test') +export class TestController { + constructor(private readonly testService: TestService) {} + + @ApiOperation({ + summary: 'Post操作', + description: '这个操作的详细描述', + }) + @ApiTags('Test测试AAA') + @ApiProduces('application/json') + @Post() + create(@Body() createTestDto: CreateTestDto) { + return this.testService.create(createTestDto); + } + + @Get() + findAll() { + return this.testService.findAll(); + } + + @Get(':id') + findOne(@Param('id') id: string) { + return this.testService.findOne(+id); + } + + @Patch(':id') + update(@Param('id') id: string, @Body() updateTestDto: UpdateTestDto) { + return this.testService.update(+id, updateTestDto); + } + + @Delete(':id') + remove(@Param('id') id: string) { + return this.testService.remove(+id); + } +} diff --git a/src/application/test/test.module.ts b/src/application/test/test.module.ts new file mode 100644 index 0000000..7431dc6 --- /dev/null +++ b/src/application/test/test.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { TestService } from './test.service'; +import { TestController } from './test.controller'; + +@Module({ + controllers: [TestController], + providers: [TestService], +}) +export class TestModule {} diff --git a/src/application/test/test.service.spec.ts b/src/application/test/test.service.spec.ts new file mode 100644 index 0000000..a78c2e1 --- /dev/null +++ b/src/application/test/test.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { TestService } from './test.service'; + +describe('TestService', () => { + let service: TestService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [TestService], + }).compile(); + + service = module.get(TestService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/application/test/test.service.ts b/src/application/test/test.service.ts new file mode 100644 index 0000000..ae68ac2 --- /dev/null +++ b/src/application/test/test.service.ts @@ -0,0 +1,26 @@ +import { Injectable } from '@nestjs/common'; +import { CreateTestDto } from './dto/create-test.dto'; +import { UpdateTestDto } from './dto/update-test.dto'; + +@Injectable() +export class TestService { + create(createTestDto: CreateTestDto) { + return 'This action adds a new test'; + } + + findAll() { + return 'This action returns all test'; + } + + findOne(id: number) { + return `This action returns a #${id} test`; + } + + update(id: number, updateTestDto: UpdateTestDto) { + return `This action updates a #${id} test`; + } + + remove(id: number) { + return `This action removes a #${id} test`; + } +} diff --git a/src/common/decorator/change-case/change-case.decorator.ts b/src/common/decorator/change-case/change-case.decorator.ts new file mode 100644 index 0000000..fc59be9 --- /dev/null +++ b/src/common/decorator/change-case/change-case.decorator.ts @@ -0,0 +1,109 @@ +// import { SetMetadata } from '@nestjs/common'; +// +// export const ChangeCase = (...args: string[]) => SetMetadata('change-case', args); + +import { Transform } from 'class-transformer'; +import { Case } from 'change-case-all'; + +// camel = Case.camel(str); // testString +// capital = Case.capital(str); // Test String +// constant = Case.constant(str); // TEST_STRING +// dot = Case.dot(str); // test.string +// no = Case.no(str); // test string +// pascal = Case.pascal(str); // TestString +// path = Case.path(str); // test/string +// sentence = Case.sentence(str); // Test string +// snake = Case.snake(str); // test_string +// train = Case.train(str); // Test-String +// kebap = Case.kebap(str); // test-string +// sponge = Case.sponge(str); // TeSt StRiNg +// swapCase = Case.swap(str); // TEST STRING +// title = Case.title(str); // Test String +// uppper = Case.upper(str); // TEST STRING +// localeUpper = Case.localeUpper(str, 'en'); // TEST STRING +// lower = Case.lower(str); // test string +// localeLower = Case.localeLower(str, 'en'); // test string +// lowerFirst = Case.lowerFirst(str); // test string +// upperFirst = Case.upperFirst(str); // Test string +// isUpper = Case.isUpper(str); // false +// isLower = Case.isLower(str); // true + +export enum CaseType { + // camel = Case.camel(str); // testString + camel = 'camel', + + // capital = Case.capital(str); // Test String + capital = 'capital', + + // constant = Case.constant(str); // TEST_STRING + constant = 'constant', // xs + + // dot = Case.dot(str); // test.string + dot = 'dot', + + // no = Case.no(str); // test string + no = 'no', + + // pascal = Case.pascal(str); // TestString + pascal = 'pascal', + + // path = Case.path(str); // test/string + path = 'path', + + // sentence = Case.sentence(str); // Test string + sentence = 'sentence', + + // snake = Case.snake(str); // test_string + snake = 'snake', + + // train = Case.train(str); // Test-String + train = 'train', + + // kebap = Case.kebap(str); // test-string + kebap = 'kebap', + + // sponge = Case.sponge(str); // TeSt StRiNg + sponge = 'sponge', + + // swapCase = Case.swap(str); // TEST STRING + swapCase = 'swapCase', + + // title = Case.title(str); // Test String + title = 'title', + + // uppper = Case.upper(str); // TEST STRING + uppper = 'uppper', + + // localeUpper = Case.localeUpper(str, 'en'); // TEST STRING + localeUpper = 'localeUpper', + + // lower = Case.lower(str); // test string + lower = 'lower', + + // localeLower = Case.localeLower(str, 'en'); // test string + localeLower = 'localeLower', + + // lowerFirst = Case.lowerFirst(str); // test string + lowerFirst = 'lowerFirst', + + // upperFirst = Case.upperFirst(str); // Test string + upperFirst = 'upperFirst', + + // isUpper = Case.isUpper(str); // false + isUpper = 'isUpper', + + // isLower = Case.isLower(str); // true + isLower = 'isLower', +} + +export default function ChangeCase(caseName: CaseType) { + return Transform(({ value }) => { + if (typeof value === 'string') { + if (value.trim() == '') { + return undefined; + } + return Case[caseName](value.trim()); + } + return value; + }); +} diff --git a/src/common/decorator/pac-info/pac-info.decorator.ts b/src/common/decorator/pac-info/pac-info.decorator.ts new file mode 100644 index 0000000..545ca65 --- /dev/null +++ b/src/common/decorator/pac-info/pac-info.decorator.ts @@ -0,0 +1,15 @@ +import { createParamDecorator, ExecutionContext, SetMetadata } from '@nestjs/common'; +import { PacInfoType } from '@utils/myType'; + +// export const PacInfo = (...args: string[]) => SetMetadata('pac-info', args); + +// PacInfo +export const PacInfo = createParamDecorator((data: string, ctx: ExecutionContext) => { + const info: PacInfoType = { + username: 'pac', + userId: 0, + }; + return info; + + // const req = ctx.switchToHttp().getRequest(); +}); diff --git a/src/common/decorator/trim/trim.decorator.ts b/src/common/decorator/trim/trim.decorator.ts new file mode 100644 index 0000000..15e9b31 --- /dev/null +++ b/src/common/decorator/trim/trim.decorator.ts @@ -0,0 +1,13 @@ +import { Transform } from 'class-transformer'; + +export default function Trim() { + return Transform(({ value }) => { + if (typeof value === 'string') { + if (value.trim() == '') { + return undefined; + } + return value.trim(); + } + return value; + }); +} diff --git a/src/common/http-except/http-except.filter.spec.ts b/src/common/http-except/http-except.filter.spec.ts new file mode 100644 index 0000000..8c0cc88 --- /dev/null +++ b/src/common/http-except/http-except.filter.spec.ts @@ -0,0 +1,7 @@ +import { HttpExceptFilter } from './http-except.filter'; + +describe('HttpExceptFilter', () => { + it('should be defined', () => { + expect(new HttpExceptFilter()).toBeDefined(); + }); +}); diff --git a/src/common/http-except/http-except.filter.ts b/src/common/http-except/http-except.filter.ts new file mode 100644 index 0000000..4a792c4 --- /dev/null +++ b/src/common/http-except/http-except.filter.ts @@ -0,0 +1,48 @@ +import { ArgumentsHost, Catch, ExceptionFilter, HttpException, HttpStatus } from '@nestjs/common'; +import { LoggerService } from '@service/logger/logger.service'; +import { FastifyRequest, FastifyReply } from 'fastify'; +import { randomHEX } from '@utils/random'; + +@Catch() +export class HttpExceptFilter implements ExceptionFilter { + constructor(private readonly logger: LoggerService) {} + catch(exception: HttpException, host: ArgumentsHost) { + console.log(exception); + const ctx = host.switchToHttp(); + const request = ctx.getRequest(); + const status = exception instanceof HttpException ? exception.getStatus() : HttpStatus.INTERNAL_SERVER_ERROR; + let errData; + if (exception?.getResponse) { + errData = exception.getResponse(); + if (!errData.statusCode || !errData.timestamp) { + errData = { + statusCode: status, + timestamp: new Date().toISOString(), + path: request.url, + message: errData?.message || errData, + }; + } + this.logger.warn(JSON.stringify(errData, null, 4)); + } else { + let message = ''; + const errCode = randomHEX(); + if (Object.keys(exception).includes('sql')) { + message = `数据库写入故障,请联系管理员! 错误码: ${errCode}`; + } else { + message = `服务发现未知故障,请联系管理员! 错误码: ${errCode}`; + } + const logData = JSON.stringify(exception, null, 4); + this.logger.error('ERRCODE: ' + errCode + ' ' + logData); + + errData = { + statusCode: status, + timestamp: new Date().toISOString(), + path: request.url, + message, + }; + } + errData.data = null; + const response = ctx.getResponse(); + response.send(errData); + } +} diff --git a/src/common/interceptor/format-response/format-response.interceptor.spec.ts b/src/common/interceptor/format-response/format-response.interceptor.spec.ts new file mode 100644 index 0000000..3131072 --- /dev/null +++ b/src/common/interceptor/format-response/format-response.interceptor.spec.ts @@ -0,0 +1,7 @@ +import { FormatResponseInterceptor } from './format-response.interceptor'; + +describe('FormatResponseInterceptor', () => { + it('should be defined', () => { + expect(new FormatResponseInterceptor()).toBeDefined(); + }); +}); diff --git a/src/common/interceptor/format-response/format-response.interceptor.ts b/src/common/interceptor/format-response/format-response.interceptor.ts new file mode 100644 index 0000000..828e54b --- /dev/null +++ b/src/common/interceptor/format-response/format-response.interceptor.ts @@ -0,0 +1,15 @@ +import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common'; +import { map, Observable } from 'rxjs'; + +@Injectable() +export class FormatResponseInterceptor implements NestInterceptor { + intercept(context: ExecutionContext, next: CallHandler): Observable { + return next.handle().pipe( + map((data) => ({ + statusCode: context.switchToHttp().getResponse().statusCode, + message: 'Successful', + data, + })), + ); + } +} diff --git a/src/common/interceptor/log-request-info/log-request-info.interceptor.spec.ts b/src/common/interceptor/log-request-info/log-request-info.interceptor.spec.ts new file mode 100644 index 0000000..a90a2c2 --- /dev/null +++ b/src/common/interceptor/log-request-info/log-request-info.interceptor.spec.ts @@ -0,0 +1,7 @@ +import { LogRequestInfoInterceptor } from './log-request-info.interceptor'; + +describe('LogRequestInfoInterceptor', () => { + it('should be defined', () => { + expect(new LogRequestInfoInterceptor()).toBeDefined(); + }); +}); diff --git a/src/common/interceptor/log-request-info/log-request-info.interceptor.ts b/src/common/interceptor/log-request-info/log-request-info.interceptor.ts new file mode 100644 index 0000000..402f508 --- /dev/null +++ b/src/common/interceptor/log-request-info/log-request-info.interceptor.ts @@ -0,0 +1,58 @@ +import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common'; +import { catchError, Observable, tap, throwError } from 'rxjs'; +import { FastifyReply, FastifyRequest } from 'fastify'; +import { LoggerService } from '@service/logger/logger.service'; +import formatBytes from '@utils/formatBytes'; +import * as colors from 'colors'; +import mathodColor from '@utils/mathodColor'; + +@Injectable() +export class LogRequestInfoInterceptor implements NestInterceptor { + constructor(private readonly logger: LoggerService) {} + intercept(context: ExecutionContext, next: CallHandler): Observable { + // 请求数据体 + const req: FastifyRequest = context.switchToHttp().getRequest(); + + // Fastify 响应对象 + const reply: FastifyReply = context.switchToHttp().getResponse(); + + // 高精度时间戳 + const start = process.hrtime(); + + // 计算请求大小(如果请求有body) + const requestSize = req.headers['content-length'] ? parseInt(req.headers['content-length'], 10) : 0; + this.logger.debug(`<== ${mathodColor(req.method)} ${req.url} - ${requestSize}`); + + return next.handle().pipe( + tap((data) => { + // 转换为毫秒,保留三位小数 + const end = process.hrtime(start); + const responseTime = ((end[0] + end[1] / 1e9) * 1000).toFixed(3); + let size: number | string = 0; + const contentType: string | any = reply.getHeader('Content-Type'); + + // 检查Content-Type来判断响应是否为文件 + if (contentType?.includes('application/octet-stream') || contentType?.includes('multipart/form-data')) { + // 如果是文件或其他二进制流,通常无法直接获取大小,可以记录为unknown或特殊值 + size = 'unknown (stream or binary data)'; + } else { + try { + // 尝试将响应体转换为字符串来计算大小 + const dataStr = JSON.stringify(data); + size = Buffer.byteLength(dataStr, 'utf8'); + } catch (e) { + // 如果响应体不是JSON,则不计算大小或记录为特殊值 + size = 'non-JSON'; + } + } + + // 打印日志 + this.logger.debug(`=>> ${mathodColor(req.method)} ${req.url} ${formatBytes(size)} ${responseTime} ms`); + }), + catchError((err) => { + // console.error(err); + return throwError(() => err); + }), + ); + } +} diff --git a/src/common/interceptor/user-operation-log/user-operation-log.interceptor.spec.ts b/src/common/interceptor/user-operation-log/user-operation-log.interceptor.spec.ts new file mode 100644 index 0000000..c0c60f4 --- /dev/null +++ b/src/common/interceptor/user-operation-log/user-operation-log.interceptor.spec.ts @@ -0,0 +1,7 @@ +import { UserOperationLogInterceptor } from './user-operation-log.interceptor'; + +describe('UserOperationLogInterceptor', () => { + it('should be defined', () => { + expect(new UserOperationLogInterceptor()).toBeDefined(); + }); +}); diff --git a/src/common/interceptor/user-operation-log/user-operation-log.interceptor.ts b/src/common/interceptor/user-operation-log/user-operation-log.interceptor.ts new file mode 100644 index 0000000..5b4e66d --- /dev/null +++ b/src/common/interceptor/user-operation-log/user-operation-log.interceptor.ts @@ -0,0 +1,54 @@ +import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common'; +import { Observable } from 'rxjs'; +import { Reflector } from '@nestjs/core'; +import { FastifyRequest } from 'fastify'; +import { LoggerService } from '@service/logger/logger.service'; + +@Injectable() +export class UserOperationLogInterceptor implements NestInterceptor { + constructor( + private readonly reflector: Reflector, + private readonly logger: LoggerService, + ) {} + intercept(context: ExecutionContext, next: CallHandler): Observable { + const request = context.switchToHttp().getRequest(); // & { browserInfo?: any } + const handler = context.getHandler(); + const controller = context.getClass(); + + /** + * todo: 获取注解信息 + * // 获取注解Keys 类和方法都行 + * const classMetadataKeys = Reflect.getMetadataKeys(controller); + * const interfaceMetaKeys = Reflect.getMetadataKeys(handler); + * // 拿到Keys获取Value + * const controllerMetaData = classMetadataKeys.map((key) => ({ + * key, + * value: Reflect.getMetadata(key, controller), + * })); + * + * */ + + // 获取IP地址 protocol + const clientIp = request.ip; + + // 浏览器及版本 + const browserInfo = request.raw['browserInfo']; + + // 请求路径 + const path = request.url; + + // 请求方法 + const method = request.method; + + // 获取swagger注解接口Operation操作信息 + const methodOperation = this.reflector.get('swagger/apiOperation', handler); + + // 获取swagger注解模块类Tags + const controllerTags = Reflect.getMetadata('swagger/apiUseTags', controller); + + this.logger.debug(`${method} - ${clientIp} => ${path} ${controllerTags[0]}/${methodOperation['summary']} ${browserInfo.name}:${browserInfo.version}`); + + // 执行下一个拦截器或路由处理程序 + return next.handle(); + } +} diff --git a/src/common/lifecycle/lifecycle.service.spec.ts b/src/common/lifecycle/lifecycle.service.spec.ts new file mode 100644 index 0000000..ae22508 --- /dev/null +++ b/src/common/lifecycle/lifecycle.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { LifecycleService } from './lifecycle.service'; + +describe('LifecycleService', () => { + let service: LifecycleService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [LifecycleService], + }).compile(); + + service = module.get(LifecycleService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/common/lifecycle/lifecycle.service.ts b/src/common/lifecycle/lifecycle.service.ts new file mode 100644 index 0000000..bd200f3 --- /dev/null +++ b/src/common/lifecycle/lifecycle.service.ts @@ -0,0 +1,39 @@ +import { BeforeApplicationShutdown, Injectable, OnApplicationBootstrap, OnModuleDestroy, OnModuleInit } from '@nestjs/common'; +import { LoggerService } from '@service/logger/logger.service'; +import { ConfigService } from '@nestjs/config'; + +@Injectable() +export class LifecycleService implements OnModuleInit, OnModuleDestroy, OnApplicationBootstrap, BeforeApplicationShutdown { + constructor( + private readonly logger: LoggerService, + private readonly config: ConfigService, + ) {} + + // 意义: 在模块初始化时调用。 + // 用途: 可用于执行一些需要在模块加载时完成的任务,如依赖注入初始化、资源准备等。 + // 实现: 需要实现OnModuleInit接口,并在onModuleInit方法中定义逻辑。 + onModuleInit() { + this.logger.debug('The module has been initialized.'); + } + + // 意义: 在应用程序引导完成后调用。 + // 用途: 可用于执行在应用程序完全启动并准备好处理请求之前需要完成的任务,如数据库连接验证、缓存预热等。 + // 实现: 需要实现OnApplicationBootstrap接口,并在onApplicationBootstrap方法中定义逻辑。 + onApplicationBootstrap() { + this.logger.debug('The application has bootstrapped.'); + } + + // 意义: 在应用程序关闭之前调用。 + // 用途: 可用于执行一些清理工作,如关闭数据库连接、释放资源、保存未处理的数据等。 + // 实现: 需要实现BeforeApplicationShutdown接口,并在beforeApplicationShutdown方法中定义逻辑。可以接收一个参数,该参数表示关闭信号。 + beforeApplicationShutdown(signal: string) { + this.logger.debug(`The application is shutting down due to signal: ${signal}`); + } + + // 意义: 在模块销毁时调用。 + // 用途: 可用于执行在模块被卸载时需要完成的任务,如清理模块资源、注销事件监听等。 + // 实现: 需要实现OnModuleDestroy接口,并在onModuleDestroy方法中定义逻辑。 + onModuleDestroy() { + this.logger.debug('The module is being destroyed.'); + } +} diff --git a/src/common/middleware/log-request-info/log-request-info.middleware.spec.ts b/src/common/middleware/log-request-info/log-request-info.middleware.spec.ts new file mode 100644 index 0000000..f962fa3 --- /dev/null +++ b/src/common/middleware/log-request-info/log-request-info.middleware.spec.ts @@ -0,0 +1,7 @@ +import { LogRequestInfoMiddleware } from './log-request-info.middleware'; + +describe('LogRequestInfoMiddleware', () => { + it('should be defined', () => { + expect(new LogRequestInfoMiddleware()).toBeDefined(); + }); +}); diff --git a/src/common/middleware/log-request-info/log-request-info.middleware.ts b/src/common/middleware/log-request-info/log-request-info.middleware.ts new file mode 100644 index 0000000..72a7138 --- /dev/null +++ b/src/common/middleware/log-request-info/log-request-info.middleware.ts @@ -0,0 +1,24 @@ +import { Injectable, NestMiddleware } from '@nestjs/common'; +import { FastifyRequest, FastifyReply } from 'fastify'; + +@Injectable() +export class LogRequestInfoMiddleware implements NestMiddleware { + use(req: FastifyRequest['raw'], res: FastifyReply['raw'], next: () => void) { + // const startTime = process.hrtime.bigint(); + // 我没辙了,这里只能处理请求,以及错误的响应 + next(); + + // res.on('finish', (reply, payload) => { + // const status = res.statusCode; + // const method = req.method; + // const url = req.url; + // const duration = process.hrtime.bigint() - startTime; + // + // // 构建日志消息 + // const logMessage = `${method} ${url} - (${duration / BigInt(1e6)}ms)`; + // console.log(logMessage); + // console.log(payload); + // console.log(JSON.stringify(payload).length); + // }); + } +} diff --git a/src/common/middleware/useragent/useragent.middleware.spec.ts b/src/common/middleware/useragent/useragent.middleware.spec.ts new file mode 100644 index 0000000..6b3c502 --- /dev/null +++ b/src/common/middleware/useragent/useragent.middleware.spec.ts @@ -0,0 +1,7 @@ +import { UserAgentMiddleware } from './useragent.middleware'; + +describe('UseragentMiddleware', () => { + it('should be defined', () => { + expect(new UserAgentMiddleware()).toBeDefined(); + }); +}); diff --git a/src/common/middleware/useragent/useragent.middleware.ts b/src/common/middleware/useragent/useragent.middleware.ts new file mode 100644 index 0000000..6d8af59 --- /dev/null +++ b/src/common/middleware/useragent/useragent.middleware.ts @@ -0,0 +1,30 @@ +import { Injectable, NestMiddleware } from '@nestjs/common'; +import { FastifyReply, FastifyRequest } from 'fastify'; +import * as UAParser from 'ua-parser-js'; + +@Injectable() +export class UserAgentMiddleware implements NestMiddleware { + use(req: FastifyRequest['raw'], res: FastifyReply['raw'], next: () => void) { + // 获取用户代理信息 + const userAgent = req.headers['user-agent']; + + let ua = {}; + if (userAgent.includes('Apifox')) { + ua = { + name: 'Apifox', + version: userAgent, + major: '1', + }; + } else { + ua = new UAParser().setUA(userAgent).getBrowser(); + } + + // 格式化UA + + // 将解析后的浏览器信息添加到请求的 custom 属性中 + req['browserInfo'] = ua; + + // 确保要调用 next 函数继续处理请求 + next(); + } +} diff --git a/src/common/pipe/trim/trim.pipe.spec.ts b/src/common/pipe/trim/trim.pipe.spec.ts new file mode 100644 index 0000000..65c99e6 --- /dev/null +++ b/src/common/pipe/trim/trim.pipe.spec.ts @@ -0,0 +1,7 @@ +import { TrimPipe } from './trim.pipe'; + +describe('TrimPipe', () => { + it('should be defined', () => { + expect(new TrimPipe()).toBeDefined(); + }); +}); diff --git a/src/common/pipe/trim/trim.pipe.ts b/src/common/pipe/trim/trim.pipe.ts new file mode 100644 index 0000000..166f97e --- /dev/null +++ b/src/common/pipe/trim/trim.pipe.ts @@ -0,0 +1,14 @@ +import { ArgumentMetadata, Injectable, PipeTransform } from '@nestjs/common'; + +@Injectable() +export class TrimPipe implements PipeTransform { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + transform(value: any, metadata: ArgumentMetadata) { + if (value instanceof String) { + return value.trim(); + } else if (typeof value === 'string') { + return value.trim(); + } + return value; + } +} diff --git a/src/common/service/mysql/mysql.service.spec.ts b/src/common/service/mysql/mysql.service.spec.ts new file mode 100644 index 0000000..e5bdaa8 --- /dev/null +++ b/src/common/service/mysql/mysql.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { MysqlService } from './mysql.service'; + +describe('MysqlService', () => { + let service: MysqlService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [MysqlService], + }).compile(); + + service = module.get(MysqlService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/common/service/mysql/mysql.service.ts b/src/common/service/mysql/mysql.service.ts new file mode 100644 index 0000000..a807250 --- /dev/null +++ b/src/common/service/mysql/mysql.service.ts @@ -0,0 +1,54 @@ +import { Injectable } from '@nestjs/common'; +import { LoggerService } from '@service/logger/logger.service'; +import { ConfigService } from '@nestjs/config'; +import * as mysql from 'mysql2'; +import { drizzle } from 'drizzle-orm/mysql2'; +import * as schema from '@entities/schema'; + +@Injectable() +export class MysqlService { + public db; + public connection; + constructor( + private readonly configService: ConfigService, + private readonly logger: LoggerService, + ) { + const connection = mysql.createConnection({ + host: this.configService.get('database.mysql.host'), + port: this.configService.get('database.mysql.port'), + user: this.configService.get('database.mysql.username'), + password: this.configService.get('database.mysql.password'), + database: this.configService.get('database.mysql.database'), + + // 启用此选项后,MySQL驱动程序将支持大数字(big numbers),这对于存储和处理 bigint 类型的数据尤为重要。 + // 如果不启用此选项,MySQL驱动程序可能无法正确处理超过 JavaScript 数字精度范围的大数值,导致数据精度丢失。 + supportBigNumbers: true, + + // 启用此选项后,MySQL驱动程序将在接收 bigint 或其他大数值时,将其作为字符串返回,而不是作为JavaScript数字。 + // 这种处理方式可以避免JavaScript本身的数值精度限制问题,确保大数值在应用程序中保持精确。 + bigNumberStrings: true, + }); + connection.on('connect', async () => { + try { + this.connection = connection; + this.db = drizzle(connection, { + schema, + mode: 'default', + }); + this.logger.info('MySQL service initialized'); + } catch (e) { + this.logger.fatal('MySQL service initialized Field'); + this.logger.error(e); + } + try { + await this.db.select().from(schema.pacCoreService); + this.logger.info('MySQL service initialized successfully'); + } catch (err) { + this.logger.fatal('MySQL service initialized Field'); + this.logger.error(err); + } + }); + } + + async onModuleInit() {} +} diff --git a/src/common/service/redis/redis.service.spec.ts b/src/common/service/redis/redis.service.spec.ts new file mode 100644 index 0000000..b765f1c --- /dev/null +++ b/src/common/service/redis/redis.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { RedisService } from './redis.service'; + +describe('RedisService', () => { + let service: RedisService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [RedisService], + }).compile(); + + service = module.get(RedisService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/common/service/redis/redis.service.ts b/src/common/service/redis/redis.service.ts new file mode 100644 index 0000000..d937b88 --- /dev/null +++ b/src/common/service/redis/redis.service.ts @@ -0,0 +1,89 @@ +import { Injectable } from '@nestjs/common'; +import { createClient, RedisClientType } from 'redis'; +import { ConfigService } from '@nestjs/config'; +import { LoggerService } from '@service/logger/logger.service'; + +@Injectable() +export class RedisService { + private readonly redis: RedisClientType; + constructor( + private readonly configService: ConfigService, + private readonly logger: LoggerService, + ) { + const redisConfig = this.configService.get('database.redis'); + this.redis = createClient({ + name: redisConfig.connectName, + username: redisConfig.username, + password: redisConfig.password, + database: redisConfig.database, + url: `redis://${redisConfig.username}:${redisConfig.password}@${redisConfig.host}:${redisConfig.port}/${redisConfig.database}`, + }); + } + + async onModuleInit() { + this.redis.on('connect', async () => { + this.logger.info(await this.redis.set('init', 'iAMIron')); + this.logger.info('Redis service initialized'); + }); + + this.redis.on('error', (err) => { + this.logger.error('Redis error: ', err); + }); + + // 连接到 Redis + await this.redis.connect(); + } + + onModuleDestroy() { + this.redis.quit(); + } + + get(key) { + return this.redis.get(key); + } + set(key, value) { + return this.redis.set(key, value); + } + setNX(key, value) { + return this.redis.setNX(key, value); + } + + // 分布式锁 + async distributedLock(businessName, key) { + // 不存在插入值的Key + const KEY = businessName + key; + + // 不存在插入值的Value,设置为业务名 + const VALUE = businessName; + + // expireTimeInSeconds过期时间 + const EX = 10; + + // 获取锁状态 + const result = await this.redis.SET(KEY, VALUE, { + NX: true, + EX, + }); + + // 不存在,可以上锁 + if (result) { + // 定时器 + const continuationLock = setInterval(async () => { + // 续锁 + await this.redis.EXPIRE(KEY, EX); + }, 9000); + return () => { + // 主动解锁 + + // 清除定时器 + clearInterval(continuationLock); + + // 删除键 + this.redis.DEL(KEY); + }; + } else { + // 存在锁 返回false + return false; + } + } +} diff --git a/src/config/configuration.ts b/src/config/configuration.ts new file mode 100644 index 0000000..329c7d6 --- /dev/null +++ b/src/config/configuration.ts @@ -0,0 +1,48 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: configuration.ts - +// | @创建时间: 2024-05-10 13:44 +// | @更新时间: 2024-05-10 13:44 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +export default () => ({ + allEnv: process.env, + env: process.env['NODE_ENV'] || 'development', + masterId: 0, + main: { + host: '0.0.0.0' || 'localhost', + port: 3000, + title: 'PAC-Auth', + description: 'RBAC完善型用户鉴权与基础服务系统', + version: process.env.npm_package_version || '0.0.1', + }, + logger: { + level: process.env['NODE_ENV'] === 'development' ? 'trace' : 'warning', + }, + swagger: { + path: 'swagger', + }, + database: { + mysql: { + host: '172.16.1.10', + port: 3306, + database: 'pacauth', + username: 'root', + password: 'Hxl1314521', + }, + redis: { + host: '172.16.1.10', + port: 6379, + connectName: 'pacAuth', + database: 9, + username: 'default', + password: 'Hxl1314521', + }, + }, +}); diff --git a/src/dto/get.dto.ts b/src/dto/get.dto.ts new file mode 100644 index 0000000..33fbb5f --- /dev/null +++ b/src/dto/get.dto.ts @@ -0,0 +1,89 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: get.dto.ts - +// | @创建时间: 2024-05-28 18:30 +// | @更新时间: 2024-05-28 18:30 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +import { IsOptional, IsInt, Max, Min, IsEnum } from 'class-validator'; +import { ApiProperty } from '@nestjs/swagger'; +import { BooleanEnum } from '@utils/boolean.enum'; +import Trim from '@common/decorator/trim/trim.decorator'; + +export class GetDto { + @ApiProperty({ + description: '页码', + type: Number, + example: 1, + required: false, + + // format: 'email', // email, date-time, uuid + // 数字属性的最小值 + minimum: 1, + + // minLength: 2, + // maxLength: 16, + + // minItems: 1, // 数组属性的最小项目数 + }) + @Trim() + @IsOptional() + @IsInt({ + message: '页码必须是整数!', + }) + @Min(1, { + message: '页码数字需要大于0!', + }) + readonly pageNumber?: number = 1; + + @ApiProperty({ + description: '每页数量', + type: Number, + example: 10, + required: false, + minimum: 1, + maximum: 200, + }) + @Trim() + @IsOptional() + @IsInt({ + message: '每页数量必须是整数!', + }) + @Min(1, { + message: '每页数量需要大于0!', + }) + @Max(200, { + message: '每页数量不能超过200', + }) + readonly pageSize?: number = 10; + + @ApiProperty({ + description: '请求列表', + type: BooleanEnum, + enum: BooleanEnum, + example: false, + required: false, + }) + @Trim() + @IsEnum(BooleanEnum, { message: 'isList参数格式错误' }) + @IsOptional() + readonly isList?: BooleanEnum = BooleanEnum.FALSE; + + @ApiProperty({ + description: '顺序查询', + type: BooleanEnum, + enum: BooleanEnum, + example: false, + required: false, + }) + @Trim() + @IsEnum(BooleanEnum, { message: 'isAsc参数格式错误' }) + @IsOptional() + readonly isAsc?: BooleanEnum = BooleanEnum.FALSE; +} diff --git a/src/entities/0000_productive_zarda.sql b/src/entities/0000_productive_zarda.sql new file mode 100644 index 0000000..22503d5 --- /dev/null +++ b/src/entities/0000_productive_zarda.sql @@ -0,0 +1,180 @@ +-- Current sql file was generated after introspecting the database +-- If you want to run this migration please uncomment this code before executing migrations +/* +CREATE TABLE `pac_auth_dept` ( + `index` int AUTO_INCREMENT NOT NULL, + `dept_id` int NOT NULL, + `pid` int NOT NULL DEFAULT 0, + `grade` int NOT NULL, + `dept_name` varchar(255), + `dept_desc` varchar(255), + `dept_type` int NOT NULL DEFAULT 0, + `dept_leader` int, + `default_role` int, + `order_num` int NOT NULL DEFAULT 0, + `status` int NOT NULL DEFAULT 0, + CONSTRAINT `pac_auth_dept_dept_id` PRIMARY KEY(`dept_id`), + CONSTRAINT `pac_index` UNIQUE(`index`) +); +--> statement-breakpoint +CREATE TABLE `pac_auth_link_role_menu` ( + `index` int AUTO_INCREMENT NOT NULL, + `role_id` int NOT NULL, + `menu_id` int NOT NULL, + CONSTRAINT `pac_auth_link_role_menu_index` PRIMARY KEY(`index`), + CONSTRAINT `pac_index` UNIQUE(`index`) +); +--> statement-breakpoint +CREATE TABLE `pac_auth_link_user_dept` ( + `index` int AUTO_INCREMENT NOT NULL, + `user_id` int NOT NULL, + `dept_id` int NOT NULL, + CONSTRAINT `pac_auth_link_user_dept_index` PRIMARY KEY(`index`), + CONSTRAINT `pac_index` UNIQUE(`index`) +); +--> statement-breakpoint +CREATE TABLE `pac_auth_link_user_post` ( + `index` int AUTO_INCREMENT NOT NULL, + `user_id` int NOT NULL, + `post_id` int NOT NULL, + CONSTRAINT `pac_auth_link_user_post_index` PRIMARY KEY(`index`), + CONSTRAINT `pac_index` UNIQUE(`index`) +); +--> statement-breakpoint +CREATE TABLE `pac_auth_link_user_role` ( + `index` int AUTO_INCREMENT NOT NULL, + `user_id` int NOT NULL, + `role_id` int NOT NULL, + CONSTRAINT `pac_auth_link_user_role_index` PRIMARY KEY(`index`), + CONSTRAINT `pac_index` UNIQUE(`index`) +); +--> statement-breakpoint +CREATE TABLE `pac_auth_post` ( + `index` int AUTO_INCREMENT NOT NULL, + `post_id` int NOT NULL, + `post_key` varchar(255) NOT NULL, + `post_name` varchar(255), + `post_desc` varchar(255), + `order_num` int NOT NULL DEFAULT 0, + `status` int NOT NULL DEFAULT 0, + CONSTRAINT `pac_auth_post_post_id` PRIMARY KEY(`post_id`), + CONSTRAINT `pac_index` UNIQUE(`index`) +); +--> statement-breakpoint +CREATE TABLE `pac_auth_role` ( + `index` int NOT NULL, + `role_id` int NOT NULL, + `pid` int NOT NULL DEFAULT 0, + `role_name` varchar(255) NOT NULL, + `role_key` varchar(255) NOT NULL, + `role_desc` varchar(255), + `role_type` int NOT NULL DEFAULT 0, + `role_data_scope` int NOT NULL DEFAULT 1, + `own_of_pac` int NOT NULL DEFAULT 0, + `order_num` int NOT NULL DEFAULT 0, + `status` int NOT NULL DEFAULT 0, + CONSTRAINT `pac_auth_role_role_id` PRIMARY KEY(`role_id`), + CONSTRAINT `pac_index` UNIQUE(`index`) +); +--> statement-breakpoint +CREATE TABLE `pac_auth_role_data_scope` ( + `index` int AUTO_INCREMENT NOT NULL, + `role_id` int NOT NULL, + `dept_id` int NOT NULL, + `scope_id` int NOT NULL, + CONSTRAINT `pac_auth_role_data_scope_scope_id` PRIMARY KEY(`scope_id`), + CONSTRAINT `pac_index` UNIQUE(`index`) +); +--> statement-breakpoint +CREATE TABLE `pac_auth_user` ( + `index` int AUTO_INCREMENT NOT NULL, + `user_id` int NOT NULL, + `username` varchar(255) NOT NULL, + `password` varchar(255) NOT NULL, + `nickname` varchar(255) NOT NULL, + `user_type` int NOT NULL DEFAULT 0, + `user_email` varchar(255), + `pid` int NOT NULL DEFAULT 0, + `wx_appid` int, + `avatar` varchar(255), + `user_phone` varchar(255), + `user_desc` varchar(255), + `status` int NOT NULL DEFAULT 0, + `have_children` int NOT NULL DEFAULT 0, + CONSTRAINT `pac_auth_user_user_id` PRIMARY KEY(`user_id`), + CONSTRAINT `pac_index` UNIQUE(`index`), + CONSTRAINT `username` UNIQUE(`username`) +); +--> statement-breakpoint +CREATE TABLE `pac_core_dict` ( + `index` int AUTO_INCREMENT NOT NULL, + `dict_id` int NOT NULL, + `pid` int, + `dict_key` varchar(255) NOT NULL, + `dict_desc` varchar(255), + `dict_name` varchar(255) NOT NULL, + `dict_icon` varchar(255) NOT NULL DEFAULT '', + `dict_type` int NOT NULL, + `own_of_pac` int NOT NULL DEFAULT 0, + `order_num` int NOT NULL DEFAULT 0, + `status` int NOT NULL DEFAULT 0, + `service_of` int NOT NULL DEFAULT 0, + `have_children` int NOT NULL DEFAULT 0, + CONSTRAINT `pac_core_dict_dict_id` PRIMARY KEY(`dict_id`), + CONSTRAINT `pac_index` UNIQUE(`index`) +); +--> statement-breakpoint +CREATE TABLE `pac_core_env` ( + `index` int AUTO_INCREMENT NOT NULL, + `env_id` int NOT NULL, + `pid` int NOT NULL DEFAULT 0, + `env_name` varchar(255) NOT NULL, + `env_key` varchar(255) NOT NULL, + `env_val` varchar(255) NOT NULL, + `val_is_dict` int NOT NULL DEFAULT 0, + `env_desc` varchar(255), + `have_children` int NOT NULL DEFAULT 0, + `own_of_pac` int NOT NULL DEFAULT 0, + `order_num` int NOT NULL DEFAULT 0, + `status` int NOT NULL DEFAULT 0, + `service_of` int NOT NULL DEFAULT 0, + CONSTRAINT `pac_core_env_env_id` PRIMARY KEY(`env_id`), + CONSTRAINT `pac_index` UNIQUE(`index`) +); +--> statement-breakpoint +CREATE TABLE `pac_core_menu` ( + `index` int AUTO_INCREMENT NOT NULL, + `menu_id` int NOT NULL, + `pid` int NOT NULL, + `have_children` int NOT NULL DEFAULT 0, + `api_path` varchar(255) NOT NULL, + `web_path` varchar(255) NOT NULL, + `menu_name` varchar(255) NOT NULL, + `menu_desc` varchar(255), + `menu_type` int NOT NULL DEFAULT 0, + `menu_icon` varchar(255), + `is_frame` int NOT NULL DEFAULT 0, + `is_visible` int NOT NULL DEFAULT 0, + `is_activate` int NOT NULL DEFAULT 0, + `order_num` int NOT NULL, + `status` int NOT NULL DEFAULT 0, + `service_of` int NOT NULL DEFAULT 0, + CONSTRAINT `pac_core_menu_menu_id` PRIMARY KEY(`menu_id`), + CONSTRAINT `pac_index` UNIQUE(`index`) +); +--> statement-breakpoint +CREATE TABLE `pac_core_service` ( + `service_key` varchar(255) NOT NULL, + `service_name` varchar(255) NOT NULL, + `service_version` varchar(255), + `service_desc` varchar(255), + `createby` int NOT NULL, + `createtime` datetime NOT NULL, + `updateby` int, + `updatetime` datetime NOT NULL, + `deleteby` int, + `deletetime` datetime, + CONSTRAINT `pac_core_service_service_key` PRIMARY KEY(`service_key`) +); + +*/ \ No newline at end of file diff --git a/src/entities/customType.ts b/src/entities/customType.ts new file mode 100644 index 0000000..089965d --- /dev/null +++ b/src/entities/customType.ts @@ -0,0 +1,24 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: customType.ts - +// | @创建时间: 2024-06-04 16:27 +// | @更新时间: 2024-06-04 16:27 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ +// 定义自定义类型 +import { customType } from 'drizzle-orm/mysql-core'; + +// 写入度取是将bigint转化为string +export const bigintString = customType<{ data: string }>({ + dataType() { + return 'bigint'; + }, + fromDriver(value) { + return value.toString(); + }, +}); diff --git a/src/entities/meta/0000_snapshot.json b/src/entities/meta/0000_snapshot.json new file mode 100644 index 0000000..422ba62 --- /dev/null +++ b/src/entities/meta/0000_snapshot.json @@ -0,0 +1,1127 @@ +{ + "id": "00000000-0000-0000-0000-000000000000", + "prevId": "", + "version": "5", + "dialect": "mysql", + "tables": { + "pac_auth_dept": { + "name": "pac_auth_dept", + "columns": { + "index": { + "autoincrement": true, + "name": "index", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "dept_id": { + "autoincrement": false, + "name": "dept_id", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "pid": { + "default": 0, + "autoincrement": false, + "name": "pid", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "grade": { + "autoincrement": false, + "name": "grade", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "dept_name": { + "autoincrement": false, + "name": "dept_name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "dept_desc": { + "autoincrement": false, + "name": "dept_desc", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "dept_type": { + "default": 0, + "autoincrement": false, + "name": "dept_type", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "dept_leader": { + "autoincrement": false, + "name": "dept_leader", + "type": "int", + "primaryKey": false, + "notNull": false + }, + "default_role": { + "autoincrement": false, + "name": "default_role", + "type": "int", + "primaryKey": false, + "notNull": false + }, + "order_num": { + "default": 0, + "autoincrement": false, + "name": "order_num", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "status": { + "default": 0, + "autoincrement": false, + "name": "status", + "type": "int", + "primaryKey": false, + "notNull": true + } + }, + "compositePrimaryKeys": { + "pac_auth_dept_dept_id": { + "name": "pac_auth_dept_dept_id", + "columns": [ + "dept_id" + ] + } + }, + "indexes": {}, + "foreignKeys": {}, + "uniqueConstraints": { + "pac_index": { + "name": "pac_index", + "columns": [ + "index" + ] + } + } + }, + "pac_auth_link_role_menu": { + "name": "pac_auth_link_role_menu", + "columns": { + "index": { + "autoincrement": true, + "name": "index", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "role_id": { + "autoincrement": false, + "name": "role_id", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "menu_id": { + "autoincrement": false, + "name": "menu_id", + "type": "int", + "primaryKey": false, + "notNull": true + } + }, + "compositePrimaryKeys": { + "pac_auth_link_role_menu_index": { + "name": "pac_auth_link_role_menu_index", + "columns": [ + "index" + ] + } + }, + "indexes": {}, + "foreignKeys": {}, + "uniqueConstraints": { + "pac_index": { + "name": "pac_index", + "columns": [ + "index" + ] + } + } + }, + "pac_auth_link_user_dept": { + "name": "pac_auth_link_user_dept", + "columns": { + "index": { + "autoincrement": true, + "name": "index", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "autoincrement": false, + "name": "user_id", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "dept_id": { + "autoincrement": false, + "name": "dept_id", + "type": "int", + "primaryKey": false, + "notNull": true + } + }, + "compositePrimaryKeys": { + "pac_auth_link_user_dept_index": { + "name": "pac_auth_link_user_dept_index", + "columns": [ + "index" + ] + } + }, + "indexes": {}, + "foreignKeys": {}, + "uniqueConstraints": { + "pac_index": { + "name": "pac_index", + "columns": [ + "index" + ] + } + } + }, + "pac_auth_link_user_post": { + "name": "pac_auth_link_user_post", + "columns": { + "index": { + "autoincrement": true, + "name": "index", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "autoincrement": false, + "name": "user_id", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "post_id": { + "autoincrement": false, + "name": "post_id", + "type": "int", + "primaryKey": false, + "notNull": true + } + }, + "compositePrimaryKeys": { + "pac_auth_link_user_post_index": { + "name": "pac_auth_link_user_post_index", + "columns": [ + "index" + ] + } + }, + "indexes": {}, + "foreignKeys": {}, + "uniqueConstraints": { + "pac_index": { + "name": "pac_index", + "columns": [ + "index" + ] + } + } + }, + "pac_auth_link_user_role": { + "name": "pac_auth_link_user_role", + "columns": { + "index": { + "autoincrement": true, + "name": "index", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "autoincrement": false, + "name": "user_id", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "role_id": { + "autoincrement": false, + "name": "role_id", + "type": "int", + "primaryKey": false, + "notNull": true + } + }, + "compositePrimaryKeys": { + "pac_auth_link_user_role_index": { + "name": "pac_auth_link_user_role_index", + "columns": [ + "index" + ] + } + }, + "indexes": {}, + "foreignKeys": {}, + "uniqueConstraints": { + "pac_index": { + "name": "pac_index", + "columns": [ + "index" + ] + } + } + }, + "pac_auth_post": { + "name": "pac_auth_post", + "columns": { + "index": { + "autoincrement": true, + "name": "index", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "post_id": { + "autoincrement": false, + "name": "post_id", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "post_key": { + "autoincrement": false, + "name": "post_key", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "post_name": { + "autoincrement": false, + "name": "post_name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "post_desc": { + "autoincrement": false, + "name": "post_desc", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "order_num": { + "default": 0, + "autoincrement": false, + "name": "order_num", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "status": { + "default": 0, + "autoincrement": false, + "name": "status", + "type": "int", + "primaryKey": false, + "notNull": true + } + }, + "compositePrimaryKeys": { + "pac_auth_post_post_id": { + "name": "pac_auth_post_post_id", + "columns": [ + "post_id" + ] + } + }, + "indexes": {}, + "foreignKeys": {}, + "uniqueConstraints": { + "pac_index": { + "name": "pac_index", + "columns": [ + "index" + ] + } + } + }, + "pac_auth_role": { + "name": "pac_auth_role", + "columns": { + "index": { + "autoincrement": false, + "name": "index", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "role_id": { + "autoincrement": false, + "name": "role_id", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "pid": { + "default": 0, + "autoincrement": false, + "name": "pid", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "role_name": { + "autoincrement": false, + "name": "role_name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "role_key": { + "autoincrement": false, + "name": "role_key", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "role_desc": { + "autoincrement": false, + "name": "role_desc", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "role_type": { + "default": 0, + "autoincrement": false, + "name": "role_type", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "role_data_scope": { + "default": 1, + "autoincrement": false, + "name": "role_data_scope", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "own_of_pac": { + "default": 0, + "autoincrement": false, + "name": "own_of_pac", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "order_num": { + "default": 0, + "autoincrement": false, + "name": "order_num", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "status": { + "default": 0, + "autoincrement": false, + "name": "status", + "type": "int", + "primaryKey": false, + "notNull": true + } + }, + "compositePrimaryKeys": { + "pac_auth_role_role_id": { + "name": "pac_auth_role_role_id", + "columns": [ + "role_id" + ] + } + }, + "indexes": {}, + "foreignKeys": {}, + "uniqueConstraints": { + "pac_index": { + "name": "pac_index", + "columns": [ + "index" + ] + } + } + }, + "pac_auth_role_data_scope": { + "name": "pac_auth_role_data_scope", + "columns": { + "index": { + "autoincrement": true, + "name": "index", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "role_id": { + "autoincrement": false, + "name": "role_id", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "dept_id": { + "autoincrement": false, + "name": "dept_id", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "scope_id": { + "autoincrement": false, + "name": "scope_id", + "type": "int", + "primaryKey": false, + "notNull": true + } + }, + "compositePrimaryKeys": { + "pac_auth_role_data_scope_scope_id": { + "name": "pac_auth_role_data_scope_scope_id", + "columns": [ + "scope_id" + ] + } + }, + "indexes": {}, + "foreignKeys": {}, + "uniqueConstraints": { + "pac_index": { + "name": "pac_index", + "columns": [ + "index" + ] + } + } + }, + "pac_auth_user": { + "name": "pac_auth_user", + "columns": { + "index": { + "autoincrement": true, + "name": "index", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "user_id": { + "autoincrement": false, + "name": "user_id", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "username": { + "autoincrement": false, + "name": "username", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "password": { + "autoincrement": false, + "name": "password", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "nickname": { + "autoincrement": false, + "name": "nickname", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "user_type": { + "default": 0, + "autoincrement": false, + "name": "user_type", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "user_email": { + "autoincrement": false, + "name": "user_email", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "pid": { + "default": 0, + "autoincrement": false, + "name": "pid", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "wx_appid": { + "autoincrement": false, + "name": "wx_appid", + "type": "int", + "primaryKey": false, + "notNull": false + }, + "avatar": { + "autoincrement": false, + "name": "avatar", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "user_phone": { + "autoincrement": false, + "name": "user_phone", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "user_desc": { + "autoincrement": false, + "name": "user_desc", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "status": { + "default": 0, + "autoincrement": false, + "name": "status", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "have_children": { + "default": 0, + "autoincrement": false, + "name": "have_children", + "type": "int", + "primaryKey": false, + "notNull": true + } + }, + "compositePrimaryKeys": { + "pac_auth_user_user_id": { + "name": "pac_auth_user_user_id", + "columns": [ + "user_id" + ] + } + }, + "indexes": {}, + "foreignKeys": {}, + "uniqueConstraints": { + "pac_index": { + "name": "pac_index", + "columns": [ + "index" + ] + }, + "username": { + "name": "username", + "columns": [ + "username" + ] + } + } + }, + "pac_core_dict": { + "name": "pac_core_dict", + "columns": { + "index": { + "autoincrement": true, + "name": "index", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "dict_id": { + "autoincrement": false, + "name": "dict_id", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "pid": { + "autoincrement": false, + "name": "pid", + "type": "int", + "primaryKey": false, + "notNull": false + }, + "dict_key": { + "autoincrement": false, + "name": "dict_key", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "dict_desc": { + "autoincrement": false, + "name": "dict_desc", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "dict_name": { + "autoincrement": false, + "name": "dict_name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "dict_icon": { + "default": "''", + "autoincrement": false, + "name": "dict_icon", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "dict_type": { + "autoincrement": false, + "name": "dict_type", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "own_of_pac": { + "default": 0, + "autoincrement": false, + "name": "own_of_pac", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "order_num": { + "default": 0, + "autoincrement": false, + "name": "order_num", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "status": { + "default": 0, + "autoincrement": false, + "name": "status", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "service_of": { + "default": 0, + "autoincrement": false, + "name": "service_of", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "have_children": { + "default": 0, + "autoincrement": false, + "name": "have_children", + "type": "int", + "primaryKey": false, + "notNull": true + } + }, + "compositePrimaryKeys": { + "pac_core_dict_dict_id": { + "name": "pac_core_dict_dict_id", + "columns": [ + "dict_id" + ] + } + }, + "indexes": {}, + "foreignKeys": {}, + "uniqueConstraints": { + "pac_index": { + "name": "pac_index", + "columns": [ + "index" + ] + } + } + }, + "pac_core_env": { + "name": "pac_core_env", + "columns": { + "index": { + "autoincrement": true, + "name": "index", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "env_id": { + "autoincrement": false, + "name": "env_id", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "pid": { + "default": 0, + "autoincrement": false, + "name": "pid", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "env_name": { + "autoincrement": false, + "name": "env_name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "env_key": { + "autoincrement": false, + "name": "env_key", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "env_val": { + "autoincrement": false, + "name": "env_val", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "val_is_dict": { + "default": 0, + "autoincrement": false, + "name": "val_is_dict", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "env_desc": { + "autoincrement": false, + "name": "env_desc", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "have_children": { + "default": 0, + "autoincrement": false, + "name": "have_children", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "own_of_pac": { + "default": 0, + "autoincrement": false, + "name": "own_of_pac", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "order_num": { + "default": 0, + "autoincrement": false, + "name": "order_num", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "status": { + "default": 0, + "autoincrement": false, + "name": "status", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "service_of": { + "default": 0, + "autoincrement": false, + "name": "service_of", + "type": "int", + "primaryKey": false, + "notNull": true + } + }, + "compositePrimaryKeys": { + "pac_core_env_env_id": { + "name": "pac_core_env_env_id", + "columns": [ + "env_id" + ] + } + }, + "indexes": {}, + "foreignKeys": {}, + "uniqueConstraints": { + "pac_index": { + "name": "pac_index", + "columns": [ + "index" + ] + } + } + }, + "pac_core_menu": { + "name": "pac_core_menu", + "columns": { + "index": { + "autoincrement": true, + "name": "index", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "menu_id": { + "autoincrement": false, + "name": "menu_id", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "pid": { + "autoincrement": false, + "name": "pid", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "have_children": { + "default": 0, + "autoincrement": false, + "name": "have_children", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "api_path": { + "autoincrement": false, + "name": "api_path", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "web_path": { + "autoincrement": false, + "name": "web_path", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "menu_name": { + "autoincrement": false, + "name": "menu_name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "menu_desc": { + "autoincrement": false, + "name": "menu_desc", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "menu_type": { + "default": 0, + "autoincrement": false, + "name": "menu_type", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "menu_icon": { + "autoincrement": false, + "name": "menu_icon", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "is_frame": { + "default": 0, + "autoincrement": false, + "name": "is_frame", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "is_visible": { + "default": 0, + "autoincrement": false, + "name": "is_visible", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "is_activate": { + "default": 0, + "autoincrement": false, + "name": "is_activate", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "order_num": { + "autoincrement": false, + "name": "order_num", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "status": { + "default": 0, + "autoincrement": false, + "name": "status", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "service_of": { + "default": 0, + "autoincrement": false, + "name": "service_of", + "type": "int", + "primaryKey": false, + "notNull": true + } + }, + "compositePrimaryKeys": { + "pac_core_menu_menu_id": { + "name": "pac_core_menu_menu_id", + "columns": [ + "menu_id" + ] + } + }, + "indexes": {}, + "foreignKeys": {}, + "uniqueConstraints": { + "pac_index": { + "name": "pac_index", + "columns": [ + "index" + ] + } + } + }, + "pac_core_service": { + "name": "pac_core_service", + "columns": { + "service_key": { + "autoincrement": false, + "name": "service_key", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "service_name": { + "autoincrement": false, + "name": "service_name", + "type": "varchar(255)", + "primaryKey": false, + "notNull": true + }, + "service_version": { + "autoincrement": false, + "name": "service_version", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "service_desc": { + "autoincrement": false, + "name": "service_desc", + "type": "varchar(255)", + "primaryKey": false, + "notNull": false + }, + "createby": { + "autoincrement": false, + "name": "createby", + "type": "int", + "primaryKey": false, + "notNull": true + }, + "createtime": { + "autoincrement": false, + "name": "createtime", + "type": "datetime", + "primaryKey": false, + "notNull": true + }, + "updateby": { + "autoincrement": false, + "name": "updateby", + "type": "int", + "primaryKey": false, + "notNull": false + }, + "updatetime": { + "autoincrement": false, + "name": "updatetime", + "type": "datetime", + "primaryKey": false, + "notNull": true + }, + "deleteby": { + "autoincrement": false, + "name": "deleteby", + "type": "int", + "primaryKey": false, + "notNull": false + }, + "deletetime": { + "autoincrement": false, + "name": "deletetime", + "type": "datetime", + "primaryKey": false, + "notNull": false + } + }, + "compositePrimaryKeys": { + "pac_core_service_service_key": { + "name": "pac_core_service_service_key", + "columns": [ + "service_key" + ] + } + }, + "indexes": {}, + "foreignKeys": {}, + "uniqueConstraints": {} + } + }, + "_meta": { + "schemas": {}, + "tables": {}, + "columns": {} + }, + "internal": { + "tables": {} + } +} \ No newline at end of file diff --git a/src/entities/meta/_journal.json b/src/entities/meta/_journal.json new file mode 100644 index 0000000..c161842 --- /dev/null +++ b/src/entities/meta/_journal.json @@ -0,0 +1,13 @@ +{ + "version": "6", + "dialect": "postgresql", + "entries": [ + { + "idx": 0, + "version": "5", + "when": 1716803133171, + "tag": "0000_productive_zarda", + "breakpoints": true + } + ] +} \ No newline at end of file diff --git a/src/entities/relations.ts b/src/entities/relations.ts new file mode 100644 index 0000000..80768e2 --- /dev/null +++ b/src/entities/relations.ts @@ -0,0 +1,3 @@ +import { relations } from "drizzle-orm/relations"; +import { } from "./schema"; + diff --git a/src/entities/schema.ts b/src/entities/schema.ts new file mode 100644 index 0000000..d791642 --- /dev/null +++ b/src/entities/schema.ts @@ -0,0 +1,342 @@ +import { mysqlTable, mysqlSchema, AnyMySqlColumn, primaryKey, unique, int, varchar, datetime } from 'drizzle-orm/mysql-core'; +import { sql } from 'drizzle-orm'; +import { bigintString } from '@entities/customType'; +const bigint = bigintString; +export const pacAuthDept = mysqlTable( + 'pac_auth_dept', + { + index: int('index').autoincrement().notNull(), + deptId: int('dept_id').notNull(), + pid: int('pid').default(0).notNull(), + grade: int('grade').notNull(), + deptName: varchar('dept_name', { length: 255 }), + deptDesc: varchar('dept_desc', { length: 255 }), + deptType: int('dept_type').default(0).notNull(), + deptLeader: int('dept_leader'), + defaultRole: int('default_role'), + orderNum: int('order_num').default(0).notNull(), + status: int('status').default(0).notNull(), + createby: int('createby').notNull(), + createtime: datetime('createtime', { mode: 'string' }).notNull(), + updateby: int('updateby'), + updatetime: datetime('updatetime', { mode: 'string' }), + deleteby: int('deleteby'), + deletetime: datetime('deletetime', { mode: 'string' }), + }, + (table) => { + return { + pacAuthDeptDeptId: primaryKey({ columns: [table.deptId], name: 'pac_auth_dept_dept_id' }), + pacIndex: unique('pac_index').on(table.index), + }; + }, +); + +export const pacAuthLinkRoleMenu = mysqlTable( + 'pac_auth_link_role_menu', + { + index: int('index').autoincrement().notNull(), + roleId: int('role_id').notNull(), + menuId: int('menu_id').notNull(), + createby: int('createby').notNull(), + createtime: datetime('createtime', { mode: 'string' }).notNull(), + updateby: int('updateby'), + updatetime: datetime('updatetime', { mode: 'string' }), + deleteby: int('deleteby'), + deletetime: datetime('deletetime', { mode: 'string' }), + }, + (table) => { + return { + pacAuthLinkRoleMenuIndex: primaryKey({ columns: [table.index], name: 'pac_auth_link_role_menu_index' }), + pacIndex: unique('pac_index').on(table.index), + }; + }, +); + +export const pacAuthLinkUserDept = mysqlTable( + 'pac_auth_link_user_dept', + { + index: int('index').autoincrement().notNull(), + userId: int('user_id').notNull(), + deptId: int('dept_id').notNull(), + createby: int('createby').notNull(), + createtime: datetime('createtime', { mode: 'string' }).notNull(), + updateby: int('updateby'), + updatetime: datetime('updatetime', { mode: 'string' }), + deleteby: int('deleteby'), + deletetime: datetime('deletetime', { mode: 'string' }), + }, + (table) => { + return { + pacAuthLinkUserDeptIndex: primaryKey({ columns: [table.index], name: 'pac_auth_link_user_dept_index' }), + pacIndex: unique('pac_index').on(table.index), + }; + }, +); + +export const pacAuthLinkUserPost = mysqlTable( + 'pac_auth_link_user_post', + { + index: int('index').autoincrement().notNull(), + userId: int('user_id').notNull(), + postId: int('post_id').notNull(), + createby: int('createby').notNull(), + createtime: datetime('createtime', { mode: 'string' }).notNull(), + updateby: int('updateby'), + updatetime: datetime('updatetime', { mode: 'string' }), + deleteby: int('deleteby'), + deletetime: datetime('deletetime', { mode: 'string' }), + }, + (table) => { + return { + pacAuthLinkUserPostIndex: primaryKey({ columns: [table.index], name: 'pac_auth_link_user_post_index' }), + pacIndex: unique('pac_index').on(table.index), + }; + }, +); + +export const pacAuthLinkUserRole = mysqlTable( + 'pac_auth_link_user_role', + { + index: int('index').autoincrement().notNull(), + userId: int('user_id').notNull(), + roleId: int('role_id').notNull(), + createby: int('createby').notNull(), + createtime: datetime('createtime', { mode: 'string' }).notNull(), + updateby: int('updateby'), + updatetime: datetime('updatetime', { mode: 'string' }), + deleteby: int('deleteby'), + deletetime: datetime('deletetime', { mode: 'string' }), + }, + (table) => { + return { + pacAuthLinkUserRoleIndex: primaryKey({ columns: [table.index], name: 'pac_auth_link_user_role_index' }), + pacIndex: unique('pac_index').on(table.index), + }; + }, +); + +export const pacAuthPost = mysqlTable( + 'pac_auth_post', + { + index: int('index').autoincrement().notNull(), + postId: int('post_id').notNull(), + postKey: varchar('post_key', { length: 255 }).notNull(), + postName: varchar('post_name', { length: 255 }), + postDesc: varchar('post_desc', { length: 255 }), + orderNum: int('order_num').default(0).notNull(), + status: int('status').default(0).notNull(), + createby: int('createby').notNull(), + createtime: datetime('createtime', { mode: 'string' }).notNull(), + updateby: int('updateby'), + updatetime: datetime('updatetime', { mode: 'string' }), + deleteby: int('deleteby'), + deletetime: datetime('deletetime', { mode: 'string' }), + }, + (table) => { + return { + pacAuthPostPostId: primaryKey({ columns: [table.postId], name: 'pac_auth_post_post_id' }), + pacIndex: unique('pac_index').on(table.index), + }; + }, +); + +export const pacAuthRole = mysqlTable( + 'pac_auth_role', + { + index: int('index').notNull(), + roleId: int('role_id').notNull(), + pid: int('pid').default(0).notNull(), + roleName: varchar('role_name', { length: 255 }).notNull(), + roleKey: varchar('role_key', { length: 255 }).notNull(), + roleDesc: varchar('role_desc', { length: 255 }), + roleType: int('role_type').default(0).notNull(), + roleDataScope: int('role_data_scope').default(1).notNull(), + ownOfPac: int('own_of_pac').default(0).notNull(), + orderNum: int('order_num').default(0).notNull(), + status: int('status').default(0).notNull(), + createby: int('createby').notNull(), + createtime: datetime('createtime', { mode: 'string' }).notNull(), + updateby: int('updateby'), + updatetime: datetime('updatetime', { mode: 'string' }), + deleteby: int('deleteby'), + deletetime: datetime('deletetime', { mode: 'string' }), + }, + (table) => { + return { + pacAuthRoleRoleId: primaryKey({ columns: [table.roleId], name: 'pac_auth_role_role_id' }), + pacIndex: unique('pac_index').on(table.index), + }; + }, +); + +export const pacAuthRoleDataScope = mysqlTable( + 'pac_auth_role_data_scope', + { + index: int('index').autoincrement().notNull(), + roleId: int('role_id').notNull(), + deptId: int('dept_id').notNull(), + scopeId: int('scope_id').notNull(), + createby: int('createby').notNull(), + createtime: datetime('createtime', { mode: 'string' }).notNull(), + updateby: int('updateby'), + updatetime: datetime('updatetime', { mode: 'string' }), + deleteby: int('deleteby'), + deletetime: datetime('deletetime', { mode: 'string' }), + }, + (table) => { + return { + pacAuthRoleDataScopeScopeId: primaryKey({ columns: [table.scopeId], name: 'pac_auth_role_data_scope_scope_id' }), + pacIndex: unique('pac_index').on(table.index), + }; + }, +); + +export const pacAuthUser = mysqlTable( + 'pac_auth_user', + { + index: int('index').autoincrement().notNull(), + userId: bigint('user_id', { mode: 'number' }).notNull(), + username: varchar('username', { length: 255 }).notNull(), + password: varchar('password', { length: 255 }).notNull(), + nickname: varchar('nickname', { length: 255 }).notNull(), + userType: int('user_type').default(0).notNull(), + userEmail: varchar('user_email', { length: 255 }), + pid: bigint('pid', { mode: 'number' }).notNull(), + wxAppid: int('wx_appid'), + avatar: varchar('avatar', { length: 255 }), + userPhone: varchar('user_phone', { length: 255 }), + userDesc: varchar('user_desc', { length: 255 }), + status: int('status').default(0).notNull(), + haveChildren: int('have_children').default(0).notNull(), + createby: bigint('createby', { mode: 'number' }).notNull(), + createtime: datetime('createtime', { mode: 'string' }).notNull(), + updateby: bigint('updateby', { mode: 'number' }), + updatetime: datetime('updatetime', { mode: 'string' }), + deleteby: bigint('deleteby', { mode: 'number' }), + deletetime: datetime('deletetime', { mode: 'string' }), + }, + (table) => { + return { + pacAuthUserUserId: primaryKey({ columns: [table.userId], name: 'pac_auth_user_user_id' }), + pacIndex: unique('pac_index').on(table.index), + username: unique('username').on(table.username), + }; + }, +); + +export const pacCoreDict = mysqlTable( + 'pac_core_dict', + { + index: int('index').autoincrement().notNull(), + dictId: bigint('dict_id', { mode: 'number' }).notNull(), + pid: bigint('pid', { mode: 'number', unsigned: true }), + dictKey: varchar('dict_key', { length: 255 }).notNull(), + dictDesc: varchar('dict_desc', { length: 255 }), + dictName: varchar('dict_name', { length: 255 }).notNull(), + dictIcon: varchar('dict_icon', { length: 255 }).default('').notNull(), + dictType: int('dict_type', { unsigned: true }).default(0).notNull(), + ownOfPac: int('own_of_pac', { unsigned: true }).default(0).notNull(), + orderNum: int('order_num', { unsigned: true }).default(0).notNull(), + status: int('status', { unsigned: true }).default(0).notNull(), + serviceOf: varchar('service_of', { length: 255 }).default('').notNull(), + haveChildren: int('have_children').default(0).notNull(), + createby: bigint('createby', { mode: 'number' }).notNull(), + createtime: datetime('createtime', { mode: 'string' }).notNull(), + updateby: bigint('updateby', { mode: 'number' }), + updatetime: datetime('updatetime', { mode: 'string' }), + deleteby: bigint('deleteby', { mode: 'number' }), + deletetime: datetime('deletetime', { mode: 'string' }), + }, + (table) => { + return { + pacCoreDictDictId: primaryKey({ columns: [table.dictId], name: 'pac_core_dict_dict_id' }), + pacIndex: unique('pac_index').on(table.index), + }; + }, +); + +export const pacCoreEnv = mysqlTable( + 'pac_core_env', + { + index: int('index').autoincrement().notNull(), + envId: bigint('env_id', { mode: 'number' }).notNull(), + pid: bigint('pid', { mode: 'number' }).notNull(), + envName: varchar('env_name', { length: 255 }).notNull(), + envKey: varchar('env_key', { length: 255 }).notNull(), + envVal: varchar('env_val', { length: 255 }).notNull(), + valIsDict: int('val_is_dict').default(0).notNull(), + envDesc: varchar('env_desc', { length: 255 }), + haveChildren: int('have_children').default(0).notNull(), + ownOfPac: int('own_of_pac').default(0).notNull(), + orderNum: int('order_num').default(0).notNull(), + status: int('status').default(0).notNull(), + serviceOf: varchar('service_of', { length: 255 }).notNull(), + createby: bigint('createby', { mode: 'number' }).notNull(), + createtime: datetime('createtime', { mode: 'string' }).notNull(), + updateby: bigint('updateby', { mode: 'number' }), + updatetime: datetime('updatetime', { mode: 'string' }), + deleteby: bigint('deleteby', { mode: 'number' }), + deletetime: datetime('deletetime', { mode: 'string' }), + }, + (table) => { + return { + pacCoreEnvEnvId: primaryKey({ columns: [table.envId], name: 'pac_core_env_env_id' }), + pacIndex: unique('pac_index').on(table.index), + }; + }, +); + +export const pacCoreMenu = mysqlTable( + 'pac_core_menu', + { + index: int('index').autoincrement().notNull(), + menuId: bigint('menu_id', { mode: 'number' }).notNull(), + pid: bigint('pid', { mode: 'number' }).notNull(), + haveChildren: int('have_children').default(0).notNull(), + apiPath: varchar('api_path', { length: 255 }).notNull(), + webPath: varchar('web_path', { length: 255 }).notNull(), + menuName: varchar('menu_name', { length: 255 }).notNull(), + menuDesc: varchar('menu_desc', { length: 255 }), + menuType: int('menu_type').default(0).notNull(), + menuIcon: varchar('menu_icon', { length: 255 }), + isFrame: int('is_frame').default(0).notNull(), + isVisible: int('is_visible').default(0).notNull(), + isActivate: int('is_activate').default(0).notNull(), + orderNum: int('order_num').default(0).notNull(), + status: int('status').default(0).notNull(), + serviceOf: varchar('service_of', { length: 255 }).notNull(), + createby: bigint('createby', { mode: 'number' }).notNull(), + createtime: datetime('createtime', { mode: 'string' }).notNull(), + updateby: bigint('updateby', { mode: 'number' }), + updatetime: datetime('updatetime', { mode: 'string' }), + deleteby: bigint('deleteby', { mode: 'number' }), + deletetime: datetime('deletetime', { mode: 'string' }), + }, + (table) => { + return { + pacCoreMenuMenuId: primaryKey({ columns: [table.menuId], name: 'pac_core_menu_menu_id' }), + pacIndex: unique('pac_index').on(table.index), + }; + }, +); + +export const pacCoreService = mysqlTable( + 'pac_core_service', + { + serviceKey: varchar('service_key', { length: 255 }).notNull(), + serviceName: varchar('service_name', { length: 255 }).notNull(), + serviceVersion: varchar('service_version', { length: 255 }), + serviceDesc: varchar('service_desc', { length: 255 }), + createby: int('createby').notNull(), + createtime: datetime('createtime', { mode: 'string' }).notNull(), + updateby: int('updateby'), + updatetime: datetime('updatetime', { mode: 'string' }), + deleteby: int('deleteby'), + deletetime: datetime('deletetime', { mode: 'string' }), + }, + (table) => { + return { + pacCoreServiceServiceKey: primaryKey({ columns: [table.serviceKey], name: 'pac_core_service_service_key' }), + }; + }, +); diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..f5d7500 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,87 @@ +// # nestjs核心框架 +import { NestFactory } from '@nestjs/core'; + +/** + * FastifyAdapter: 将 NestJS 与 Fastify 的请求处理管道相连接。 + * 将Fastify 作为 NestJS 应用程序的底层 HTTP 服务器。FastifyAdapter 提供了一个桥梁,使得 NestJS 能够理解并利用 Fastify 的特性。 + * NestFastifyApplication: 一个接口 + * 扩展了 NestJS 的 INestApplication 接口,以添加 Fastify 特有的功能: 使用 Fastify 的中间件系统, 利用 Fastify 的 schema 验证功能, 使用 Fastify 的日志系统。 + * */ +import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify'; + +// # 程序入口文件 +import { AppModule } from '@app/app.module'; + +// # 配置服务: 来源于AppModule导入的configuration +import { ConfigService } from '@nestjs/config'; + +// # 日志服务 +import { LoggerService } from '@service/logger/logger.service'; + +// # 使用swagger +import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'; +import { LogRequestInfoInterceptor } from '@common/interceptor/log-request-info/log-request-info.interceptor'; +import { ValidationPipe } from '@nestjs/common'; +import { FormatResponseInterceptor } from '@common/interceptor/format-response/format-response.interceptor'; +import { HttpExceptFilter } from '@common/http-except/http-except.filter'; + +async function bootstrap() { + const app = await NestFactory.create( + AppModule, + new FastifyAdapter({ + logger: false, + }), + ); + + // 全局开启参数验证--需要安装class-validator 又依赖 class-transformer, 开启了参数转换 + app.useGlobalPipes( + new ValidationPipe({ + transform: true, + transformOptions: { + enableImplicitConversion: true, + }, + }), + ); + + // 全局统一响应 + app.useGlobalInterceptors(new FormatResponseInterceptor()); + + // 全局错误拦截 + const httpExceptFilter: HttpExceptFilter = app.get(HttpExceptFilter); + app.useGlobalFilters(httpExceptFilter); + + // 从全局获取配置文件模块 + const config = app.get(ConfigService); + + // 获取日志模块 + const logger = app.get(LoggerService); + + // console.log(config); + + // 开发环境 + if (config.get('env') === 'development') { + // 在开发环境下,开启openAPI + SwaggerModule.setup( + config.get('swagger.path'), + app, + SwaggerModule.createDocument( + app, + new DocumentBuilder() + .setTitle(config.get('main.title')) + .setDescription(config.get('main.description')) + .setVersion(config.get('main.version')) + .addTag('ROOT') + .build(), + ), + ); + logger.debug(`Swagger Started: http://localhost:${config.get('main.port')}/${config.get('swagger.path')}`); + + // 在开发环境下,记录请求日志 + + app.useGlobalInterceptors(new LogRequestInfoInterceptor(logger)); + logger.debug('LogRequestInfoInterceptor Started'); + } + + await app.listen(config.get('main.port'), config.get('main.host')); +} +bootstrap(); diff --git a/src/service/logger/logger.service.spec.ts b/src/service/logger/logger.service.spec.ts new file mode 100644 index 0000000..93da482 --- /dev/null +++ b/src/service/logger/logger.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { LoggerService } from './logger.service'; + +describe('LoggerService', () => { + let service: LoggerService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [LoggerService], + }).compile(); + + service = module.get(LoggerService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/service/logger/logger.service.ts b/src/service/logger/logger.service.ts new file mode 100644 index 0000000..dadf34a --- /dev/null +++ b/src/service/logger/logger.service.ts @@ -0,0 +1,145 @@ +import { Injectable } from '@nestjs/common'; +import { ConfigService } from '@nestjs/config'; +import * as winston from 'winston'; +import * as DailyRotateFile from 'winston-daily-rotate-file'; +import * as colors from 'colors'; + +@Injectable() +export class LoggerService { + constructor(private readonly configService: ConfigService) { + // winston.addColors(this.myCustomLevels.colors); + } + + // 自定义日志等级和颜色 + + private readonly myCustomLevels = { + levels: { + fatal: 0, + error: 1, + warn: 2, + info: 3, + debug: 4, + trace: 5, + }, + colors: { + fatal: colors.red.bgYellow, + error: colors.red, + warn: colors.yellow, + info: colors.green, + debug: colors.cyan, + trace: colors.gray, + }, + }; + private readonly colorLevel = (level, value = null) => { + const colorizer = this.myCustomLevels.colors[level]; + if (colorizer) { + return !value ? colorizer.bold(`${level.toUpperCase().padStart(6, ' ')}`) : colorizer(value); + } else { + return value ? value : level; + } + }; + + // 创建一个 Winston 的 Logger 实例 + private readonly logger: winston.Logger = winston.createLogger({ + // 设置日志级别 + level: this.configService.get('logger.level'), + + // 设置自定义日志级别 + levels: this.myCustomLevels.levels, + + // 添加日志传输 + transports: [ + // 在控制台显示的日志 + new winston.transports.Console({ + format: winston.format.combine( + winston.format.timestamp({ + format: 'YYYY/MM/DD HH:mm:ss', + }), + winston.format.printf( + (info) => + `${colors.green(`[Nest] ${process.pid} -`)} ${info.timestamp} ${this.colorLevel(info.level)} ${colors.bgGreen(' ')} ${info.message}`, + ), + ), + }), + + // 创建一个日志传输类,用于每日轮转文件 + new DailyRotateFile({ + // 日志文件名格式 + filename: 'logs/%DATE%.log', + + // 日志文件名中的日期格式 + datePattern: 'YYYY-MM-DD', + + // 是否将旧的日志文件压缩 + zippedArchive: true, + + // 日志文件的最大大小 + maxSize: '20m', + + // 保留日志文件的最大天数 + maxFiles: '14d', + + // 为日志添加时间戳, 以 JSON 格式记录日志 + format: winston.format.combine( + winston.format.timestamp({ + format: 'YYYY-MM-DD HH:mm:ss', + }), + winston.format.printf((info) => `${info.timestamp} [${info.level.toUpperCase().padEnd(5, '')}] ${info.message}`), + ), + }), + + // 创建一个记录错误以上级别的日志 + new DailyRotateFile({ + level: 'error', + + // 日志文件名格式 + filename: 'logs/error-%DATE%.log', + + // 日志文件名中的日期格式 + datePattern: 'YYYY-MM-DD', + + // 是否将旧的日志文件压缩 + zippedArchive: true, + + // 日志文件的最大大小 + maxSize: '20m', + + // 保留日志文件的最大天数 + maxFiles: '365d', + + // 为日志添加时间戳, 以 JSON 格式记录日志 + format: winston.format.combine(winston.format.timestamp(), winston.format.json()), + }), + ], + + // 错误日志级别的传输,仅用于错误日志 + exceptionHandlers: [ + new DailyRotateFile({ + filename: 'logs/exception-%DATE%.log', + datePattern: 'YYYY-MM-DD', + zippedArchive: true, + maxSize: '20m', + maxFiles: '365d', + format: winston.format.combine(winston.format.timestamp(), winston.format.json()), + }), + ], + }); + fatal(...args: [string | number | boolean]) { + this.logger.log('fatal', args.join(',')); + } + error(...args) { + this.logger.error(args); + } + warn(...args) { + this.logger.warn(args); + } + info(...args) { + this.logger.info(args); + } + debug(...args) { + this.logger.debug(args); + } + trace(...args: [string | number | boolean]) { + this.logger.log('trace', args.join(',')); + } +} diff --git a/src/service/snowflake/snowflake.service.spec.ts b/src/service/snowflake/snowflake.service.spec.ts new file mode 100644 index 0000000..192d7a2 --- /dev/null +++ b/src/service/snowflake/snowflake.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { SnowflakeService } from './snowflake.service'; + +describe('SnowflakeService', () => { + let service: SnowflakeService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [SnowflakeService], + }).compile(); + + service = module.get(SnowflakeService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/service/snowflake/snowflake.service.ts b/src/service/snowflake/snowflake.service.ts new file mode 100644 index 0000000..8592c41 --- /dev/null +++ b/src/service/snowflake/snowflake.service.ts @@ -0,0 +1,74 @@ +import { Injectable } from '@nestjs/common'; +import { generateMachineId } from '@utils/generateMachineId'; + +@Injectable() +export class Snowflake { + // 1位:符号位,始终为0,因为ID是正数。 + // 41位:用于时间戳,表示自某个特定时间(例如Twitter的Snowflake算法中是2010-11-04 00:00:00 UTC)以来的毫秒数。 + // 10位:序列号,用于同一毫秒内生成的多个ID。 + // 12位:机器ID或数据中心ID,用于区分不同的机器或数据中心。 + + // Twitter的起始时间点1288834974657 ?19991107是 941932800n + private static readonly EPOC: bigint = 1288834974657n; + + // 时间戳位 + private static readonly MAX_TIMESTAMP: number = 41; + + // 机器ID位 + private static readonly MAX_MACHINE_ID: bigint = 10n; + + // 序列号位 + private static readonly MAX_SEQUENCE: bigint = 12n; + + // 机器ID掩码 + private static readonly MACHINE_ID_MASK: bigint = (1n << Snowflake.MAX_MACHINE_ID) - 1n; + + // 序列号掩码 + private static readonly SEQUENCE_MASK: bigint = (1n << Snowflake.MAX_SEQUENCE) - 1n; + + // 当前机器的ID + private machineId: bigint; + + // 序列号 + private sequence: bigint = 0n; + + // 上一次生成ID的时间戳 + private lastTimestamp: bigint = 0n; + + constructor() { + const machineId: bigint = BigInt(generateMachineId()); + if (machineId < 0 || machineId > Snowflake.MACHINE_ID_MASK) { + throw new Error('Machine ID must be between 0 and ' + Snowflake.MACHINE_ID_MASK.toString()); + } + console.log(machineId); + this.machineId = BigInt(machineId); + } + + public async generate(): Promise { + const timestamp: bigint = BigInt(Date.now() - Number(Snowflake.EPOC)); + + if (timestamp < this.lastTimestamp) { + throw new Error('Clock is moving backwards. Refusing to generate id for ' + (this.lastTimestamp - timestamp) + ' milliseconds'); + } + + if (this.lastTimestamp === timestamp) { + this.sequence = (this.sequence + 1n) & Snowflake.SEQUENCE_MASK; + if (this.sequence === 0n) { + const waitNextMs = Number(timestamp + 1n - BigInt(Date.now() - Number(Snowflake.EPOC))); + if (waitNextMs > 0) { + await this.sleep(waitNextMs); + } + } + } else { + this.sequence = 0n; + } + + this.lastTimestamp = timestamp; + + return timestamp << BigInt(Snowflake.MAX_MACHINE_ID + Snowflake.MAX_SEQUENCE) | this.machineId << BigInt(Snowflake.MAX_SEQUENCE) | this.sequence; + } + + private async sleep(ms: number): Promise { + return new Promise((resolve) => setTimeout(resolve, ms)); + } +} diff --git a/src/utils/boolean.enum.ts b/src/utils/boolean.enum.ts new file mode 100644 index 0000000..939a759 --- /dev/null +++ b/src/utils/boolean.enum.ts @@ -0,0 +1,40 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: boolean.enum.ts - +// | @创建时间: 2024-06-05 09:37 +// | @更新时间: 2024-06-05 09:37 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +// 定义正确和错误的枚举 +export enum BooleanEnum { + YES = 'yes', + NO = 'no', + no = 'NO', + yes = 'YES', + TRUE = 'true', + FALSE = 'false', + n1 = '1', + n0 = '0', +} + +// 定义正确或错误 +export const booleanType = { + yes: ['YES', 'yes', 'true', true, 1, '1'], + no: ['no', 'NO', 'false', false, 0, '0'], +}; + +// 判断是否是正确的枚举 +export function isTrueEnum(target) { + return booleanType.yes.includes(target); +} + +// 判断是否存在目标值 +export function isExistKey(target, key) { + return Object.keys(target).includes(key) && target[key] !== undefined && target[key] !== null && target[key] != ''; +} diff --git a/src/utils/customDrizzleRowWithRecursive.ts b/src/utils/customDrizzleRowWithRecursive.ts new file mode 100644 index 0000000..98bfae1 --- /dev/null +++ b/src/utils/customDrizzleRowWithRecursive.ts @@ -0,0 +1,32 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: customDrizzleRow.ts - +// | @创建时间: 2024-06-05 16:46 +// | @更新时间: 2024-06-05 16:46 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +import { sql } from 'drizzle-orm'; + + +// 将递归查询的自定义列明返回,数据来源于要查的列命,并增加level字段 +export function customDrizzleRowWithRecursive(obj) { + // ! 获取所有的列别名 + const rowNameList = [...Object.keys(obj), 'level']; + + // ! 制造drizzle专属的列名称 + const rowName = sql.empty(); + rowNameList.forEach((i, index) => { + rowName.append(sql`${sql.raw(i)}`); + if (index < rowNameList.length - 1) { + rowName.append(sql`, `); + } + }); + + return rowName; +} diff --git a/src/utils/extractBits.ts b/src/utils/extractBits.ts new file mode 100644 index 0000000..2158e6c --- /dev/null +++ b/src/utils/extractBits.ts @@ -0,0 +1,25 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: extractBits.ts - +// | @创建时间: 2024-06-14 10:51 +// | @更新时间: 2024-06-14 10:51 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +// 提取二进制指定长度位的数字 + +export default function extractBits(value, start: bigint = 0n) { + // 创建一个掩码,用于保留后10位 + const mask: bigint = (1n << 10n) - 1n; + return (value >> start) & mask; +} + +// // 示例使用 +// const bigIntValue = 0x12345678901234567890n; // 一个大的BigInt值 +// const extractedBits = extractBits(bigIntValue, 40); // 从第40位开始提取10个二进制位 +// console.log(extractedBits.toString(2)); // 以二进制形式输出提取的位 diff --git a/src/utils/formatBytes.ts b/src/utils/formatBytes.ts new file mode 100644 index 0000000..840a154 --- /dev/null +++ b/src/utils/formatBytes.ts @@ -0,0 +1,35 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: filesize.ts - +// | @创建时间: 2024-05-11 11:57 +// | @更新时间: 2024-05-11 11:57 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ +import * as colors from 'colors'; +export default function formatBytes(bytes: number | string, decimals: number = 3): string { + // 检查 bytes 参数是否为字符串,且字符串内容是否全部是数字 + if (typeof bytes === 'string' && !isNaN(bytes as any)) { + // 如果字符串是数字,转换为数值 + bytes = parseFloat(bytes); + } else if (typeof bytes !== 'number') { + // 如果 bytes 不是数字或有效的数字字符串,则返回提示 + return colors.bold.cyan('-O^O-'); + } + + if (bytes === 0) { + return colors.bold.cyan('0 Bytes'); + } + + const k = 1024; + const dm = decimals < 0 ? 0 : decimals; + const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + + const i = Math.floor(Math.log(bytes) / Math.log(k)); + + return colors.bold.cyan(parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]); +} diff --git a/src/utils/generateMachineId.ts b/src/utils/generateMachineId.ts new file mode 100644 index 0000000..067b64b --- /dev/null +++ b/src/utils/generateMachineId.ts @@ -0,0 +1,64 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: generateMachineId.ts - +// | @创建时间: 2024-05-31 20:16 +// | @更新时间: 2024-05-31 20:16 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +import * as os from 'node:os'; +import * as crypto from 'node:crypto'; +import extractBits from '@utils/extractBits'; + +export function generateMachineId() { + // 获取网络接口信息 + const networkInterfaces = os.networkInterfaces(); + let interfaceDetails = ''; + const ipList = []; + + // 遍历所有网络接口 + for (const ifaceName of Object.keys(networkInterfaces)) { + // 获取每个接口下的详细信息 + const iface = networkInterfaces[ifaceName]; + for (const details of iface) { + // 如果接口是活动的,并且不是内部或回环接口,那么将它的地址添加到interfaceDetails中 + if (details.internal === false && details.family === 'IPv4' && !details.address.startsWith('127.0.')) { + interfaceDetails += details.address; + ipList.push(details.address); + } + } + } + + // 获取CPU信息,这里使用了第一个CPU核心的模型和速度 + const cpuInfo = os.cpus()[0].model + os.cpus()[0].speed; + + // 获取系统字节序信息('LE'代表小端序,'BE'代表大端序) + const systemInfo = os.endianness(); + + // 将CPU信息、系统信息和网络接口信息拼接起来 + const dataToHash = cpuInfo + systemInfo + interfaceDetails; + + // 创建一个SHA-256哈希对象 + const hash = crypto.createHash('sha256'); + + // 更新哈希对象的内容 + hash.update(dataToHash); + + // 生成哈希值的十六进制表示 + const machineId = hash.digest('hex'); + + const index = ipList.findIndex((ip) => { + return ip.split('.')[0] !== '172'; + }); + if (index > -1) { + return ipList[index].split('.').slice(-1)[0]; + } else { + // 返回机器ID + return extractBits(BigInt('0x' + machineId)); + } +} diff --git a/src/utils/likeQuery.ts b/src/utils/likeQuery.ts new file mode 100644 index 0000000..ae657cf --- /dev/null +++ b/src/utils/likeQuery.ts @@ -0,0 +1,16 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: likeQuery.ts - +// | @创建时间: 2024-05-28 19:56 +// | @更新时间: 2024-05-28 19:56 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +export function likeQuery(data) { + return `%${data}%`; +} diff --git a/src/utils/mathodColor.ts b/src/utils/mathodColor.ts new file mode 100644 index 0000000..11ce3b0 --- /dev/null +++ b/src/utils/mathodColor.ts @@ -0,0 +1,69 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: mathodColor.ts - +// | @创建时间: 2024-05-11 14:00 +// | @更新时间: 2024-05-11 14:00 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +import * as colors from 'colors'; + +/*enum MethodColor { + GET = 'cyan', // 青色 + POST = 'green', // 绿色 + PUT = 'yellow', // 黄色 + DELETE = 'red', // 红色 + PATCH = 'magenta', // 紫色 + ALL = 'blue', // 蓝色 + OPTIONS = 'grey', // 灰色 + SEARCH = 'white', // 白色 +}*/ + +// eslint-disable-next-line no-shadow +enum Method { + GET = 'GET', + POST = 'POST', + PUT = 'PUT', + DELETE = 'DELETE', + PATCH = 'PATCH', + ALL = 'ALL', + OPTIONS = 'OPTIONS', + SEARCH = 'SEARCH', +} + +export default function mathodColor(method: string | Method) { + switch (method) { + case Method.GET: { + return colors.cyan.bold(method); + } + case Method.POST: { + return colors.green.bold(method); + } + case Method.PUT: { + return colors.yellow.bold(method); + } + case Method.DELETE: { + return colors.red.bold(method); + } + case Method.PATCH: { + return colors.magenta.bold(method); + } + case Method.ALL: { + return colors.blue.bold(method); + } + case Method.OPTIONS: { + return colors.gray.bold(method); + } + case Method.SEARCH: { + return colors.white.bold(method); + } + default: { + return method; + } + } +} diff --git a/src/utils/myType.d.ts b/src/utils/myType.d.ts new file mode 100644 index 0000000..068591c --- /dev/null +++ b/src/utils/myType.d.ts @@ -0,0 +1,17 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: myType.d.ts - +// | @创建时间: 2024-05-28 15:38 +// | @更新时间: 2024-05-28 15:38 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +export interface PacInfoType { + username: string; + userId: number; +} diff --git a/src/utils/random.ts b/src/utils/random.ts new file mode 100644 index 0000000..7b57a15 --- /dev/null +++ b/src/utils/random.ts @@ -0,0 +1,36 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: random.ts - +// | @创建时间: 2024-05-28 18:08 +// | @更新时间: 2024-05-28 18:08 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +import * as crypto from 'node:crypto'; + +// 生成随机的指定长度的HEX +export function randomHEX(length = 8) { + return crypto.randomBytes(length).toString('hex').toUpperCase(); +} + +// 生成指定位数的随机数 +export function randomBitNumber(length) { + const randomNumber = Math.floor(Math.random() * Math.pow(2, length)); + return randomNumber; +} + +// 生成指定长度的随机数,并在前面补0 +export function paddedRandomNumber(length) { + const randomNumber = Math.floor(Math.random() * Math.pow(10, length)).toString(); + return randomNumber.padStart(length, '0'); +} + +// 生成[min, max]范围内的随机整数 +export function randomRangeNumber(min, max) { + return Math.floor(Math.random() * (max - min + 1)) + min; +} diff --git a/src/utils/sleep.ts b/src/utils/sleep.ts new file mode 100644 index 0000000..d6b64d1 --- /dev/null +++ b/src/utils/sleep.ts @@ -0,0 +1,20 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: sleep.ts - +// | @创建时间: 2024-05-31 14:03 +// | @更新时间: 2024-05-31 14:03 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +export default async function sleep(time: number) { + return new Promise((res) => { + setTimeout(() => { + res(undefined); + }, time); + }); +} diff --git a/test/app.e2e-spec.ts b/test/app.e2e-spec.ts new file mode 100644 index 0000000..4d26f6b --- /dev/null +++ b/test/app.e2e-spec.ts @@ -0,0 +1,21 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { INestApplication } from '@nestjs/common'; +import * as request from 'supertest'; +import { AppModule } from './../src/app.module'; + +describe('AppController (e2e)', () => { + let app: INestApplication; + + beforeEach(async () => { + const moduleFixture: TestingModule = await Test.createTestingModule({ + imports: [AppModule], + }).compile(); + + app = moduleFixture.createNestApplication(); + await app.init(); + }); + + it('/ (GET)', () => { + return request(app.getHttpServer()).get('/').expect(200).expect('Hello World!'); + }); +}); diff --git a/test/index.html b/test/index.html new file mode 100644 index 0000000..a169372 --- /dev/null +++ b/test/index.html @@ -0,0 +1,10 @@ + + + + + Title + + + + + diff --git a/test/jest-e2e.json b/test/jest-e2e.json new file mode 100644 index 0000000..e9d912f --- /dev/null +++ b/test/jest-e2e.json @@ -0,0 +1,9 @@ +{ + "moduleFileExtensions": ["js", "json", "ts"], + "rootDir": ".", + "testEnvironment": "node", + "testRegex": ".e2e-spec.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + } +} diff --git a/test/testsend.js b/test/testsend.js new file mode 100644 index 0000000..16e204a --- /dev/null +++ b/test/testsend.js @@ -0,0 +1,45 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: testsend.js - +// | @创建时间: 2024-05-14 18:18 +// | @更新时间: 2024-05-14 18:18 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +import * as nodemailer from 'nodemailer'; +const transporter = nodemailer.createTransport({ + //node_modules/nodemailer/lib/well-known/services.json 查看相关的配置,如果使用qq邮箱,就查看qq邮箱的相关配置 + + host: 'smtp.qq.com', + + // secureConnection:true, + service: 'qq', //类型qq邮箱 + // port: 465, + secure: true, // true for 465, false for other ports + auth: { + user: 'togy.gc@qq.com', // 发送方的邮箱 + pass: 'iampaqukfwnxdhfd', // smtp 的授权码 + }, + + //pass 不是邮箱账户的密码而是stmp的授权码(必须是相应邮箱的stmp授权码) + //邮箱---设置--账户--POP3/SMTP服务---开启---获取stmp授权码 +}); +const mailOptions = { + from: '"TOGY | 心曲Tune" ', // 发送方 + to: 'xsax@qqqq.com', //接收者邮箱,多个邮箱用逗号间隔 + subject: 'ABC', // 标题 + text: 'Hello world?', // 文本内容 + html: 'xsxsx', +}; +transporter.sendMail(mailOptions, (error, info) => { + if (error) { + console.log(error); + } else { + console.log('OK'); //因为是异步 所有需要回调函数通知成功结果 + } +}); diff --git a/test/测试奇怪的函数调用.js b/test/测试奇怪的函数调用.js new file mode 100644 index 0000000..96857ce --- /dev/null +++ b/test/测试奇怪的函数调用.js @@ -0,0 +1,18 @@ +// | ------------------------------------------------------------ +// | @版本: version 0.1 +// | @创建人: 【Nie-x7129】 +// | @E-mail: x71291@outlook.com +// | @所在项目: pac-auth +// | @文件描述: 测试奇怪的函数调用.js - +// | @创建时间: 2024-05-30 15:02 +// | @更新时间: 2024-05-30 15:02 +// | @修改记录: +// | -*-*-*- (时间--修改人--修改说明) -*-*-*- +// | = +// | ------------------------------------------------------------ + +function test(a, ...params) { + console.log(a); +} + +test`xsx`; diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..64f86c6 --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..5c645a4 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "target": "ES2021", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "paths": { + "@/*": ["src/*"], + "@common/*": ["src/common/*"], + "@config/*": ["src/config/*"], + "@utils/*": ["src/utils/*"], + "@service/*": ["src/service/*"], + "@app/*": ["src/application/*"], + "@dto/*": ["src/dto/*"], + "@entities/*": ["src/entities/*"] + }, + "incremental": true, + "skipLibCheck": true, + "strictNullChecks": false, + "noImplicitAny": false, + "strictBindCallApply": false, + "forceConsistentCasingInFileNames": false, + "noFallthroughCasesInSwitch": false + } +}