From e04c9f940707661fd0a6bf48edc2773562f2d9cb Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 00:02:04 +0000 Subject: [PATCH 001/188] Setting up GitHub Classroom Feedback From dfa5d446713a118aa077520173c1a3d5b2770ad8 Mon Sep 17 00:00:00 2001 From: "github-classroom[bot]" <66690702+github-classroom[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 00:02:06 +0000 Subject: [PATCH 002/188] add deadline --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 259f7bba2e..5ddee1cbf1 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-22041afd0340ce965d47ae6ef1cefeee28c7c493a6346c4f15d667ab976d596c.svg)](https://classroom.github.com/a/bzPrOe11) # CS3219 Project (PeerPrep) - AY2425S1 ## Group: Gxx From 0bd9eaa6e161dd037ff0c0ba6030b294dff8c258 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Thu, 12 Sep 2024 12:58:55 +0800 Subject: [PATCH 003/188] Initialize frontend --- docker-compose.yml | 12 + frontend/.editorconfig | 16 + frontend/.gitignore | 38 + frontend/.vscode/extensions.json | 4 + frontend/.vscode/launch.json | 20 + frontend/.vscode/tasks.json | 42 + frontend/Dockerfile | 10 + frontend/README.md | 27 + frontend/angular.json | 110 + frontend/package-lock.json | 14403 +++++++++++++++++++++++ frontend/package.json | 39 + frontend/public/favicon.ico | Bin 0 -> 15086 bytes frontend/src/app/app.component.css | 0 frontend/src/app/app.component.html | 336 + frontend/src/app/app.component.spec.ts | 29 + frontend/src/app/app.component.ts | 13 + frontend/src/app/app.config.ts | 8 + frontend/src/app/app.routes.ts | 3 + frontend/src/index.html | 13 + frontend/src/main.ts | 6 + frontend/src/styles.css | 1 + frontend/tsconfig.app.json | 15 + frontend/tsconfig.json | 33 + frontend/tsconfig.spec.json | 15 + package-lock.json | 6 + package.json | 1 + 26 files changed, 15200 insertions(+) create mode 100644 docker-compose.yml create mode 100644 frontend/.editorconfig create mode 100644 frontend/.gitignore create mode 100644 frontend/.vscode/extensions.json create mode 100644 frontend/.vscode/launch.json create mode 100644 frontend/.vscode/tasks.json create mode 100644 frontend/Dockerfile create mode 100644 frontend/README.md create mode 100644 frontend/angular.json create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 frontend/public/favicon.ico create mode 100644 frontend/src/app/app.component.css create mode 100644 frontend/src/app/app.component.html create mode 100644 frontend/src/app/app.component.spec.ts create mode 100644 frontend/src/app/app.component.ts create mode 100644 frontend/src/app/app.config.ts create mode 100644 frontend/src/app/app.routes.ts create mode 100644 frontend/src/index.html create mode 100644 frontend/src/main.ts create mode 100644 frontend/src/styles.css create mode 100644 frontend/tsconfig.app.json create mode 100644 frontend/tsconfig.json create mode 100644 frontend/tsconfig.spec.json create mode 100644 package-lock.json create mode 100644 package.json diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000000..b4b85facec --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,12 @@ +services: + frontend: + container_name: frontend + image: frontend + build: + context: frontend + dockerfile: Dockerfile + ports: + - 4200:4200 + volumes: + - /app/node_modules + - ./frontend:/app diff --git a/frontend/.editorconfig b/frontend/.editorconfig new file mode 100644 index 0000000000..59d9a3a3e7 --- /dev/null +++ b/frontend/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000000..01b964a377 --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,38 @@ +# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/frontend/.vscode/extensions.json b/frontend/.vscode/extensions.json new file mode 100644 index 0000000000..77b374577d --- /dev/null +++ b/frontend/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 + "recommendations": ["angular.ng-template"] +} diff --git a/frontend/.vscode/launch.json b/frontend/.vscode/launch.json new file mode 100644 index 0000000000..925af83705 --- /dev/null +++ b/frontend/.vscode/launch.json @@ -0,0 +1,20 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "ng serve", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: start", + "url": "http://localhost:4200/" + }, + { + "name": "ng test", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: test", + "url": "http://localhost:9876/debug.html" + } + ] +} diff --git a/frontend/.vscode/tasks.json b/frontend/.vscode/tasks.json new file mode 100644 index 0000000000..a298b5bd87 --- /dev/null +++ b/frontend/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "start", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + }, + { + "type": "npm", + "script": "test", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + } + ] +} diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000000..2e118dc938 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,10 @@ +FROM node:20-alpine + +WORKDIR /app +COPY package.json package-lock.json ./ +RUN npm install +RUN npm install -g @angular/cli@18.0.0 +COPY . . +EXPOSE 4200 + +CMD ["ng", "serve", "--host", "0.0.0.0"] diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000000..0e7c31dba6 --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,27 @@ +# Frontend + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.2. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page. diff --git a/frontend/angular.json b/frontend/angular.json new file mode 100644 index 0000000000..8a74d05cee --- /dev/null +++ b/frontend/angular.json @@ -0,0 +1,110 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "frontend": { + "projectType": "application", + "schematics": {}, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:application", + "options": { + "outputPath": "dist/frontend", + "index": "src/index.html", + "browser": "src/main.ts", + "polyfills": [ + "zone.js" + ], + "tsConfig": "tsconfig.app.json", + "assets": [ + { + "glob": "**/*", + "input": "public" + } + ], + "styles": [ + "src/styles.css" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kB", + "maximumError": "1MB" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kB", + "maximumError": "4kB" + } + ], + "outputHashing": "all" + }, + "development": { + "optimization": false, + "extractLicenses": false, + "sourceMap": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "buildTarget": "frontend:build:production" + }, + "development": { + "buildTarget": "frontend:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n" + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "tsConfig": "tsconfig.spec.json", + "assets": [ + { + "glob": "**/*", + "input": "public" + } + ], + "styles": [ + "src/styles.css" + ], + "scripts": [] + } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "src/**/*.ts", + "src/**/*.html" + ] + } + } + } + } + }, + "cli": { + "schematicCollections": [ + "@angular-eslint/schematics" + ] + } +} diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000000..b100b0bf4f --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,14403 @@ +{ + "name": "frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^18.2.0", + "@angular/common": "^18.2.0", + "@angular/compiler": "^18.2.0", + "@angular/core": "^18.2.0", + "@angular/forms": "^18.2.0", + "@angular/platform-browser": "^18.2.0", + "@angular/platform-browser-dynamic": "^18.2.0", + "@angular/router": "^18.2.0", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.10" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^18.2.2", + "@angular/cli": "^18.2.2", + "@angular/compiler-cli": "^18.2.0", + "@types/jasmine": "~5.1.0", + "jasmine-core": "~5.2.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.5.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1802.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.4.tgz", + "integrity": "sha512-VH7AwGng1zuWPTJoH1IgHYeNhqZIgzlwDx39JPmArZAW/WZHDILWB7ipbTNw0R4U4VncrXJqDmMVex7NdHP6sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.2.4", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.4.tgz", + "integrity": "sha512-zLDstS95Yb7iBA1ZCYe3LsOLpIhr0ZC3sZ03PhVvAGbVRGSbQNnhQRZLKMk+LDhYJiG+eNFQGLfU3RfZrGds7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1802.4", + "@angular-devkit/build-webpack": "0.1802.4", + "@angular-devkit/core": "18.2.4", + "@angular/build": "18.2.4", + "@babel/core": "7.25.2", + "@babel/generator": "7.25.0", + "@babel/helper-annotate-as-pure": "7.24.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-transform-async-generator-functions": "7.25.0", + "@babel/plugin-transform-async-to-generator": "7.24.7", + "@babel/plugin-transform-runtime": "7.24.7", + "@babel/preset-env": "7.25.3", + "@babel/runtime": "7.25.0", + "@discoveryjs/json-ext": "0.6.1", + "@ngtools/webpack": "18.2.4", + "@vitejs/plugin-basic-ssl": "1.1.0", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.20", + "babel-loader": "9.1.3", + "browserslist": "^4.21.5", + "copy-webpack-plugin": "12.0.2", + "critters": "0.0.24", + "css-loader": "7.1.2", + "esbuild-wasm": "0.23.0", + "fast-glob": "3.3.2", + "http-proxy-middleware": "3.0.0", + "https-proxy-agent": "7.0.5", + "istanbul-lib-instrument": "6.0.3", + "jsonc-parser": "3.3.1", + "karma-source-map-support": "1.4.0", + "less": "4.2.0", + "less-loader": "12.2.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.3.1", + "magic-string": "0.30.11", + "mini-css-extract-plugin": "2.9.0", + "mrmime": "2.0.0", + "open": "10.1.0", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.6.1", + "postcss": "8.4.41", + "postcss-loader": "8.1.1", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.77.6", + "sass-loader": "16.0.0", + "semver": "7.6.3", + "source-map-loader": "5.0.0", + "source-map-support": "0.5.21", + "terser": "5.31.6", + "tree-kill": "1.2.2", + "tslib": "2.6.3", + "vite": "5.4.0", + "watchpack": "2.4.1", + "webpack": "5.94.0", + "webpack-dev-middleware": "7.4.2", + "webpack-dev-server": "5.0.4", + "webpack-merge": "6.0.1", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.23.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "@angular/localize": "^18.0.0", + "@angular/platform-server": "^18.0.0", + "@angular/service-worker": "^18.0.0", + "@web/test-runner": "^0.18.0", + "browser-sync": "^3.0.2", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^18.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.4 <5.6" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "@web/test-runner": { + "optional": true + }, + "browser-sync": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true, + "license": "0BSD" + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1802.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.4.tgz", + "integrity": "sha512-juaDoguYccObm2xnzRDRlOtiL7ZyZcSAyiyls6QuO8hoo/h6phdHALJkUhI9+SIhCRQ6eUQtolC7hN3J+FZKnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1802.4", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^5.0.2" + } + }, + "node_modules/@angular-devkit/core": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.4.tgz", + "integrity": "sha512-svlgZ0vbLrfNJAQE5WePAutcYIyA7C0OfzKSTMsfV2X1I+1blYDaZIu/ocnHqofMHu6ZqdSaaU/p/rieqU8fcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "8.17.1", + "ajv-formats": "3.0.1", + "jsonc-parser": "3.3.1", + "picomatch": "4.0.2", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.4.tgz", + "integrity": "sha512-s2WdUhyLlKj5kOjb6vrvJg9/31KvgyRJGjy7PnzS43tpwF9MLuM3AYhuJsXHPhx+i0nyWn/Jnd8ZLjMzXljSxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.2.4", + "jsonc-parser": "3.3.1", + "magic-string": "0.30.11", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/animations": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.4.tgz", + "integrity": "sha512-ajjXpLD+SyxbHnmhj2ZvYpXneviOjcBgU9L2UX4OVS0jVWxCNHLhJrcMqtqFHA6U5fPnhPNR9cmnt6tmqri0rA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.2.4" + } + }, + "node_modules/@angular/build": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.4.tgz", + "integrity": "sha512-GVs7O7wxNMJCkqh6Vv2u9GEArWg9jyEt8Fofd6CJGzxKBYQ4hR5gjzL/lU6kNFiMcioS1wm1f6qtJtgilUO+9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "2.3.0", + "@angular-devkit/architect": "0.1802.4", + "@babel/core": "7.25.2", + "@babel/helper-annotate-as-pure": "7.24.7", + "@babel/helper-split-export-declaration": "7.24.7", + "@babel/plugin-syntax-import-attributes": "7.24.7", + "@inquirer/confirm": "3.1.22", + "@vitejs/plugin-basic-ssl": "1.1.0", + "browserslist": "^4.23.0", + "critters": "0.0.24", + "esbuild": "0.23.0", + "fast-glob": "3.3.2", + "https-proxy-agent": "7.0.5", + "listr2": "8.2.4", + "lmdb": "3.0.13", + "magic-string": "0.30.11", + "mrmime": "2.0.0", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "4.0.2", + "piscina": "4.6.1", + "rollup": "4.20.0", + "sass": "1.77.6", + "semver": "7.6.3", + "vite": "5.4.0", + "watchpack": "2.4.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "@angular/localize": "^18.0.0", + "@angular/platform-server": "^18.0.0", + "@angular/service-worker": "^18.0.0", + "less": "^4.2.0", + "postcss": "^8.4.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=5.4 <5.6" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular/cli": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.4.tgz", + "integrity": "sha512-n+Y2xlgcpTZ+MZmycf2b3ceVvANDJFkDEodobVtyG63WvGOhkZ3aGhT7sHguKpAQwJLicSf8zF2z+v1Yi0DvRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/architect": "0.1802.4", + "@angular-devkit/core": "18.2.4", + "@angular-devkit/schematics": "18.2.4", + "@inquirer/prompts": "5.3.8", + "@listr2/prompt-adapter-inquirer": "2.0.15", + "@schematics/angular": "18.2.4", + "@yarnpkg/lockfile": "1.1.0", + "ini": "4.1.3", + "jsonc-parser": "3.3.1", + "listr2": "8.2.4", + "npm-package-arg": "11.0.3", + "npm-pick-manifest": "9.1.0", + "pacote": "18.0.6", + "resolve": "1.22.8", + "semver": "7.6.3", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.4.tgz", + "integrity": "sha512-flUaKhdr8KvtjH0cLC6Rrjirt8GsiFlrmZLZplr784O3Gkei2VBBNFoopgmlEzbVGPiIG5QlFZH9yvah6JPQZw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.2.4", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.4.tgz", + "integrity": "sha512-o3ngFr1Bjt7cKOu4DSZJGCUF9YPTxJee97wFon2eNFj6FFNTmnGwAvsnJjHBMmk90fmZLC2/HpPdhYz7WprMZQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/core": "18.2.4" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.4.tgz", + "integrity": "sha512-BIp5zr+npqSs/4KWPxwKdn7+sjo008ieNOQDlXyQms9BKlxx/gDnj7W2TsxhrkDTYCIHF73fJZ7u2U8Qy4JWfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "7.25.2", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.2.0", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/compiler": "18.2.4", + "typescript": ">=5.4 <5.6" + } + }, + "node_modules/@angular/core": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.4.tgz", + "integrity": "sha512-ulYmYpI/ZVQ5BL38rBy4DS/9wgGWmVD9Uo6tcrLqCzt1G1G2nKwseZv009536pHfk6dj2HdPSkpcerhWh57DWw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.14.10" + } + }, + "node_modules/@angular/forms": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.4.tgz", + "integrity": "sha512-rlLhReauUz6jhLCEkGabLqqF6xLaTfvxafuj2ojzcqoKGSZcXDIM/UOSoWX756B8NtrpsuglpGBZjZlsrAZGsg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.2.4", + "@angular/core": "18.2.4", + "@angular/platform-browser": "18.2.4", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.4.tgz", + "integrity": "sha512-ddzq5MyPvFyTv0kUe8U9fbhE1nZtLYBCFKDqICrzHXiVRAdqLv6qtE5PtbURrdspSy1u/YEGV4LdkNJK3UgnZQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/animations": "18.2.4", + "@angular/common": "18.2.4", + "@angular/core": "18.2.4" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.4.tgz", + "integrity": "sha512-0nA04zJueGzdnl37TJ7guDCrzxYS4fjqgvYKiOpFktpMHPuNrBlAQo5YA7u20HGFG3i47PQh7hEWhQaqcXXpQw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.2.4", + "@angular/compiler": "18.2.4", + "@angular/core": "18.2.4", + "@angular/platform-browser": "18.2.4" + } + }, + "node_modules/@angular/router": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.4.tgz", + "integrity": "sha512-kYNHD3K1Xou2PRMqbG2tVahtMobgDlhwHdMB7G5oFHg6K13gQ2TmopF1U5A2wYtIMdsC+AkVGIJEOxQN8fmgcA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0" + }, + "peerDependencies": { + "@angular/common": "18.2.4", + "@angular/core": "18.2.4", + "@angular/platform-browser": "18.2.4", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", + "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", + "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.0", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-module-transforms": "^7.25.2", + "@babel/helpers": "^7.25.0", + "@babel/parser": "^7.25.0", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.2", + "@babel/types": "^7.25.2", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.0.tgz", + "integrity": "sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", + "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", + "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", + "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.4", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", + "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", + "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", + "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", + "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-simple-access": "^7.24.7", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", + "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", + "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz", + "integrity": "sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", + "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", + "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", + "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", + "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", + "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", + "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", + "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz", + "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz", + "integrity": "sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", + "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.0.tgz", + "integrity": "sha512-uaIi2FdqzjpAMvVqvB51S42oC2JEVgh0LDsGfZVDysWE8LrJtQC2jvKmOqEYThKyB7bDEb7BP1GYWDm7tABA0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", + "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-remap-async-to-generator": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", + "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", + "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", + "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", + "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", + "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/traverse": "^7.25.4", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", + "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", + "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", + "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", + "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", + "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", + "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", + "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", + "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.25.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", + "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", + "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", + "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", + "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", + "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", + "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", + "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", + "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", + "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", + "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", + "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", + "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", + "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", + "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", + "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", + "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", + "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.25.4", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", + "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", + "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", + "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", + "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.24.7.tgz", + "integrity": "sha512-YqXjrk4C+a1kZjewqt+Mmu2UuV1s07y8kqcUf4qYLnoqemhR4gRQikhdAhSVJioMjVTu6Mo6pAbaypEA3jY6fw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.1", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", + "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", + "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", + "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", + "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", + "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", + "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", + "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", + "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.25.3", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.3.tgz", + "integrity": "sha512-QsYW7UeAaXvLPX9tdVliMJE7MD7M6MLYVTovRTIwhoYQVFHR1rM4wO8wqAezYi3/BpSD+NzVCZ69R6smWiIi8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-compilation-targets": "^7.25.2", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.24.7", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.24.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.0", + "@babel/plugin-transform-async-to-generator": "^7.24.7", + "@babel/plugin-transform-block-scoped-functions": "^7.24.7", + "@babel/plugin-transform-block-scoping": "^7.25.0", + "@babel/plugin-transform-class-properties": "^7.24.7", + "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-transform-classes": "^7.25.0", + "@babel/plugin-transform-computed-properties": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", + "@babel/plugin-transform-dotall-regex": "^7.24.7", + "@babel/plugin-transform-duplicate-keys": "^7.24.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", + "@babel/plugin-transform-dynamic-import": "^7.24.7", + "@babel/plugin-transform-exponentiation-operator": "^7.24.7", + "@babel/plugin-transform-export-namespace-from": "^7.24.7", + "@babel/plugin-transform-for-of": "^7.24.7", + "@babel/plugin-transform-function-name": "^7.25.1", + "@babel/plugin-transform-json-strings": "^7.24.7", + "@babel/plugin-transform-literals": "^7.25.2", + "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", + "@babel/plugin-transform-member-expression-literals": "^7.24.7", + "@babel/plugin-transform-modules-amd": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", + "@babel/plugin-transform-modules-systemjs": "^7.25.0", + "@babel/plugin-transform-modules-umd": "^7.24.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", + "@babel/plugin-transform-new-target": "^7.24.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", + "@babel/plugin-transform-numeric-separator": "^7.24.7", + "@babel/plugin-transform-object-rest-spread": "^7.24.7", + "@babel/plugin-transform-object-super": "^7.24.7", + "@babel/plugin-transform-optional-catch-binding": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", + "@babel/plugin-transform-parameters": "^7.24.7", + "@babel/plugin-transform-private-methods": "^7.24.7", + "@babel/plugin-transform-private-property-in-object": "^7.24.7", + "@babel/plugin-transform-property-literals": "^7.24.7", + "@babel/plugin-transform-regenerator": "^7.24.7", + "@babel/plugin-transform-reserved-words": "^7.24.7", + "@babel/plugin-transform-shorthand-properties": "^7.24.7", + "@babel/plugin-transform-spread": "^7.24.7", + "@babel/plugin-transform-sticky-regex": "^7.24.7", + "@babel/plugin-transform-template-literals": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", + "@babel/plugin-transform-unicode-escapes": "^7.24.7", + "@babel/plugin-transform-unicode-property-regex": "^7.24.7", + "@babel/plugin-transform-unicode-regex": "^7.24.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.24.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.10", + "babel-plugin-polyfill-corejs3": "^0.10.4", + "babel-plugin-polyfill-regenerator": "^0.6.1", + "core-js-compat": "^3.37.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/runtime": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.0.tgz", + "integrity": "sha512-7dRy4DwXwtzBrPbZflqxnvfxLF8kdZXPkhymtDeFoFqE6ldzjQFgYTtYIFARcLEYDrqfBfYcZt1WqFxRoyC9Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", + "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", + "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", + "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.1.tgz", + "integrity": "sha512-boghen8F0Q8D+0/Q1/1r6DUEieUJ8w2a1gIknExMSHBsJFOr2+0KUfHiVYBvucPwl3+RU5PFBK833FjFCh3BhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.0.tgz", + "integrity": "sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.0.tgz", + "integrity": "sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.0.tgz", + "integrity": "sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.0.tgz", + "integrity": "sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.0.tgz", + "integrity": "sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.0.tgz", + "integrity": "sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.0.tgz", + "integrity": "sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.0.tgz", + "integrity": "sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.0.tgz", + "integrity": "sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.0.tgz", + "integrity": "sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.0.tgz", + "integrity": "sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.0.tgz", + "integrity": "sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.0.tgz", + "integrity": "sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.0.tgz", + "integrity": "sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.0.tgz", + "integrity": "sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.0.tgz", + "integrity": "sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.0.tgz", + "integrity": "sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.0.tgz", + "integrity": "sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.0.tgz", + "integrity": "sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.0.tgz", + "integrity": "sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.0.tgz", + "integrity": "sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.0.tgz", + "integrity": "sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.0.tgz", + "integrity": "sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.0.tgz", + "integrity": "sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.5.0.tgz", + "integrity": "sha512-sMgdETOfi2dUHT8r7TT1BTKOwNvdDGFDXYWtQ2J69SvlYNntk9I/gJe7r5yvMwwsuKnYbuRs3pNhx4tgNck5aA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/confirm": { + "version": "3.1.22", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.22.tgz", + "integrity": "sha512-gsAKIOWBm2Q87CDfs9fEo7wJT3fwWIJfnDGMn9Qy74gBnNFOACDNfhUzovubbJjWnKLGBln7/NcSmZwj5DuEXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.0.10", + "@inquirer/type": "^1.5.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.1.0.tgz", + "integrity": "sha512-RZVfH//2ytTjmaBIzeKT1zefcQZzuruwkpTwwbe/i2jTl4o9M+iML5ChULzz6iw1Ok8iUBBsRCjY2IEbD8Ft4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "@types/mute-stream": "^0.0.4", + "@types/node": "^22.5.2", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-spinners": "^2.9.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-2.2.0.tgz", + "integrity": "sha512-9KHOpJ+dIL5SZli8lJ6xdaYLPPzB8xB9GZItg39MBybzhxA16vxmszmQFrRwbOA918WA2rvu8xhDEg/p6LXKbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "external-editor": "^3.1.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/expand": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-2.3.0.tgz", + "integrity": "sha512-qnJsUcOGCSG1e5DTOErmv2BPQqrtT6uzqn1vI/aYGiPKq+FgslGZmtdnXbhuI7IlT7OByDoEEqdnhUnVR2hhLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.5.tgz", + "integrity": "sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-2.3.0.tgz", + "integrity": "sha512-XfnpCStx2xgh1LIRqPXrTNEEByqQWoxsWYzNRSEUxJ5c6EQlhMogJ3vHKu8aXuTacebtaZzMAHwEL0kAflKOBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/number": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-1.1.0.tgz", + "integrity": "sha512-ilUnia/GZUtfSZy3YEErXLJ2Sljo/mf9fiKc08n18DdwdmDbOzRcTv65H1jjDvlsAuvdFXf4Sa/aL7iw/NanVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/password": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-2.2.0.tgz", + "integrity": "sha512-5otqIpgsPYIshqhgtEwSspBQE40etouR8VIxzpJkv9i0dVHIpyhiivbkH9/dGiMLdyamT54YRdGJLfl8TFnLHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/prompts": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-5.3.8.tgz", + "integrity": "sha512-b2BudQY/Si4Y2a0PdZZL6BeJtl8llgeZa7U2j47aaJSCeAl1e4UI7y8a9bSkO3o/ZbZrgT5muy/34JbsjfIWxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^2.4.7", + "@inquirer/confirm": "^3.1.22", + "@inquirer/editor": "^2.1.22", + "@inquirer/expand": "^2.1.22", + "@inquirer/input": "^2.2.9", + "@inquirer/number": "^1.0.10", + "@inquirer/password": "^2.1.22", + "@inquirer/rawlist": "^2.2.4", + "@inquirer/search": "^1.0.7", + "@inquirer/select": "^2.4.7" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/rawlist": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-2.3.0.tgz", + "integrity": "sha512-zzfNuINhFF7OLAtGHfhwOW2TlYJyli7lOUoJUXw/uyklcwalV6WRXBXtFIicN8rTRK1XTiPWB4UY+YuW8dsnLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/search": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-1.1.0.tgz", + "integrity": "sha512-h+/5LSj51dx7hp5xOn4QFnUaKeARwUCLs6mIhtkJ0JYPBLmEYjdHSYh7I6GrLg9LwpJ3xeX0FZgAG1q0QdCpVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/select": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-2.5.0.tgz", + "integrity": "sha512-YmDobTItPP3WcEI86GvPo+T2sRHkxxOq/kXmsBjHS5BVXUgvgZ5AfJjkvQvZr03T81NnI3KrrRuMzeuYUQRFOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.3.tgz", + "integrity": "sha512-xUQ14WQGR/HK5ei+2CvgcwoH9fQ4PgPGmVFSN0pc1+fVyDL3MREhyAY7nxEErSu6CkllBM3D7e3e+kOvtu+eIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", + "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.1", + "@jsonjoy.com/util": "^1.1.2", + "hyperdyperid": "^1.2.0", + "thingies": "^1.20.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz", + "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@listr2/prompt-adapter-inquirer": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@listr2/prompt-adapter-inquirer/-/prompt-adapter-inquirer-2.0.15.tgz", + "integrity": "sha512-MZrGem/Ujjd4cPTLYDfCZK2iKKeiO/8OX13S6jqxldLs0Prf2aGqVlJ77nMBqMv7fzqgXEgjrNHLXcKR8l9lOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/type": "^1.5.1" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@inquirer/prompts": ">= 3 < 6" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.0.13.tgz", + "integrity": "sha512-uiKPB0Fv6WEEOZjruu9a6wnW/8jrjzlZbxXscMB8kuCJ1k6kHpcBnuvaAWcqhbI7rqX5GKziwWEdD+wi2gNLfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.0.13.tgz", + "integrity": "sha512-bEVIIfK5mSQoG1R19qA+fJOvCB+0wVGGnXHT3smchBVahYBdlPn2OsZZKzlHWfb1E+PhLBmYfqB5zQXFP7hJig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.0.13.tgz", + "integrity": "sha512-Yml1KlMzOnXj/tnW7yX8U78iAzTk39aILYvCPbqeewAq1kSzl+w59k/fiVkTBfvDi/oW/5YRxL+Fq+Y1Fr1r2Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-3.0.13.tgz", + "integrity": "sha512-afbVrsMgZ9dUTNUchFpj5VkmJRxvht/u335jUJ7o23YTbNbnpmXif3VKQGCtnjSh+CZaqm6N3CPG8KO3zwyZ1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.0.13.tgz", + "integrity": "sha512-vOtxu0xC0SLdQ2WRXg8Qgd8T32ak4SPqk5zjItRszrJk2BdeXqfGxBJbP7o4aOvSPSmSSv46Lr1EP4HXU8v7Kg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.0.13.tgz", + "integrity": "sha512-UCrMJQY/gJnOl3XgbWRZZUvGGBuKy6i0YNSptgMzHBjs+QYDYR1Mt/RLTOPy4fzzves65O1EDmlL//OzEqoLlA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", + "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", + "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", + "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.3.tgz", + "integrity": "sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", + "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", + "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@ngtools/webpack": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.4.tgz", + "integrity": "sha512-JVDRexu3q7lg2oqJG36RtX7cqTheoZRwg2HhMV8hYXUDL0fyOrv2galwTCgXrx7vAjlx45L2uR2kuWbgW0VVcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^18.0.0", + "typescript": ">=5.4 <5.6", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/agent": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", + "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "dev": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/fs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", + "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", + "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", + "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "glob": "^10.2.2", + "hosted-git-info": "^7.0.0", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^6.0.0", + "proc-log": "^4.0.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", + "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/redact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", + "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", + "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", + "@npmcli/promise-spawn": "^7.0.0", + "node-gyp": "^10.0.0", + "proc-log": "^4.0.0", + "which": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", + "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz", + "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz", + "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz", + "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz", + "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz", + "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz", + "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz", + "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz", + "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz", + "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz", + "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz", + "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz", + "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz", + "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz", + "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz", + "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@schematics/angular": { + "version": "18.2.4", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.4.tgz", + "integrity": "sha512-GxrPv4eOPrjMKoAVhch9eprW8H/DFhBy5Zgp7CgGui9NprYkkubxw/yyo11WfR5CFZ/q5AfsjV76dPCkhLwLmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-devkit/core": "18.2.4", + "@angular-devkit/schematics": "18.2.4", + "jsonc-parser": "3.3.1" + }, + "engines": { + "node": "^18.19.1 || ^20.11.1 || >=22.0.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", + "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", + "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/sign": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", + "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", + "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/verify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", + "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", + "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", + "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mute-stream": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", + "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/wrap-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", + "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", + "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "license": "MIT", + "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.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "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.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001660", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", + "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", + "dev": true, + "license": "ISC" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", + "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.1", + "globby": "^14.0.0", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/critters": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz", + "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "postcss-media-query-parser": "^0.2.3" + } + }, + "node_modules/critters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/critters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/critters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.20", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.20.tgz", + "integrity": "sha512-74mdl6Fs1HHzK9SUX4CKFxAtAe3nUns48y79TskHNAG6fGOlLfyKA4j855x+0b5u8rWJIrlaG9tcTPstMlwjIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", + "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^1.4.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/esbuild": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.23.0.tgz", + "integrity": "sha512-6jP8UmWy6R6TUUV8bMuC3ZyZ6lZKI56x0tkxyCIqWwRRJ/DgeQKneh/Oid5EoGoPFLrGNkz47ZEtWAYuiY/u9g==", + "dev": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/express": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", + "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", + "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz", + "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.10", + "debug": "^4.3.4", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-network-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", + "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.2.0.tgz", + "integrity": "sha512-tSAtdrvWybZkQmmaIoDgnvHG8ORUNw5kEVlO5CvrXj02Jjr9TZrmjFq7FUiOUzJiOP2wLGYT6PgrQgQF4R1xiw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", + "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/karma": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", + "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.7.2", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", + "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma-coverage/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.1.0.tgz", + "integrity": "sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "jasmine-core": "^4.0.0 || ^5.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-jasmine/node_modules/jasmine-core": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", + "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/karma/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/karma/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/karma/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/karma/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/launch-editor": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", + "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/less": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", + "integrity": "sha512-P3b3HJDBtSzsXUl0im2L7gTO5Ubg8mEN6G8qoTS77iXxXX4Hvu4Qj540PZDvQ8V6DmX6iXo98k7Md0Cm1PrLaA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-12.2.0.tgz", + "integrity": "sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "license": "ISC", + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.4.tgz", + "integrity": "sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true, + "license": "MIT" + }, + "node_modules/listr2/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/lmdb": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-3.0.13.tgz", + "integrity": "sha512-UGe+BbaSUQtAMZobTb4nHvFMrmvuAQKSeaqAX2meTEQjfsbpl5sxdHD8T72OnwD4GU9uwNhYXIVe4QGs8N9Zyw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "msgpackr": "^1.10.2", + "node-addon-api": "^6.1.0", + "node-gyp-build-optional-packages": "5.2.2", + "ordered-binary": "^1.4.1", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "3.0.13", + "@lmdb/lmdb-darwin-x64": "3.0.13", + "@lmdb/lmdb-linux-arm": "3.0.13", + "@lmdb/lmdb-linux-arm64": "3.0.13", + "@lmdb/lmdb-linux-x64": "3.0.13", + "@lmdb/lmdb-win32-x64": "3.0.13" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", + "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-fetch-happen": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", + "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.11.1.tgz", + "integrity": "sha512-LZcMTBAgqUUKNXZagcZxvXXfgF1bHX7Y7nQ0QyEiNbRJgE29GhgPd8Yna1VQcLlPiHt/5RFJMWYN9Uv/VPNvjQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/json-pack": "^1.0.3", + "@jsonjoy.com/util": "^1.3.0", + "tree-dump": "^1.0.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">= 4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", + "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-collect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-fetch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", + "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/msgpackr": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.11.0.tgz", + "integrity": "sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.3.tgz", + "integrity": "sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.2.2" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" + } + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/nice-napi/node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "dev": true, + "license": "MIT" + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", + "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^10.3.10", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^13.0.0", + "nopt": "^7.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^4.0.0" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", + "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.2.2.tgz", + "integrity": "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.1" + }, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", + "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", + "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^7.0.0", + "proc-log": "^4.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "dev": true, + "license": "ISC", + "dependencies": { + "ignore-walk": "^6.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", + "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", + "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^2.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ordered-binary": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz", + "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==", + "dev": true, + "license": "MIT" + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", + "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pacote": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", + "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^5.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/package-json": "^5.1.0", + "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/run-script": "^8.0.0", + "cacache": "^18.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^11.0.0", + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^17.0.0", + "proc-log": "^4.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-json/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-4.6.1.tgz", + "integrity": "sha512-z30AwWGtQE+Apr+2WBZensP2lIvwoaMcOPkQlIEmSGMJNUvaYACylPYrQM6wSdUNJlnDVMSpLv7xTMJqlVshOA==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/postcss": { + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-8.1.1.tgz", + "integrity": "sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^9.0.0", + "jiti": "^1.20.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", + "dev": true, + "license": "MIT" + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz", + "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.20.0", + "@rollup/rollup-android-arm64": "4.20.0", + "@rollup/rollup-darwin-arm64": "4.20.0", + "@rollup/rollup-darwin-x64": "4.20.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", + "@rollup/rollup-linux-arm-musleabihf": "4.20.0", + "@rollup/rollup-linux-arm64-gnu": "4.20.0", + "@rollup/rollup-linux-arm64-musl": "4.20.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", + "@rollup/rollup-linux-riscv64-gnu": "4.20.0", + "@rollup/rollup-linux-s390x-gnu": "4.20.0", + "@rollup/rollup-linux-x64-gnu": "4.20.0", + "@rollup/rollup-linux-x64-musl": "4.20.0", + "@rollup/rollup-win32-arm64-msvc": "4.20.0", + "@rollup/rollup-win32-ia32-msvc": "4.20.0", + "@rollup/rollup-win32-x64-msvc": "4.20.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.77.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", + "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.0.tgz", + "integrity": "sha512-n13Z+3rU9A177dk4888czcVFiC8CL9dii4qpXWUg3YIIgZEvi9TCFKjOQcbK0kJM7DJu9VucrZFddvNfYCPwtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true, + "license": "ISC", + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sigstore": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", + "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-5.0.0.tgz", + "integrity": "sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/terser": { + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/thingies": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", + "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-dump": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", + "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/tuf-js": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", + "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/models": "2.0.1", + "debug": "^4.3.4", + "make-fetch-happen": "^13.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.39.tgz", + "integrity": "sha512-IZ6acm6RhQHNibSt7+c09hhvsKy9WUr4DVbeq9U8o71qxyYtJpQeDxQnMrVqnIFMLcQjHO0I9wgfO2vIahht4w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz", + "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.40", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", + "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack": { + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", + "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.6.0", + "mime-types": "^2.1.31", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.0.4.tgz", + "integrity": "sha512-dljXhUgx3HqKP2d8J/fUMvhxGhzjeNVarDLcbO/EWMSgRizDkxHQDZQaLFL5VJY9tRBj2Gz+rvCEYYvhbqPHNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.4.0", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "rimraf": "^5.0.5", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.1.0", + "ws": "^8.16.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack-merge": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zone.js": { + "version": "0.14.10", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.14.10.tgz", + "integrity": "sha512-YGAhaO7J5ywOXW6InXNlLmfU194F8lVgu7bRntUF3TiG8Y3nBK0x1UJJuHUP/e8IyihkjCYqhCScpSwnlaSRkQ==", + "license": "MIT" + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000000..51456438f6 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,39 @@ +{ + "name": "frontend", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test", + "lint": "ng lint" + }, + "private": true, + "dependencies": { + "@angular/animations": "^18.2.0", + "@angular/common": "^18.2.0", + "@angular/compiler": "^18.2.0", + "@angular/core": "^18.2.0", + "@angular/forms": "^18.2.0", + "@angular/platform-browser": "^18.2.0", + "@angular/platform-browser-dynamic": "^18.2.0", + "@angular/router": "^18.2.0", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.10" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^18.2.2", + "@angular/cli": "^18.2.2", + "@angular/compiler-cli": "^18.2.0", + "@types/jasmine": "~5.1.0", + "jasmine-core": "~5.2.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.5.2" + } +} diff --git a/frontend/public/favicon.ico b/frontend/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..57614f9c967596fad0a3989bec2b1deff33034f6 GIT binary patch literal 15086 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 Nr__JTFzvMr^FKp4S3v*( literal 0 HcmV?d00001 diff --git a/frontend/src/app/app.component.css b/frontend/src/app/app.component.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frontend/src/app/app.component.html b/frontend/src/app/app.component.html new file mode 100644 index 0000000000..36093e1879 --- /dev/null +++ b/frontend/src/app/app.component.html @@ -0,0 +1,336 @@ + + + + + + + + + + + +
+
+
+ +

Hello, {{ title }}

+

Congratulations! Your app is running. 🎉

+
+ +
+
+ @for (item of [ + { title: 'Explore the Docs', link: 'https://angular.dev' }, + { title: 'Learn with Tutorials', link: 'https://angular.dev/tutorials' }, + { title: 'CLI Docs', link: 'https://angular.dev/tools/cli' }, + { title: 'Angular Language Service', link: 'https://angular.dev/tools/language-service' }, + { title: 'Angular DevTools', link: 'https://angular.dev/tools/devtools' }, + ]; track item.title) { + + {{ item.title }} + + + + + } +
+ +
+
+
+ + + + + + + + + + + diff --git a/frontend/src/app/app.component.spec.ts b/frontend/src/app/app.component.spec.ts new file mode 100644 index 0000000000..a6b0ab9d5e --- /dev/null +++ b/frontend/src/app/app.component.spec.ts @@ -0,0 +1,29 @@ +import { TestBed } from '@angular/core/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AppComponent], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it(`should have the 'frontend' title`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app.title).toEqual('frontend'); + }); + + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('h1')?.textContent).toContain('Hello, frontend'); + }); +}); diff --git a/frontend/src/app/app.component.ts b/frontend/src/app/app.component.ts new file mode 100644 index 0000000000..0c44972ea0 --- /dev/null +++ b/frontend/src/app/app.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; + +@Component({ + selector: 'app-root', + standalone: true, + imports: [RouterOutlet], + templateUrl: './app.component.html', + styleUrl: './app.component.css' +}) +export class AppComponent { + title = 'frontend'; +} diff --git a/frontend/src/app/app.config.ts b/frontend/src/app/app.config.ts new file mode 100644 index 0000000000..a1e7d6f864 --- /dev/null +++ b/frontend/src/app/app.config.ts @@ -0,0 +1,8 @@ +import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; +import { provideRouter } from '@angular/router'; + +import { routes } from './app.routes'; + +export const appConfig: ApplicationConfig = { + providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes)] +}; diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts new file mode 100644 index 0000000000..dc39edb5f2 --- /dev/null +++ b/frontend/src/app/app.routes.ts @@ -0,0 +1,3 @@ +import { Routes } from '@angular/router'; + +export const routes: Routes = []; diff --git a/frontend/src/index.html b/frontend/src/index.html new file mode 100644 index 0000000000..3af61ec9be --- /dev/null +++ b/frontend/src/index.html @@ -0,0 +1,13 @@ + + + + + Frontend + + + + + + + + diff --git a/frontend/src/main.ts b/frontend/src/main.ts new file mode 100644 index 0000000000..35b00f3463 --- /dev/null +++ b/frontend/src/main.ts @@ -0,0 +1,6 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { appConfig } from './app/app.config'; +import { AppComponent } from './app/app.component'; + +bootstrapApplication(AppComponent, appConfig) + .catch((err) => console.error(err)); diff --git a/frontend/src/styles.css b/frontend/src/styles.css new file mode 100644 index 0000000000..90d4ee0072 --- /dev/null +++ b/frontend/src/styles.css @@ -0,0 +1 @@ +/* You can add global styles to this file, and also import other style files */ diff --git a/frontend/tsconfig.app.json b/frontend/tsconfig.app.json new file mode 100644 index 0000000000..3775b37e3b --- /dev/null +++ b/frontend/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000000..a8bb65b6e2 --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,33 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "compileOnSave": false, + "compilerOptions": { + "outDir": "./dist/out-tsc", + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "isolatedModules": true, + "esModuleInterop": true, + "sourceMap": true, + "declaration": false, + "experimentalDecorators": true, + "moduleResolution": "bundler", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "lib": [ + "ES2022", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/frontend/tsconfig.spec.json b/frontend/tsconfig.spec.json new file mode 100644 index 0000000000..5fb748d920 --- /dev/null +++ b/frontend/tsconfig.spec.json @@ -0,0 +1,15 @@ +/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ +/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..e97f7809da --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "cs3219-ay2425s1-project-g03", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/package.json b/package.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/package.json @@ -0,0 +1 @@ +{} From a67ed8e7ffc6a608c6c7222f32ff1f6114ebf26d Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Thu, 12 Sep 2024 13:51:20 +0800 Subject: [PATCH 004/188] Frontend: Add ESLint --- frontend/eslint.config.js | 43 + frontend/package-lock.json | 4836 +++++++++++++++++++++++++----------- frontend/package.json | 7 +- 3 files changed, 3376 insertions(+), 1510 deletions(-) create mode 100644 frontend/eslint.config.js diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js new file mode 100644 index 0000000000..99a007a639 --- /dev/null +++ b/frontend/eslint.config.js @@ -0,0 +1,43 @@ +// @ts-check +const eslint = require("@eslint/js"); +const tseslint = require("typescript-eslint"); +const angular = require("angular-eslint"); + +module.exports = tseslint.config( + { + files: ["**/*.ts"], + extends: [ + eslint.configs.recommended, + ...tseslint.configs.recommended, + ...tseslint.configs.stylistic, + ...angular.configs.tsRecommended, + ], + processor: angular.processInlineTemplates, + rules: { + "@angular-eslint/directive-selector": [ + "error", + { + type: "attribute", + prefix: "app", + style: "camelCase", + }, + ], + "@angular-eslint/component-selector": [ + "error", + { + type: "element", + prefix: "app", + style: "kebab-case", + }, + ], + }, + }, + { + files: ["**/*.html"], + extends: [ + ...angular.configs.templateRecommended, + ...angular.configs.templateAccessibility, + ], + rules: {}, + } +); diff --git a/frontend/package-lock.json b/frontend/package-lock.json index b100b0bf4f..aaecb18c78 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -25,13 +25,16 @@ "@angular/cli": "^18.2.2", "@angular/compiler-cli": "^18.2.0", "@types/jasmine": "~5.1.0", + "angular-eslint": "18.3.1", + "eslint": "^9.9.1", "jasmine-core": "~5.2.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", - "typescript": "~5.5.2" + "typescript": "~5.5.2", + "typescript-eslint": "8.2.0" } }, "node_modules/@ampproject/remapping": { @@ -267,6 +270,133 @@ "yarn": ">= 1.13.0" } }, + "node_modules/@angular-eslint/builder": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-18.3.1.tgz", + "integrity": "sha512-cPc7Ye9zDs5M4i+feL6vob+mh7yX5vxvOS5KQIhneUrp5e9D+IGuNFMmBLlOPpmklSc9XJBtuvI5Zjuh4z1ETw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/bundled-angular-compiler": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-18.3.1.tgz", + "integrity": "sha512-sikmkjfsXPpPTku1aQkQ1MNNEKGBgGGRvUN/WeNS9dhCJ4dxU3O7dZctt1aQWj+W3nbuUtDiimAWF5fZHGFE2Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@angular-eslint/eslint-plugin": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-18.3.1.tgz", + "integrity": "sha512-MP4Nm+SHboF8KdnN0KpPEGAaTTzDLPm3+S/4W3Mg8onqWCyadyd4mActh9mK/pvCj8TVlb/SW1zeTtdMYhwonw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "18.3.1", + "@angular-eslint/utils": "18.3.1" + }, + "peerDependencies": { + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-18.3.1.tgz", + "integrity": "sha512-hBJ3+f7VSidvrtYaXH7Vp0sWvblA9jLK2c6uQzhYGWdEDUcTg7g7VI9ThW39WvMbHqkyzNE4PPOynK69cBEDGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "18.3.1", + "@angular-eslint/utils": "18.3.1", + "aria-query": "5.3.0", + "axobject-query": "4.1.0" + }, + "peerDependencies": { + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/schematics": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-18.3.1.tgz", + "integrity": "sha512-BTsQHDu7LjvXannJTb5BqMPCFIHRNN94eRyb60VfjJxB/ZFtsbAQDFFOi5lEZsRsd4mBeUMuL9mW4IMcPtUQ9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-eslint/eslint-plugin": "18.3.1", + "@angular-eslint/eslint-plugin-template": "18.3.1", + "ignore": "5.3.2", + "semver": "7.6.3", + "strip-json-comments": "3.1.1" + }, + "peerDependencies": { + "@angular-devkit/core": ">= 18.0.0 < 19.0.0", + "@angular-devkit/schematics": ">= 18.0.0 < 19.0.0" + } + }, + "node_modules/@angular-eslint/template-parser": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-18.3.1.tgz", + "integrity": "sha512-JUUkfWH1G+u/Uk85ZYvJSt/qwN/Ko+jlXFtzBEcknJZsTWTwBcp36v77gPZe5FmKSziJZpyPUd+7Kiy6tuSCTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "18.3.1", + "eslint-scope": "^8.0.2" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" + } + }, + "node_modules/@angular-eslint/template-parser/node_modules/eslint-scope": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@angular-eslint/template-parser/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@angular-eslint/utils": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-18.3.1.tgz", + "integrity": "sha512-sd9niZI7h9H2FQ7OLiQsLFBhjhRQTASh+Q0+4+hyjv9idbSHBJli8Gsi2fqj9zhtMKpAZFTrWzuLUpubJ9UYbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "18.3.1" + }, + "peerDependencies": { + "@typescript-eslint/utils": "^7.11.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*" + } + }, "node_modules/@angular/animations": { "version": "18.2.4", "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.4.tgz", @@ -2850,6 +2980,169 @@ "node": ">=18" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/js": { + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz", + "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.1.0.tgz", + "integrity": "sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@inquirer/checkbox": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-2.5.0.tgz", @@ -4472,2295 +4765,3452 @@ "@types/node": "*" } }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", - "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.2.0.tgz", + "integrity": "sha512-02tJIs655em7fvt9gps/+4k4OsKULYGtLBPJfOsmOq1+3cdClYiF0+d6mHu6qDnTcg88wJBkcPLpQhq7FyDz0A==", "dev": true, "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.2.0", + "@typescript-eslint/type-utils": "8.2.0", + "@typescript-eslint/utils": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, "engines": { - "node": ">=14.6.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz", + "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.2.0.tgz", + "integrity": "sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz", + "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==", "dev": true, - "license": "MIT" + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.2.0.tgz", + "integrity": "sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.2.0", + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/typescript-estree": "8.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz", + "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==", "dev": true, "license": "MIT", "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" + "@typescript-eslint/types": "8.2.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" + "balanced-match": "^1.0.0" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "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" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "MIT", + "license": "ISC", "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" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "engines": { + "node": ">=8" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "node_modules/@typescript-eslint/parser": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.2.0.tgz", + "integrity": "sha512-j3Di+o0lHgPrb7FxL3fdEy6LJ/j2NE8u+AP/5cQ9SKb+JLH6V6UHDqJ+e0hXBkHP1wn1YDFjYCS9LBQsZDlDEg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "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" + "@typescript-eslint/scope-manager": "8.2.0", + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/typescript-estree": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz", + "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@xtuc/long": "4.2.2" + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", - "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.2.0.tgz", + "integrity": "sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz", + "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">= 0.6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz", + "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==", "dev": true, "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "@typescript-eslint/types": "8.2.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=0.4.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", - "peerDependencies": { - "acorn": "^8" + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", - "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "node_modules/@typescript-eslint/parser/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=8.9" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "node_modules/@typescript-eslint/parser/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8.9.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "node_modules/@typescript-eslint/parser/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { - "node": ">= 14" + "node": ">=8" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz", + "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.2.0.tgz", + "integrity": "sha512-g1CfXGFMQdT5S+0PSO0fvGXUaiSkl73U1n9LTK5aRAFnPlJ8dLKkXr4AaLFvPedW8lVDoMgLLE3JN98ZZfsj0w==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "@typescript-eslint/typescript-estree": "8.2.0", + "@typescript-eslint/utils": "8.2.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { - "ajv": { + "typescript": { "optional": true } } }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz", + "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3" + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0" }, - "peerDependencies": { - "ajv": "^8.8.2" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.2.0.tgz", + "integrity": "sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz", + "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "type-fest": "^0.21.3" + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.2.0.tgz", + "integrity": "sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg==", "dev": true, "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.2.0", + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/typescript-estree": "8.2.0" + }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" } }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz", + "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "@typescript-eslint/types": "8.2.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" + "balanced-match": "^1.0.0" } }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/@typescript-eslint/type-utils/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, "engines": { - "node": ">=8.6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "Python-2.0" + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "node_modules/@typescript-eslint/type-utils/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/autoprefixer": { - "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "node_modules/@typescript-eslint/types": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz", + "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, + "peer": true, "engines": { - "node": "^10 || ^12 || >=14" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "postcss": "^8.1.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/babel-loader": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", - "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz", + "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "peer": true, "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": ">= 14.15.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "node_modules/@typescript-eslint/utils": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.5.0.tgz", + "integrity": "sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "eslint": "^8.57.0 || ^9.0.0" } }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz", + "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "@typescript-eslint/types": "8.5.0", + "eslint-visitor-keys": "^3.4.3" }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", + "integrity": "sha512-wO4Dk/rm8u7RNhOf95ZzcEmC9rYOncYgvq4z3duaJrCgjN8BxAnDVyndanfcJZ0O6XZzHz6Q0hTimxTg8Y9g/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/angular-eslint": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/angular-eslint/-/angular-eslint-18.3.1.tgz", + "integrity": "sha512-p3/1DfH8TpsMHUDMLECn6/1uPcHjd7/0tL8prXZuO93mZFV4Y+P9MBwLheA14tw8UXbnKWXW8SZz9hov6PaLRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@angular-eslint/builder": "18.3.1", + "@angular-eslint/eslint-plugin": "18.3.1", + "@angular-eslint/eslint-plugin-template": "18.3.1", + "@angular-eslint/schematics": "18.3.1", + "@angular-eslint/template-parser": "18.3.1" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": "*", + "typescript-eslint": "^8.0.0" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.11", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", + "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.6.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", + "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2", + "core-js-compat": "^3.38.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", + "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "license": "MIT", + "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.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true, "license": "MIT" }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "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.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001660", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", + "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/feross" + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" }, { - "type": "consulting", - "url": "https://feross.org/support" + "type": "github", + "url": "https://github.com/sponsors/ai" } ], - "license": "MIT" + "license": "CC-BY-4.0" }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, "engines": { - "node": "^4.5.0 || >= 5.9" + "node": ">=4" } }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true, "license": "MIT" }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, "engines": { - "node": "*" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.0" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "engines": { + "node": ">=6" } }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "license": "MIT", "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.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": ">= 12" + } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "fill-range": "^7.1.1" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" - }, - "bin": { - "browserslist": "cli.js" + "color-name": "~1.1.4" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=7.0.0" } }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "engines": { + "node": ">=8" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/bundle-name": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", - "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "license": "MIT", "dependencies": { - "run-applescript": "^7.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=0.8" } }, - "node_modules/cacache": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=6" } }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "color-name": "1.1.3" } }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "MIT" }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "node_modules/common-path-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", + "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", "dev": true, "license": "ISC" }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "mime-db": ">= 1.43.0 < 2" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 0.6" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "license": "MIT", "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.1" + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.8.0" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001660", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", - "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" + "ms": "2.0.0" } }, - "node_modules/chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true, "license": "MIT" }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", "dev": true, "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" }, "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">= 0.10.0" } }, - "node_modules/chownr": { + "node_modules/connect-history-api-fallback": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=0.8" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.0" + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.6" } }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", - "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/mesqueeb" } }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", - "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "node_modules/copy-webpack-plugin": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", + "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", "dev": true, "license": "MIT", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.1", + "globby": "^14.0.0", + "normalize-path": "^3.0.0", + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" }, "engines": { - "node": ">=18" + "node": ">= 18.12.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", - "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "license": "ISC", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=12" + "node": ">=10.13.0" } }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/core-js-compat": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "browserslist": "^4.23.3" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "node_modules/cliui/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true, "license": "MIT" }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "object-assign": "^4", + "vary": "^1" }, "engines": { - "node": ">=8" + "node": ">= 0.10" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" }, "engines": { - "node": ">=10" + "node": ">=14" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "node_modules/critters": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz", + "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" + "license": "Apache-2.0", + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "postcss-media-query-parser": "^0.2.3" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "node_modules/critters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true, - "license": "ISC" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "node_modules/critters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { - "mime-db": ">= 1.43.0 < 2" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.6" + "node": ">=7.0.0" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "node_modules/critters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/critters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=8" } }, - "node_modules/compression/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "node_modules/critters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">= 0.10.0" + "node": ">= 8" } }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "node_modules/css-loader": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", + "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", "dev": true, "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, "engines": { - "node": ">=0.8" + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "ms": "2.0.0" + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, - "license": "MIT" + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=4.0" } }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">= 0.6" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true, "license": "MIT" }, - "node_modules/copy-anything": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", - "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", "dev": true, "license": "MIT", "dependencies": { - "is-what": "^3.14.1" + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/mesqueeb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/copy-webpack-plugin": { - "version": "12.0.2", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", - "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", "dev": true, "license": "MIT", - "dependencies": { - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.1", - "globby": "^14.0.0", - "normalize-path": "^3.0.0", - "schema-utils": "^4.2.0", - "serialize-javascript": "^6.0.2" - }, "engines": { - "node": ">= 18.12.0" + "node": ">=18" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, - "license": "ISC", + "license": "BSD-2-Clause", "dependencies": { - "is-glob": "^4.0.3" + "execa": "^5.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">= 10" } }, - "node_modules/core-js-compat": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", - "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.23.3" + "clone": "^1.0.2" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "license": "MIT", "dependencies": { - "object-assign": "^4", - "vary": "^1" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", - "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true, "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, "engines": { - "node": ">=14" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/critters": { - "version": "0.0.24", - "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz", - "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==", + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "chalk": "^4.1.0", - "css-select": "^5.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.2", - "htmlparser2": "^8.0.2", - "postcss": "^8.4.23", - "postcss-media-query-parser": "^0.2.3" + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, - "node_modules/critters/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=6" } }, - "node_modules/critters/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/critters/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, + "license": "Apache-2.0", "engines": { - "node": ">=7.0.0" + "node": ">=8" } }, - "node_modules/critters/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true, "license": "MIT" }, - "node_modules/critters/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/critters/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "@leichtgewicht/ip-codec": "^2.0.1" }, "engines": { - "node": ">= 8" + "node": ">=6" } }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" } }, - "node_modules/css-loader": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", - "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, "license": "MIT", "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 18.12.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.27.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" }, "funding": { - "url": "https://github.com/sponsors/fb55" + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/cssesc": { + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.20", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.20.tgz", + "integrity": "sha512-74mdl6Fs1HHzK9SUX4CKFxAtAe3nUns48y79TskHNAG6fGOlLfyKA4j855x+0b5u8rWJIrlaG9tcTPstMlwjIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, "engines": { - "node": ">=4" + "node": ">= 4" } }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.8" + } }, - "node_modules/date-format": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", - "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, "license": "MIT", - "engines": { - "node": ">=4.0" + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" } }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "ms": "^2.1.3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=0.10.0" } }, - "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "node_modules/engine.io": { + "version": "6.5.5", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", + "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", "dev": true, "license": "MIT", "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.2.0" } }, - "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.0.0" } }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "execa": "^5.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">= 10" + "node": ">=10.13.0" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "node_modules/ent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", + "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", "dev": true, "license": "MIT", "dependencies": { - "clone": "^1.0.2" + "punycode": "^1.4.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.4" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, + "license": "BSD-2-Clause", "engines": { - "node": ">= 0.4" + "node": ">=0.12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", "engines": { - "node": ">=12" + "node": ">=6" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8" + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">= 0.4" } }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true, - "license": "MIT" - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", "dev": true, "license": "MIT" }, - "node_modules/dns-packet": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "node_modules/esbuild": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", + "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=6" + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.0", + "@esbuild/android-arm": "0.23.0", + "@esbuild/android-arm64": "0.23.0", + "@esbuild/android-x64": "0.23.0", + "@esbuild/darwin-arm64": "0.23.0", + "@esbuild/darwin-x64": "0.23.0", + "@esbuild/freebsd-arm64": "0.23.0", + "@esbuild/freebsd-x64": "0.23.0", + "@esbuild/linux-arm": "0.23.0", + "@esbuild/linux-arm64": "0.23.0", + "@esbuild/linux-ia32": "0.23.0", + "@esbuild/linux-loong64": "0.23.0", + "@esbuild/linux-mips64el": "0.23.0", + "@esbuild/linux-ppc64": "0.23.0", + "@esbuild/linux-riscv64": "0.23.0", + "@esbuild/linux-s390x": "0.23.0", + "@esbuild/linux-x64": "0.23.0", + "@esbuild/netbsd-x64": "0.23.0", + "@esbuild/openbsd-arm64": "0.23.0", + "@esbuild/openbsd-x64": "0.23.0", + "@esbuild/sunos-x64": "0.23.0", + "@esbuild/win32-arm64": "0.23.0", + "@esbuild/win32-ia32": "0.23.0", + "@esbuild/win32-x64": "0.23.0" } }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "node_modules/esbuild-wasm": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.23.0.tgz", + "integrity": "sha512-6jP8UmWy6R6TUUV8bMuC3ZyZ6lZKI56x0tkxyCIqWwRRJ/DgeQKneh/Oid5EoGoPFLrGNkz47ZEtWAYuiY/u9g==", "dev": true, "license": "MIT", - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" } }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "engines": { + "node": ">=6" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" + "license": "MIT" }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.10.0.tgz", + "integrity": "sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.10.0", + "@eslint/plugin-kit": "^0.1.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">= 4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "engines": { + "node": ">=8.0.0" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.20", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.20.tgz", - "integrity": "sha512-74mdl6Fs1HHzK9SUX4CKFxAtAe3nUns48y79TskHNAG6fGOlLfyKA4j855x+0b5u8rWJIrlaG9tcTPstMlwjIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", - "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">= 4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/engine.io": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.5.tgz", - "integrity": "sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA==", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.17.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=10.2.0" + "node": ">=7.0.0" } }, - "node_modules/engine.io-parser": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", - "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } + "license": "MIT" }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, "engines": { - "node": ">=10.13.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", - "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "punycode": "^1.4.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, - "license": "BSD-2-Clause", + "license": "Apache-2.0", "engines": { - "node": ">=0.12" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://opencollective.com/eslint" } }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "engines": { - "node": ">=6" + "node": ">=4.0" } }, - "node_modules/environment": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", - "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true, - "license": "MIT" - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "MIT", - "optional": true, + "license": "ISC", "dependencies": { - "prr": "~1.0.1" + "is-glob": "^4.0.3" }, - "bin": { - "errno": "cli.js" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" + "engines": { + "node": ">=8" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4" + "p-locate": "^5.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.0.tgz", - "integrity": "sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==", + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "hasInstallScript": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" + "dependencies": { + "p-limit": "^3.0.2" }, "engines": { - "node": ">=18" + "node": ">=10" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.23.0", - "@esbuild/android-arm": "0.23.0", - "@esbuild/android-arm64": "0.23.0", - "@esbuild/android-x64": "0.23.0", - "@esbuild/darwin-arm64": "0.23.0", - "@esbuild/darwin-x64": "0.23.0", - "@esbuild/freebsd-arm64": "0.23.0", - "@esbuild/freebsd-x64": "0.23.0", - "@esbuild/linux-arm": "0.23.0", - "@esbuild/linux-arm64": "0.23.0", - "@esbuild/linux-ia32": "0.23.0", - "@esbuild/linux-loong64": "0.23.0", - "@esbuild/linux-mips64el": "0.23.0", - "@esbuild/linux-ppc64": "0.23.0", - "@esbuild/linux-riscv64": "0.23.0", - "@esbuild/linux-s390x": "0.23.0", - "@esbuild/linux-x64": "0.23.0", - "@esbuild/netbsd-x64": "0.23.0", - "@esbuild/openbsd-arm64": "0.23.0", - "@esbuild/openbsd-x64": "0.23.0", - "@esbuild/sunos-x64": "0.23.0", - "@esbuild/win32-arm64": "0.23.0", - "@esbuild/win32-ia32": "0.23.0", - "@esbuild/win32-x64": "0.23.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild-wasm": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.23.0.tgz", - "integrity": "sha512-6jP8UmWy6R6TUUV8bMuC3ZyZ6lZKI56x0tkxyCIqWwRRJ/DgeQKneh/Oid5EoGoPFLrGNkz47ZEtWAYuiY/u9g==", + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, "engines": { - "node": ">=18" + "node": ">=8" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "node_modules/eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">=0.8.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "BSD-2-Clause", + "license": "BSD-3-Clause", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, "node_modules/esrecurse": { @@ -7049,6 +8499,13 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, "node_modules/fast-uri": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", @@ -7079,6 +8536,19 @@ "node": ">=0.8.0" } }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -7185,6 +8655,20 @@ "flat": "cli.js" } }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/flatted": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", @@ -7483,6 +8967,13 @@ "dev": true, "license": "ISC" }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", @@ -8145,6 +9636,16 @@ "node": ">=0.12.0" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", @@ -8475,6 +9976,13 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, "node_modules/json-parse-even-better-errors": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", @@ -8492,6 +10000,13 @@ "dev": true, "license": "MIT" }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -8818,6 +10333,16 @@ "node": ">=10" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -8944,6 +10469,20 @@ "node": ">=0.10.0" } }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/license-webpack-plugin": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", @@ -9130,6 +10669,13 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -9913,6 +11459,13 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, "node_modules/needle": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", @@ -10412,6 +11965,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/ora": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", @@ -11084,6 +12655,16 @@ "dev": true, "license": "MIT" }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/proc-log": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", @@ -12537,6 +14118,19 @@ "node": ">=6" } }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -12764,6 +14358,13 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, "node_modules/thingies": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", @@ -12857,6 +14458,19 @@ "tree-kill": "cli.js" } }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", @@ -12878,6 +14492,19 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", @@ -12926,6 +14553,189 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.2.0.tgz", + "integrity": "sha512-DmnqaPcML0xYwUzgNbM1XaKXpEb7BShYf2P1tkUmmcl8hyeG7Pj08Er7R9bNy6AufabywzJcOybQAtnD/c9DGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.2.0", + "@typescript-eslint/parser": "8.2.0", + "@typescript-eslint/utils": "8.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.2.0.tgz", + "integrity": "sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.2.0.tgz", + "integrity": "sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.2.0.tgz", + "integrity": "sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/visitor-keys": "8.2.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.2.0.tgz", + "integrity": "sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.2.0", + "@typescript-eslint/types": "8.2.0", + "@typescript-eslint/typescript-estree": "8.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.2.0.tgz", + "integrity": "sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.2.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript-eslint/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typescript-eslint/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/ua-parser-js": { "version": "0.7.39", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.39.tgz", @@ -14090,6 +15900,16 @@ "dev": true, "license": "MIT" }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 51456438f6..b06fb0b5d1 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -28,12 +28,15 @@ "@angular/cli": "^18.2.2", "@angular/compiler-cli": "^18.2.0", "@types/jasmine": "~5.1.0", + "angular-eslint": "18.3.1", + "eslint": "^9.9.1", "jasmine-core": "~5.2.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", - "typescript": "~5.5.2" + "typescript": "~5.5.2", + "typescript-eslint": "8.2.0" } -} +} \ No newline at end of file From f51961bee7c803f262842ebce7e39d48a2d29429 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Thu, 12 Sep 2024 13:51:47 +0800 Subject: [PATCH 005/188] Initialize GitHubActions * Create automated linting for frontend --- .github/workflows/tests.yml | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/workflows/tests.yml diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 0000000000..5ea122faa1 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,34 @@ +## https://docs.github.com/en/actions +name: CI + +# Controls when the workflow will run +on: + push: + branches: [ 'main' ] + pull_request: + branches: [ 'main' ] + types: [ 'opened', 'reopened', 'synchronize'] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +env: + node-version: '20.x' + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + build-frontend: + runs-on: ubuntu-latest + timeout-minutes: 60 + steps: + - uses: actions/checkout@v4 + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: ${{ env.node-version }} + - name: Install Node Modules + run: cd frontend && npm ci + - name: Linting + run: cd frontend && npm run lint + - name: Build App + run: cd frontend && npm run build From 48369802841d536529e1cca9961180b92f206b5b Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Thu, 12 Sep 2024 14:25:35 +0800 Subject: [PATCH 006/188] Frontend: Add Prettier --- frontend/.prettierignore | 41 + frontend/.prettierrc.json | 11 + frontend/README.md | 4 + frontend/eslint.config.js | 76 +- frontend/package-lock.json | 1172 ++++++++++++++++++++++-- frontend/package.json | 6 +- frontend/src/app/app.component.spec.ts | 42 +- frontend/src/app/app.component.ts | 12 +- frontend/src/app/app.config.ts | 2 +- frontend/src/main.ts | 3 +- 10 files changed, 1226 insertions(+), 143 deletions(-) create mode 100644 frontend/.prettierignore create mode 100644 frontend/.prettierrc.json diff --git a/frontend/.prettierignore b/frontend/.prettierignore new file mode 100644 index 0000000000..1fa281384d --- /dev/null +++ b/frontend/.prettierignore @@ -0,0 +1,41 @@ +# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db + +package.json +package-lock.json diff --git a/frontend/.prettierrc.json b/frontend/.prettierrc.json new file mode 100644 index 0000000000..58416554c2 --- /dev/null +++ b/frontend/.prettierrc.json @@ -0,0 +1,11 @@ +{ + "tabWidth": 4, + "useTabs": false, + "singleQuote": true, + "semi": true, + "bracketSpacing": true, + "arrowParens": "avoid", + "trailingComma": "all", + "bracketSameLine": true, + "printWidth": 120 +} diff --git a/frontend/README.md b/frontend/README.md index 0e7c31dba6..b060118d19 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -14,6 +14,10 @@ Run `ng generate component component-name` to generate a new component. You can Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. +## Lint + +Run `ng lint` to lint the project files. The linting rules can be configured in `.prettierrc.json` and `eslint.config.js`. You can use `ng lint --fix` to auto-fix linting issues where possible. + ## Running unit tests Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js index 99a007a639..23c7d74b6d 100644 --- a/frontend/eslint.config.js +++ b/frontend/eslint.config.js @@ -1,43 +1,45 @@ // @ts-check -const eslint = require("@eslint/js"); -const tseslint = require("typescript-eslint"); -const angular = require("angular-eslint"); +const eslint = require('@eslint/js'); +const tseslint = require('typescript-eslint'); +const angular = require('angular-eslint'); +const eslintPluginPrettierRecommended = require('eslint-plugin-prettier/recommended'); module.exports = tseslint.config( - { - files: ["**/*.ts"], - extends: [ - eslint.configs.recommended, - ...tseslint.configs.recommended, - ...tseslint.configs.stylistic, - ...angular.configs.tsRecommended, - ], - processor: angular.processInlineTemplates, - rules: { - "@angular-eslint/directive-selector": [ - "error", - { - type: "attribute", - prefix: "app", - style: "camelCase", + { + files: ['**/*.ts'], + extends: [ + eslint.configs.recommended, + ...tseslint.configs.recommended, + ...tseslint.configs.stylistic, + ...angular.configs.tsRecommended, + eslintPluginPrettierRecommended, + ], + processor: angular.processInlineTemplates, + rules: { + '@angular-eslint/directive-selector': [ + 'error', + { + type: 'attribute', + prefix: 'app', + style: 'camelCase', + }, + ], + '@angular-eslint/component-selector': [ + 'error', + { + type: 'element', + prefix: 'app', + style: 'kebab-case', + }, + ], }, - ], - "@angular-eslint/component-selector": [ - "error", - { - type: "element", - prefix: "app", - style: "kebab-case", - }, - ], }, - }, - { - files: ["**/*.html"], - extends: [ - ...angular.configs.templateRecommended, - ...angular.configs.templateAccessibility, - ], - rules: {}, - } + { + files: ['**/*.html'], + extends: [ + ...angular.configs.templateRecommended, + ...angular.configs.templateAccessibility, + ], + rules: {}, + }, ); diff --git a/frontend/package-lock.json b/frontend/package-lock.json index aaecb18c78..4db6cb7e9e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -27,12 +27,16 @@ "@types/jasmine": "~5.1.0", "angular-eslint": "18.3.1", "eslint": "^9.9.1", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", "jasmine-core": "~5.2.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", + "prettier": "^3.3.3", + "prettier-eslint": "^16.3.0", "typescript": "~5.5.2", "typescript-eslint": "8.2.0" } @@ -3115,6 +3119,22 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -3129,6 +3149,14 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/@humanwhocodes/retry": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", @@ -3478,6 +3506,19 @@ "node": ">=8" } }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -4133,6 +4174,19 @@ "node": ">=14" } }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.20.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", @@ -4454,6 +4508,13 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, "node_modules/@sindresorhus/merge-streams": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", @@ -5442,6 +5503,13 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, "node_modules/@vitejs/plugin-basic-ssl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.1.0.tgz", @@ -6739,6 +6807,16 @@ "dev": true, "license": "ISC" }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -7424,6 +7502,13 @@ "node": ">=8" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, "node_modules/dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", @@ -7437,6 +7522,19 @@ "node": ">=6" } }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", @@ -7878,6 +7976,50 @@ } } }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "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 + } + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", @@ -8475,6 +8617,13 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -8981,6 +9130,29 @@ "dev": true, "license": "MIT" }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -10915,6 +11087,91 @@ "node": ">=8.0" } }, + "node_modules/loglevel": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", + "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/loglevel-colored-level-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", + "integrity": "sha512-u45Wcxxc+SdAlh4yeF/uKlC1SPUPCy0gullSNKXod5I4bmifzk+Q4lSLExNEVn19tGaJipbZ4V4jbFn79/6mVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^1.1.3", + "loglevel": "^1.4.1" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -12665,110 +12922,774 @@ "node": ">= 0.8.0" } }, - "node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true, - "license": "MIT" - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true, - "license": "ISC" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "bin": { + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/prettier-eslint": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-16.3.0.tgz", + "integrity": "sha512-Lh102TIFCr11PJKUMQ2kwNmxGhTsv/KzUg9QYF2Gkw259g/kPgndZDWavk7/ycbRvj2oz4BPZ1gCU8bhfZH/Xg==", "dev": true, "license": "MIT", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "@typescript-eslint/parser": "^6.7.5", + "common-tags": "^1.4.0", + "dlv": "^1.1.0", + "eslint": "^8.7.0", + "indent-string": "^4.0.0", + "lodash.merge": "^4.6.0", + "loglevel-colored-level-prefix": "^1.0.0", + "prettier": "^3.0.1", + "pretty-format": "^29.7.0", + "require-relative": "^0.8.7", + "typescript": "^5.2.2", + "vue-eslint-parser": "^9.1.0" }, "engines": { - "node": ">= 0.10" + "node": ">=16.10.0" + }, + "peerDependencies": { + "prettier-plugin-svelte": "^3.0.0", + "svelte-eslint-parser": "*" + }, + "peerDependenciesMeta": { + "prettier-plugin-svelte": { + "optional": true + }, + "svelte-eslint-parser": { + "optional": true + } } }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/prettier-eslint/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">= 0.10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "node_modules/prettier-eslint/node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.9" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "node_modules/prettier-eslint/node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "BSD-2-Clause", "dependencies": { - "side-channel": "^1.0.6" + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" }, "engines": { - "node": ">=0.6" + "node": "^16.0.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/prettier-eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/prettier-eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prettier-eslint/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/prettier-eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/prettier-eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/prettier-eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/prettier-eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier-eslint/node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "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.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/prettier-eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/prettier-eslint/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/prettier-eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/prettier-eslint/node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/prettier-eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier-eslint/node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/prettier-eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/prettier-eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier-eslint/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier-eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier-eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/prettier-eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier-eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier-eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier-eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier-eslint/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier-eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prettier-eslint/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier-eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/proc-log": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", + "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", @@ -12825,6 +13746,13 @@ "node": ">= 0.8" } }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -12977,6 +13905,13 @@ "node": ">=0.10.0" } }, + "node_modules/require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==", + "dev": true, + "license": "MIT" + }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -14167,6 +15102,23 @@ "node": ">=0.10" } }, + "node_modules/synckit": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -15482,6 +16434,76 @@ "node": ">=0.10.0" } }, + "node_modules/vue-eslint-parser": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, "node_modules/watchpack": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index b06fb0b5d1..cc9bb1491a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -30,13 +30,17 @@ "@types/jasmine": "~5.1.0", "angular-eslint": "18.3.1", "eslint": "^9.9.1", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", "jasmine-core": "~5.2.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", + "prettier": "^3.3.3", + "prettier-eslint": "^16.3.0", "typescript": "~5.5.2", "typescript-eslint": "8.2.0" } -} \ No newline at end of file +} diff --git a/frontend/src/app/app.component.spec.ts b/frontend/src/app/app.component.spec.ts index a6b0ab9d5e..4c51fc5c91 100644 --- a/frontend/src/app/app.component.spec.ts +++ b/frontend/src/app/app.component.spec.ts @@ -2,28 +2,28 @@ import { TestBed } from '@angular/core/testing'; import { AppComponent } from './app.component'; describe('AppComponent', () => { - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [AppComponent], - }).compileComponents(); - }); + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [AppComponent], + }).compileComponents(); + }); - it('should create the app', () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); - it(`should have the 'frontend' title`, () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app.title).toEqual('frontend'); - }); + it(`should have the 'frontend' title`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app.title).toEqual('frontend'); + }); - it('should render title', () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('h1')?.textContent).toContain('Hello, frontend'); - }); + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('h1')?.textContent).toContain('Hello, frontend'); + }); }); diff --git a/frontend/src/app/app.component.ts b/frontend/src/app/app.component.ts index 0c44972ea0..b7a2b9f112 100644 --- a/frontend/src/app/app.component.ts +++ b/frontend/src/app/app.component.ts @@ -2,12 +2,12 @@ import { Component } from '@angular/core'; import { RouterOutlet } from '@angular/router'; @Component({ - selector: 'app-root', - standalone: true, - imports: [RouterOutlet], - templateUrl: './app.component.html', - styleUrl: './app.component.css' + selector: 'app-root', + standalone: true, + imports: [RouterOutlet], + templateUrl: './app.component.html', + styleUrl: './app.component.css', }) export class AppComponent { - title = 'frontend'; + title = 'frontend'; } diff --git a/frontend/src/app/app.config.ts b/frontend/src/app/app.config.ts index a1e7d6f864..384e1136e8 100644 --- a/frontend/src/app/app.config.ts +++ b/frontend/src/app/app.config.ts @@ -4,5 +4,5 @@ import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; export const appConfig: ApplicationConfig = { - providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes)] + providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes)], }; diff --git a/frontend/src/main.ts b/frontend/src/main.ts index 35b00f3463..7180ec1a32 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -2,5 +2,4 @@ import { bootstrapApplication } from '@angular/platform-browser'; import { appConfig } from './app/app.config'; import { AppComponent } from './app/app.component'; -bootstrapApplication(AppComponent, appConfig) - .catch((err) => console.error(err)); +bootstrapApplication(AppComponent, appConfig).catch(err => console.error(err)); From d5a11c111d5960be137bf9b2031a3bb3b7eb1279 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Thu, 12 Sep 2024 15:23:48 +0800 Subject: [PATCH 007/188] Remove ghost files --- package-lock.json | 6 ------ package.json | 1 - 2 files changed, 7 deletions(-) delete mode 100644 package-lock.json delete mode 100644 package.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index e97f7809da..0000000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "cs3219-ay2425s1-project-g03", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} diff --git a/package.json b/package.json deleted file mode 100644 index 0967ef424b..0000000000 --- a/package.json +++ /dev/null @@ -1 +0,0 @@ -{} From 8d2d223fb891ec5d3150f684f1582da66fcfe3cf Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Thu, 12 Sep 2024 16:30:11 +0800 Subject: [PATCH 008/188] Slim Prettier * Remove eslint-config-prettier as it is already shipped in eslint-plugin-prettier --- frontend/.prettierignore | 2 -- frontend/package-lock.json | 3 ++- frontend/package.json | 1 - 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/frontend/.prettierignore b/frontend/.prettierignore index 1fa281384d..420f9273b6 100644 --- a/frontend/.prettierignore +++ b/frontend/.prettierignore @@ -1,5 +1,3 @@ -# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. - # Compiled output /dist /tmp diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 4db6cb7e9e..8698d865dd 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -27,7 +27,6 @@ "@types/jasmine": "~5.1.0", "angular-eslint": "18.3.1", "eslint": "^9.9.1", - "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", "jasmine-core": "~5.2.0", "karma": "~6.4.0", @@ -7982,6 +7981,8 @@ "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "license": "MIT", + "optional": true, + "peer": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, diff --git a/frontend/package.json b/frontend/package.json index cc9bb1491a..6de9739932 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -30,7 +30,6 @@ "@types/jasmine": "~5.1.0", "angular-eslint": "18.3.1", "eslint": "^9.9.1", - "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.2.1", "jasmine-core": "~5.2.0", "karma": "~6.4.0", From 8c48a6ebc23b35c7af75b1e607f3527239eb925e Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Thu, 12 Sep 2024 16:39:01 +0800 Subject: [PATCH 009/188] Remove vscode files --- frontend/.vscode/extensions.json | 4 --- frontend/.vscode/launch.json | 20 --------------- frontend/.vscode/tasks.json | 42 -------------------------------- 3 files changed, 66 deletions(-) delete mode 100644 frontend/.vscode/extensions.json delete mode 100644 frontend/.vscode/launch.json delete mode 100644 frontend/.vscode/tasks.json diff --git a/frontend/.vscode/extensions.json b/frontend/.vscode/extensions.json deleted file mode 100644 index 77b374577d..0000000000 --- a/frontend/.vscode/extensions.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 - "recommendations": ["angular.ng-template"] -} diff --git a/frontend/.vscode/launch.json b/frontend/.vscode/launch.json deleted file mode 100644 index 925af83705..0000000000 --- a/frontend/.vscode/launch.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - { - "name": "ng serve", - "type": "chrome", - "request": "launch", - "preLaunchTask": "npm: start", - "url": "http://localhost:4200/" - }, - { - "name": "ng test", - "type": "chrome", - "request": "launch", - "preLaunchTask": "npm: test", - "url": "http://localhost:9876/debug.html" - } - ] -} diff --git a/frontend/.vscode/tasks.json b/frontend/.vscode/tasks.json deleted file mode 100644 index a298b5bd87..0000000000 --- a/frontend/.vscode/tasks.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "start", - "isBackground": true, - "problemMatcher": { - "owner": "typescript", - "pattern": "$tsc", - "background": { - "activeOnStart": true, - "beginsPattern": { - "regexp": "(.*?)" - }, - "endsPattern": { - "regexp": "bundle generation complete" - } - } - } - }, - { - "type": "npm", - "script": "test", - "isBackground": true, - "problemMatcher": { - "owner": "typescript", - "pattern": "$tsc", - "background": { - "activeOnStart": true, - "beginsPattern": { - "regexp": "(.*?)" - }, - "endsPattern": { - "regexp": "bundle generation complete" - } - } - } - } - ] -} From cf324f1b519cb0d3bfd297045a03cface408c253 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Thu, 12 Sep 2024 18:11:55 +0800 Subject: [PATCH 010/188] Fix Prettier CR issue --- frontend/eslint.config.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js index 23c7d74b6d..69799f4f8d 100644 --- a/frontend/eslint.config.js +++ b/frontend/eslint.config.js @@ -32,6 +32,13 @@ module.exports = tseslint.config( style: 'kebab-case', }, ], + // https://stackoverflow.com/questions/68816664/get-rid-of-error-delete-eslint-prettier-prettier-and-allow-use-double + 'prettier/prettier': [ + 'error', + { + 'endOfLine': 'auto', + } + ] }, }, { From fd36cdffed956b659c8c4798a2741844a6ad4951 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Thu, 12 Sep 2024 18:48:38 +0800 Subject: [PATCH 011/188] Initialize Question Service --- docker-compose.yml | 12 + services/question/.gitignore | 23 + services/question/Dockerfile | 9 + services/question/package-lock.json | 1149 +++++++++++++++++++++++++++ services/question/package.json | 18 + services/question/server.js | 10 + 6 files changed, 1221 insertions(+) create mode 100644 services/question/.gitignore create mode 100644 services/question/Dockerfile create mode 100644 services/question/package-lock.json create mode 100644 services/question/package.json create mode 100644 services/question/server.js diff --git a/docker-compose.yml b/docker-compose.yml index b4b85facec..776675f7e7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,3 +10,15 @@ services: volumes: - /app/node_modules - ./frontend:/app + + question: + container_name: question + image: question + build: + context: services/question + dockerfile: Dockerfile + ports: + - 8081:8081 + volumes: + - /app/node_modules + - ./services/question:/app diff --git a/services/question/.gitignore b/services/question/.gitignore new file mode 100644 index 0000000000..24cdedf82f --- /dev/null +++ b/services/question/.gitignore @@ -0,0 +1,23 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# production +/build + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* \ No newline at end of file diff --git a/services/question/Dockerfile b/services/question/Dockerfile new file mode 100644 index 0000000000..765691a3af --- /dev/null +++ b/services/question/Dockerfile @@ -0,0 +1,9 @@ +FROM node:20-alpine + +WORKDIR /app +COPY package.json package-lock.json ./ +RUN npm install +COPY . . +EXPOSE 8081 + +CMD ["npm", "start"] \ No newline at end of file diff --git a/services/question/package-lock.json b/services/question/package-lock.json new file mode 100644 index 0000000000..4cde299c6e --- /dev/null +++ b/services/question/package-lock.json @@ -0,0 +1,1149 @@ +{ + "name": "question", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "question", + "version": "0.0.0", + "license": "ISC", + "dependencies": { + "express": "^4.21.0" + }, + "devDependencies": { + "nodemon": "^3.1.4" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "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.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", + "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.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true, + "license": "ISC" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz", + "integrity": "sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true, + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "license": "ISC", + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + } + } +} diff --git a/services/question/package.json b/services/question/package.json new file mode 100644 index 0000000000..38a0915122 --- /dev/null +++ b/services/question/package.json @@ -0,0 +1,18 @@ +{ + "name": "question", + "version": "0.0.0", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "nodemon server.js" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "express": "^4.21.0" + }, + "devDependencies": { + "nodemon": "^3.1.4" + } +} diff --git a/services/question/server.js b/services/question/server.js new file mode 100644 index 0000000000..081c97a115 --- /dev/null +++ b/services/question/server.js @@ -0,0 +1,10 @@ +const express = require("express"); +const app = express(); + +app.get('/', (req, res) => { + res.send('Succesful response.') +}) + +const port = 8081; + +app.listen(port); \ No newline at end of file From 8706ca1d8dfd176a3216e84c1dde1d7fb7d92894 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Thu, 12 Sep 2024 21:23:14 +0800 Subject: [PATCH 012/188] Added DB for question service * Set up MongoDB for question service * Create interface with database * Set up folder structure --- .env.sample | 4 + docker-compose.yml | 17 ++ services/question/app.js | 17 ++ services/question/config/index.js | 7 + services/question/controllers/index.js | 8 + .../controllers/questionController.js | 0 services/question/models/index.js | 18 ++ services/question/models/questionModel.js | 12 + services/question/package-lock.json | 237 +++++++++++++++++- services/question/package.json | 3 +- services/question/routes/index.js | 7 + services/question/routes/questionRoutes.js | 4 + services/question/server.js | 12 +- 13 files changed, 335 insertions(+), 11 deletions(-) create mode 100644 .env.sample create mode 100644 services/question/app.js create mode 100644 services/question/config/index.js create mode 100644 services/question/controllers/index.js create mode 100644 services/question/controllers/questionController.js create mode 100644 services/question/models/index.js create mode 100644 services/question/models/questionModel.js create mode 100644 services/question/routes/index.js create mode 100644 services/question/routes/questionRoutes.js diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000000..6877ddca74 --- /dev/null +++ b/.env.sample @@ -0,0 +1,4 @@ +# This is a sample environment configuration file. +# Copy this file to .env and replace the placeholder values with your own. +QUESTION_DB_USERNAME=user +QUESTION_DB_PASSWORD=password \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 776675f7e7..4c102a3d52 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,8 +17,25 @@ services: build: context: services/question dockerfile: Dockerfile + environment: + MONGODB_USERNAME: ${QUESTION_DB_USERNAME} + MONGODB_PASSWORD: ${QUESTION_DB_PASSWORD} ports: - 8081:8081 volumes: - /app/node_modules - ./services/question:/app + + question-db: + container_name: question-db + image: mongo:7.0.14 + environment: + MONGO_INITDB_ROOT_USERNAME: ${QUESTION_DB_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${QUESTION_DB_PASSWORD} + ports: + - 27017:27017 + volumes: + - question-db:/data/db + +volumes: + question-db: \ No newline at end of file diff --git a/services/question/app.js b/services/question/app.js new file mode 100644 index 0000000000..27acb9bf55 --- /dev/null +++ b/services/question/app.js @@ -0,0 +1,17 @@ +const express = require('express'); +const router = require('./routes'); +const questionRouter = require('./routes/questionRoutes'); +const connectDb = require('./models'); + +const app = express(); + +// Establish database connection +connectDb(); + +// Middleware + +// Routes +app.use('/', router); +app.use('/', questionRouter); + +module.exports = app; diff --git a/services/question/config/index.js b/services/question/config/index.js new file mode 100644 index 0000000000..2392c4e35a --- /dev/null +++ b/services/question/config/index.js @@ -0,0 +1,7 @@ +module.exports = { + PORT: 8081, + MONGODB_USERNAME: process.env.MONGODB_USERNAME, + MONGODB_PASSWORD: process.env.MONGODB_PASSWORD, + MONGODB_URL: 'mongodb://question-db:27017', + MONGODB_DATABASE: 'question', +} diff --git a/services/question/controllers/index.js b/services/question/controllers/index.js new file mode 100644 index 0000000000..78ca0711eb --- /dev/null +++ b/services/question/controllers/index.js @@ -0,0 +1,8 @@ +const getHealth = async (req, res, next) => { + res.status(200).json({ + message: 'Server is up and running!', + }); + return; +}; + +module.exports = getHealth; \ No newline at end of file diff --git a/services/question/controllers/questionController.js b/services/question/controllers/questionController.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/services/question/models/index.js b/services/question/models/index.js new file mode 100644 index 0000000000..769401f7ec --- /dev/null +++ b/services/question/models/index.js @@ -0,0 +1,18 @@ +const mongoose = require('mongoose'); +const { MONGODB_USERNAME, MONGODB_PASSWORD, MONGODB_URL, MONGODB_DATABASE } = require('../config'); + +const connectDb = async () => { + try { + await mongoose.connect(`${MONGODB_URL}/${MONGODB_DATABASE}`, { + authSource: 'admin', + user: MONGODB_USERNAME, + pass: MONGODB_PASSWORD, + }); + console.log('MongoDB connected successfully'); + } catch (error) { + console.error('MongoDB connection error:', error.message); + process.exit(1); + } +}; + +module.exports = connectDb; \ No newline at end of file diff --git a/services/question/models/questionModel.js b/services/question/models/questionModel.js new file mode 100644 index 0000000000..9e3df413d6 --- /dev/null +++ b/services/question/models/questionModel.js @@ -0,0 +1,12 @@ +const mongoose = require('mongoose'); + +const questionSchema = new mongoose.Schema({ + title: String, + description: String, + categories: [String], + complexity: String, +}); + +const Question = mongoose.model('Question', questionSchema); + +module.exports = Question; diff --git a/services/question/package-lock.json b/services/question/package-lock.json index 4cde299c6e..d0917837fc 100644 --- a/services/question/package-lock.json +++ b/services/question/package-lock.json @@ -9,12 +9,37 @@ "version": "0.0.0", "license": "ISC", "dependencies": { - "express": "^4.21.0" + "express": "^4.21.0", + "mongoose": "^8.6.2" }, "devDependencies": { "nodemon": "^3.1.4" } }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz", + "integrity": "sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==", + "license": "MIT", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "license": "MIT" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "license": "MIT", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -116,6 +141,15 @@ "node": ">=8" } }, + "node_modules/bson": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", + "integrity": "sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.20.1" + } + }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -621,6 +655,15 @@ "node": ">=0.12.0" } }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -630,6 +673,12 @@ "node": ">= 0.6" } }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "license": "MIT" + }, "node_modules/merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", @@ -694,6 +743,134 @@ "node": "*" } }, + "node_modules/mongodb": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.8.0.tgz", + "integrity": "sha512-HGQ9NWDle5WvwMnrvUxsFYPd3JEbqD3RgABHBQRuoCEND0qzhsd0iH5ypHsf1eJ+sXmvmyKpP+FLOKY8Il7jMw==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.7.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "license": "Apache-2.0", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.6.2.tgz", + "integrity": "sha512-ErbDVvuUzUfyQpXvJ6sXznmZDICD8r6wIsa0VKjJtB6/LZncqwUn5Um040G1BaNo6L3Jz+xItLSwT0wZmSmUaQ==", + "license": "MIT", + "dependencies": { + "bson": "^6.7.0", + "kareem": "2.6.3", + "mongodb": "6.8.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "license": "MIT", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -845,6 +1022,15 @@ "dev": true, "license": "MIT" }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", @@ -1031,6 +1217,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", + "license": "MIT" + }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -1044,6 +1236,15 @@ "node": ">=10" } }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "license": "MIT", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -1098,6 +1299,18 @@ "nodetouch": "bin/nodetouch.js" } }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1144,6 +1357,28 @@ "engines": { "node": ">= 0.8" } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "license": "MIT", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } } } } diff --git a/services/question/package.json b/services/question/package.json index 38a0915122..aa28f0f7c3 100644 --- a/services/question/package.json +++ b/services/question/package.json @@ -10,7 +10,8 @@ "license": "ISC", "description": "", "dependencies": { - "express": "^4.21.0" + "express": "^4.21.0", + "mongoose": "^8.6.2" }, "devDependencies": { "nodemon": "^3.1.4" diff --git a/services/question/routes/index.js b/services/question/routes/index.js new file mode 100644 index 0000000000..f76a7f6a53 --- /dev/null +++ b/services/question/routes/index.js @@ -0,0 +1,7 @@ +const express = require('express'); +const getHealth = require('../controllers'); +const router = express.Router(); + +router.get('/ht', getHealth); + +module.exports = router; \ No newline at end of file diff --git a/services/question/routes/questionRoutes.js b/services/question/routes/questionRoutes.js new file mode 100644 index 0000000000..f577a6cab6 --- /dev/null +++ b/services/question/routes/questionRoutes.js @@ -0,0 +1,4 @@ +const express = require('express'); +const router = express.Router(); + +module.exports = router; diff --git a/services/question/server.js b/services/question/server.js index 081c97a115..d3ea6bb6fc 100644 --- a/services/question/server.js +++ b/services/question/server.js @@ -1,10 +1,4 @@ -const express = require("express"); -const app = express(); +const app = require('./app'); +const { PORT } = require('./config'); -app.get('/', (req, res) => { - res.send('Succesful response.') -}) - -const port = 8081; - -app.listen(port); \ No newline at end of file +app.listen(PORT, () => console.log(`App is running on port ${PORT}.`)); From 936c92686f8a2ed9f980f12a49677723ee8e0b40 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Thu, 12 Sep 2024 21:58:26 +0800 Subject: [PATCH 013/188] Restrict DB access --- docker-compose.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 4c102a3d52..bd3927bac2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -32,8 +32,6 @@ services: environment: MONGO_INITDB_ROOT_USERNAME: ${QUESTION_DB_USERNAME} MONGO_INITDB_ROOT_PASSWORD: ${QUESTION_DB_PASSWORD} - ports: - - 27017:27017 volumes: - question-db:/data/db From 6f1d3939da623df8a90f813353b6ee76603f915f Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Thu, 12 Sep 2024 22:53:52 +0800 Subject: [PATCH 014/188] Initialize sample questions The question service now syncs with questions.json upon start up. --- docker-compose.yml | 2 + services/question/app.js | 2 + services/question/config/questions.json | 142 ++++++++++++++++++++++ services/question/models/questionModel.js | 3 +- services/question/setup.js | 27 ++++ 5 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 services/question/config/questions.json create mode 100644 services/question/setup.js diff --git a/docker-compose.yml b/docker-compose.yml index bd3927bac2..d21217a2ca 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,6 +17,8 @@ services: build: context: services/question dockerfile: Dockerfile + depends_on: + - question-db environment: MONGODB_USERNAME: ${QUESTION_DB_USERNAME} MONGODB_PASSWORD: ${QUESTION_DB_PASSWORD} diff --git a/services/question/app.js b/services/question/app.js index 27acb9bf55..6c3d680852 100644 --- a/services/question/app.js +++ b/services/question/app.js @@ -2,11 +2,13 @@ const express = require('express'); const router = require('./routes'); const questionRouter = require('./routes/questionRoutes'); const connectDb = require('./models'); +const syncQuestions = require('./setup'); const app = express(); // Establish database connection connectDb(); +syncQuestions(); // Middleware diff --git a/services/question/config/questions.json b/services/question/config/questions.json new file mode 100644 index 0000000000..3a76ea8ed7 --- /dev/null +++ b/services/question/config/questions.json @@ -0,0 +1,142 @@ +[ + { + "id": 1, + "title": "Reverse a String", + "description": "Write a function that reverses a string. The input string is given as an array of characters s.\n\nYou must do this by modifying the input array in-place with O(1) extra memory.\n\n\nExample 1:\n\nInput: s = [\"h\",\"e\",\"l\",\"l\",\"o\"]\nOutput: [\"o\",\"l\",\"l\",\"e\",\"h\"]\n\nExample 2:\nInput: s = [\"H\",\"a\",\"n\",\"n\",\"a\",\"h\"]\nOutput: [\"h\",\"a\",\"n\",\"n\",\"a\",\"H\"]\n\nConstraints:\n1 <= s.length <= 105 s[i] is a printable ascii character.", + "categories": ["Strings", "Algorithms"], + "complexity": "Easy" + }, + { + "id": 2, + "title": "Linked List Cycle Detection", + "description": "Implement a function to detect if a linked list contains a cycle.", + "categories": ["Data Structures", "Algorithms"], + "complexity": "Easy" + }, + { + "id": 3, + "title": "Roman to Integer", + "description": "Given a roman numeral, convert it to an integer.", + "categories": ["Algorithms"], + "complexity": "Easy" + }, + { + "id": 4, + "title": "Add Binary", + "description": "Given two binary strings a and b, return their sum as a binary string.", + "categories": ["Bit Manipulation", "Algorithms"], + "complexity": "Easy" + }, + { + "id": 5, + "title": "Fibonacci Number", + "description": "The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1. That is,\n\nF(0) = 0, F(1) = 1 F(n) = F(n - 1) + F(n - 2), for n > 1.\n\nGiven n, calculate F(n).", + "categories": ["Recursion", "Algorithms"], + "complexity": "Easy" + }, + { + "id": 6, + "title": "Implement Stack using Queues", + "description": "Implement a last-in first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (push, top, pop, and empty).", + "categories": ["Data Structures"], + "complexity": "Easy" + }, + { + "id": 7, + "title": "Combine Two Tables", + "description": "Given table Person with the following columns:\n1. personId (int)\n2. lastName (varchar)\n3. firstName (varchar)\npersonId is the primary key.\n\nAnd table Address with the following columns:\n1. addressId (int)\n2. personId (int)\n3. city (varchar)\n4. state (varchar)\naddressId is the primary key.\n\nWrite a solution to report the first name, last name, city, and state of each person in the Person table. If the address of a personId is not present in the Address table, report null instead. Return the result table in any order.", + "categories": ["Databases"], + "complexity": "Easy" + }, + { + "id": 8, + "title": "Repeated DNA Sequences", + "description": "The DNA sequence is composed of a series of nucleotides abbreviated as 'A', 'C', 'G', and 'T'.\n\nFor example, \"ACGAATTCCG\" is a DNA sequence. When studying DNA, it is useful to identify repeated sequences within the DNA.\n\nGiven a string s that represents a DNA sequence, return all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule. You may return the answer in any order.", + "categories": ["Algorithms", "Bit Manipulation"], + "complexity": "Medium" + }, + { + "id": 9, + "title": "Course Schedule", + "description": "There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1. You are given an array prerequisites where prerequisites[i] = [ai, bi] indicates that you must take course bi first if you want to take course ai.\n\nFor example, the pair [0, 1], indicates that to take course 0 you have to first take course 1. Return true if you can finish all courses. Otherwise, return false.", + "categories": ["Data Structures", "Algorithms"], + "complexity": "Medium" + }, + { + "id": 10, + "title": "LRU Cache Design", + "description": "Design and implement an LRU (Least Recently Used) cache.", + "categories": ["Data Structures"], + "complexity": "Medium" + }, + { + "id": 11, + "title": "Longest Common Subsequence", + "description": "Given two strings text1 and text2, return the length of their longest common subsequence. If there is no common subsequence, return 0.\n\nA subsequence of a string is a new string generated from the original string with some characters (can be none) deleted without changing the relative order of the remaining characters.\n\nFor example, \"ace\" is a subsequence of \"abcde\". A common subsequence of two strings is a subsequence that is common to both strings.", + "categories": ["Strings", "Algorithms"], + "complexity": "Medium" + }, + { + "id": 12, + "title": "Rotate Image", + "description": "You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).", + "categories": ["Arrays", "Algorithms"], + "complexity": "Medium" + }, + { + "id": 13, + "title": "Airplane Seat Assignment Probability", + "description": "n passengers board an airplane with exactly n seats. The first passenger has lost the ticket and picks a seat randomly. But after that, the rest of the passengers will:\nTake their own seat if it is still available, and Pick other seats randomly when they find their seat occupied\n\nReturn the probability that the nth person gets his own seat.", + "categories": ["Brainteaser"], + "complexity": "Medium" + }, + { + "id": 14, + "title": "Validate Binary Search Tree", + "description": "Given the root of a binary tree, determine if it is a valid binary search tree (BST).", + "categories": ["Data Structures", "Algorithms"], + "complexity": "Medium" + }, + { + "id": 15, + "title": "Sliding Window Maximum", + "description": "You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.\n\nReturn the max sliding window.", + "categories": ["Arrays", "Algorithms"], + "complexity": "Hard" + }, + { + "id": 16, + "title": "N-Queen Problem", + "description": "The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other.\n\nGiven an integer n, return all distinct solutions to the n queens puzzle. You may return the answer in any order.\n\nEach solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space, respectively.", + "categories": ["Algorithms"], + "complexity": "Hard" + }, + { + "id": 17, + "title": "Serialize and Deserialize a Binary Tree", + "description": "Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.\n\nDesign an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserializ ation algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.", + "categories": ["Data Structures", "Algorithms"], + "complexity": "Hard" + }, + { + "id": 18, + "title": "Wildcard Matching", + "description": "Given an input string (s) and a pattern (p), implement wildcard pattern matching with support for '?' and '*' where:\n\n'?' Matches any single character. '*' Matches any sequence of characters (including the empty sequence).\nThe matching should cover the entire input string (not partial).", + "categories": ["Strings", "Algorithms"], + "complexity": "Hard" + }, + { + "id": 19, + "title": "Chalkboard XOR Game", + "description": "You are given an array of integers nums represents the numbers written on a chalkboard.\n\nAlice and Bob take turns erasing exactly one number from the chalkboard, with Alice starting first. If erasing a number causes the bitwise XOR of all the elements of the chalkboard to become 0, then that player loses. The bitwise XOR of one element is that element itself, and the bitwise XOR of no elements is 0.\n\nAlso, if any player starts their turn with the bitwise XOR of all the elements of the chalkboard equal to 0, then that player wins.\n\nReturn true if and only if Alice wins the game, assuming both players play optimally.", + "categories": ["Brainteaser"], + "complexity": "Hard" + }, + { + "id": 20, + "title": "Trips and Users", + "description": "Given table Trips:\n1. id (int)\n2. client_id (int)\n3. driver_id (int)\n4. city_id (int)\n5. status (enum)\n6. request_at(da te)\nid is the primary key.\nThe table holds all taxi trips. Each trip has a unique id, while client_id and driver_id are foreign keys to the users_id at the Users table. Status is an ENUM (category) type of ('completed', 'cancelled_by_driver', 'cancelled_by_client').\n\nAnd table Users:\n1. users_id (int)\n2. banned (enum)\n3. role (enum)\nusers_id is the primary key (column with unique values) for this table. The table holds all users. Each user has a unique users_id, and role is an ENUM type of ('client', 'driver', 'partner'). banned is an ENUM (category) type of ('Yes', 'No'). The cancellation rate is computed by dividing the number of canceled (by client or driver) requests with unbanned users by the total number of requests with unbanned users on that day.\n\nWrite a solution to find the cancellation rate of requests with unbanned users (both client and driver must not be banned) each day between \"2013-10-01\" and \"2013-10-03\". Round Cancellation Rate to two decimal points.\n\nReturn the result table in any order.", + "categories": ["Databases"], + "complexity": "Hard" + } +] \ No newline at end of file diff --git a/services/question/models/questionModel.js b/services/question/models/questionModel.js index 9e3df413d6..825d6333a1 100644 --- a/services/question/models/questionModel.js +++ b/services/question/models/questionModel.js @@ -1,11 +1,12 @@ const mongoose = require('mongoose'); const questionSchema = new mongoose.Schema({ + id: { type: Number, unique: true }, title: String, description: String, categories: [String], complexity: String, -}); +}, { versionKey: false }); const Question = mongoose.model('Question', questionSchema); diff --git a/services/question/setup.js b/services/question/setup.js new file mode 100644 index 0000000000..e90f5efeed --- /dev/null +++ b/services/question/setup.js @@ -0,0 +1,27 @@ +const fs = require('fs'); +const Question = require('./models/questionModel'); + +const getQuestions = () => { + const data = fs.readFileSync('./config/questions.json'); + return JSON.parse(data); +} + +const syncQuestions = async () => { + try { + const questions = getQuestions(); + + const ops = questions.map(item => ({ + updateOne: { + filter: { id: item.id }, + update: item, + upsert: true, + } + })); + Question.bulkWrite(ops); + } catch { + console.log('Error syncing questions: ', error.message); + process.exit(1); + } +} + +module.exports = syncQuestions; \ No newline at end of file From e9cb3a75592dc99112179eabda2e2506fdc6c717 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Thu, 12 Sep 2024 23:08:20 +0800 Subject: [PATCH 015/188] Tighten question schema --- services/question/models/questionModel.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/question/models/questionModel.js b/services/question/models/questionModel.js index 825d6333a1..cd2150e860 100644 --- a/services/question/models/questionModel.js +++ b/services/question/models/questionModel.js @@ -1,11 +1,11 @@ const mongoose = require('mongoose'); const questionSchema = new mongoose.Schema({ - id: { type: Number, unique: true }, + id: { type: Number, required: true, unique: true }, title: String, description: String, categories: [String], - complexity: String, + complexity: { type: String, enum: ['Easy', 'Medium', 'Difficult'] }, }, { versionKey: false }); const Question = mongoose.model('Question', questionSchema); From f038e253d21b2d43ebf51ce252d27b2ca78f7ac2 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Thu, 12 Sep 2024 23:12:02 +0800 Subject: [PATCH 016/188] Add demo questions API * The API endpoint can be accessed at http://localhost:8081/questions --- services/question/controllers/questionController.js | 12 ++++++++++++ services/question/routes/questionRoutes.js | 3 +++ 2 files changed, 15 insertions(+) diff --git a/services/question/controllers/questionController.js b/services/question/controllers/questionController.js index e69de29bb2..0baf09876b 100644 --- a/services/question/controllers/questionController.js +++ b/services/question/controllers/questionController.js @@ -0,0 +1,12 @@ +const Question = require('../models/questionModel'); + +const getQuestions = async (req, res) => { + const questions = await Question.find(); + const questionTitles = questions.map(q => q.title); + res.status(200).json({ + message: 'These are all the question titles:' + questionTitles, + }); + return; +}; + +module.exports = getQuestions; \ No newline at end of file diff --git a/services/question/routes/questionRoutes.js b/services/question/routes/questionRoutes.js index f577a6cab6..cd3ebdd5a8 100644 --- a/services/question/routes/questionRoutes.js +++ b/services/question/routes/questionRoutes.js @@ -1,4 +1,7 @@ const express = require('express'); +const getQuestions = require('../controllers/questionController'); const router = express.Router(); +router.get('/questions', getQuestions) + module.exports = router; From 5f754298dfa4332c4284dfbb239864f8d3404207 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 13 Sep 2024 00:16:13 +0800 Subject: [PATCH 017/188] Clean up code --- docker-compose.yml | 2 -- services/question/app.js | 3 ++- services/question/models/index.js | 21 +++++++++++---------- services/question/setup.js | 11 +++++------ 4 files changed, 18 insertions(+), 19 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index d21217a2ca..bd3927bac2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,8 +17,6 @@ services: build: context: services/question dockerfile: Dockerfile - depends_on: - - question-db environment: MONGODB_USERNAME: ${QUESTION_DB_USERNAME} MONGODB_PASSWORD: ${QUESTION_DB_PASSWORD} diff --git a/services/question/app.js b/services/question/app.js index 6c3d680852..c19459a882 100644 --- a/services/question/app.js +++ b/services/question/app.js @@ -3,12 +3,13 @@ const router = require('./routes'); const questionRouter = require('./routes/questionRoutes'); const connectDb = require('./models'); const syncQuestions = require('./setup'); +const mongoose = require('mongoose'); const app = express(); // Establish database connection connectDb(); -syncQuestions(); +mongoose.connection.once('open', async () => await syncQuestions()); // Middleware diff --git a/services/question/models/index.js b/services/question/models/index.js index 769401f7ec..0ff00ef68b 100644 --- a/services/question/models/index.js +++ b/services/question/models/index.js @@ -1,18 +1,19 @@ const mongoose = require('mongoose'); const { MONGODB_USERNAME, MONGODB_PASSWORD, MONGODB_URL, MONGODB_DATABASE } = require('../config'); -const connectDb = async () => { - try { - await mongoose.connect(`${MONGODB_URL}/${MONGODB_DATABASE}`, { - authSource: 'admin', - user: MONGODB_USERNAME, - pass: MONGODB_PASSWORD, - }); - console.log('MongoDB connected successfully'); - } catch (error) { +const connectDb = () => { + const connectionString = `${MONGODB_URL}/${MONGODB_DATABASE}` + + mongoose.connect(connectionString, { + authSource: 'admin', + user: MONGODB_USERNAME, + pass: MONGODB_PASSWORD, + }) + .then(() => console.log('MongoDB connected successfully')) + .catch((error) => { console.error('MongoDB connection error:', error.message); process.exit(1); - } + }) }; module.exports = connectDb; \ No newline at end of file diff --git a/services/question/setup.js b/services/question/setup.js index e90f5efeed..66609b21f5 100644 --- a/services/question/setup.js +++ b/services/question/setup.js @@ -1,15 +1,14 @@ -const fs = require('fs'); +const fs = require('fs/promises'); const Question = require('./models/questionModel'); -const getQuestions = () => { - const data = fs.readFileSync('./config/questions.json'); +const getQuestions = async () => { + const data = await fs.readFile('./config/questions.json', { encoding: 'utf8' }); return JSON.parse(data); } const syncQuestions = async () => { try { - const questions = getQuestions(); - + const questions = await getQuestions(); const ops = questions.map(item => ({ updateOne: { filter: { id: item.id }, @@ -17,7 +16,7 @@ const syncQuestions = async () => { upsert: true, } })); - Question.bulkWrite(ops); + await Question.bulkWrite(ops); } catch { console.log('Error syncing questions: ', error.message); process.exit(1); From b1fccbfd9f03654f7ce89c9cbc5a3376018418de Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 13 Sep 2024 01:20:32 +0800 Subject: [PATCH 018/188] Update Question to use TS --- services/question/.gitignore | 1 + services/question/app.js | 20 -- services/question/config/index.js | 7 - services/question/controllers/index.js | 8 - services/question/models/questionModel.js | 13 - services/question/package-lock.json | 322 +++++++++++++++++- services/question/package.json | 10 +- services/question/routes/index.js | 7 - services/question/routes/questionRoutes.js | 7 - services/question/setup.js | 26 -- services/question/src/app.ts | 20 ++ services/question/src/config/index.ts | 5 + .../question/{ => src}/config/questions.json | 0 services/question/src/controllers/index.ts | 10 + .../controllers/questionController.ts} | 7 +- .../{models/index.js => src/models/index.ts} | 6 +- services/question/src/models/questionModel.ts | 21 ++ services/question/src/routes/index.ts | 7 + .../question/src/routes/questionRoutes.ts | 7 + .../question/{server.js => src/server.ts} | 4 +- services/question/src/setup.ts | 31 ++ services/question/tsconfig.json | 14 + 22 files changed, 453 insertions(+), 100 deletions(-) delete mode 100644 services/question/app.js delete mode 100644 services/question/config/index.js delete mode 100644 services/question/controllers/index.js delete mode 100644 services/question/models/questionModel.js delete mode 100644 services/question/routes/index.js delete mode 100644 services/question/routes/questionRoutes.js delete mode 100644 services/question/setup.js create mode 100644 services/question/src/app.ts create mode 100644 services/question/src/config/index.ts rename services/question/{ => src}/config/questions.json (100%) create mode 100644 services/question/src/controllers/index.ts rename services/question/{controllers/questionController.js => src/controllers/questionController.ts} (58%) rename services/question/{models/index.js => src/models/index.ts} (72%) create mode 100644 services/question/src/models/questionModel.ts create mode 100644 services/question/src/routes/index.ts create mode 100644 services/question/src/routes/questionRoutes.ts rename services/question/{server.js => src/server.ts} (51%) create mode 100644 services/question/src/setup.ts create mode 100644 services/question/tsconfig.json diff --git a/services/question/.gitignore b/services/question/.gitignore index 24cdedf82f..931232e706 100644 --- a/services/question/.gitignore +++ b/services/question/.gitignore @@ -10,6 +10,7 @@ # production /build +/dist # misc .DS_Store diff --git a/services/question/app.js b/services/question/app.js deleted file mode 100644 index c19459a882..0000000000 --- a/services/question/app.js +++ /dev/null @@ -1,20 +0,0 @@ -const express = require('express'); -const router = require('./routes'); -const questionRouter = require('./routes/questionRoutes'); -const connectDb = require('./models'); -const syncQuestions = require('./setup'); -const mongoose = require('mongoose'); - -const app = express(); - -// Establish database connection -connectDb(); -mongoose.connection.once('open', async () => await syncQuestions()); - -// Middleware - -// Routes -app.use('/', router); -app.use('/', questionRouter); - -module.exports = app; diff --git a/services/question/config/index.js b/services/question/config/index.js deleted file mode 100644 index 2392c4e35a..0000000000 --- a/services/question/config/index.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - PORT: 8081, - MONGODB_USERNAME: process.env.MONGODB_USERNAME, - MONGODB_PASSWORD: process.env.MONGODB_PASSWORD, - MONGODB_URL: 'mongodb://question-db:27017', - MONGODB_DATABASE: 'question', -} diff --git a/services/question/controllers/index.js b/services/question/controllers/index.js deleted file mode 100644 index 78ca0711eb..0000000000 --- a/services/question/controllers/index.js +++ /dev/null @@ -1,8 +0,0 @@ -const getHealth = async (req, res, next) => { - res.status(200).json({ - message: 'Server is up and running!', - }); - return; -}; - -module.exports = getHealth; \ No newline at end of file diff --git a/services/question/models/questionModel.js b/services/question/models/questionModel.js deleted file mode 100644 index cd2150e860..0000000000 --- a/services/question/models/questionModel.js +++ /dev/null @@ -1,13 +0,0 @@ -const mongoose = require('mongoose'); - -const questionSchema = new mongoose.Schema({ - id: { type: Number, required: true, unique: true }, - title: String, - description: String, - categories: [String], - complexity: { type: String, enum: ['Easy', 'Medium', 'Difficult'] }, -}, { versionKey: false }); - -const Question = mongoose.model('Question', questionSchema); - -module.exports = Question; diff --git a/services/question/package-lock.json b/services/question/package-lock.json index d0917837fc..cd77751c70 100644 --- a/services/question/package-lock.json +++ b/services/question/package-lock.json @@ -13,7 +13,52 @@ "mongoose": "^8.6.2" }, "devDependencies": { - "nodemon": "^3.1.4" + "@types/express": "^4.17.21", + "@types/node": "^22.5.4", + "nodemon": "^3.1.4", + "ts-node": "^10.9.2", + "typescript": "^5.6.2" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@mongodb-js/saslprep": { @@ -25,6 +70,142 @@ "sparse-bitfield": "^3.0.3" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.5.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", + "integrity": "sha512-FDuKUJQm/ju9fT/SeX/6+gBzoPzlVCzfzmGkwKvRHQVxi4BntVbyIwf6a4Xn62mrvndLiml6z/UBXIdEVjQLXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", @@ -53,6 +234,32 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -67,6 +274,13 @@ "node": ">= 8" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -246,6 +460,13 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -291,6 +512,16 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -664,6 +895,13 @@ "node": ">=12.0.0" } }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -1311,6 +1549,50 @@ "node": ">=14" } }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "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 + } + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1324,6 +1606,20 @@ "node": ">= 0.6" } }, + "node_modules/typescript": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -1331,6 +1627,13 @@ "dev": true, "license": "MIT" }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -1349,6 +1652,13 @@ "node": ">= 0.4.0" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -1379,6 +1689,16 @@ "engines": { "node": ">=16" } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } } } } diff --git a/services/question/package.json b/services/question/package.json index aa28f0f7c3..9a4dfe74bb 100644 --- a/services/question/package.json +++ b/services/question/package.json @@ -3,8 +3,8 @@ "version": "0.0.0", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "start": "nodemon server.js" + "build": "npx tsc", + "start": "nodemon src/server.ts" }, "author": "", "license": "ISC", @@ -14,6 +14,10 @@ "mongoose": "^8.6.2" }, "devDependencies": { - "nodemon": "^3.1.4" + "@types/express": "^4.17.21", + "@types/node": "^22.5.4", + "nodemon": "^3.1.4", + "ts-node": "^10.9.2", + "typescript": "^5.6.2" } } diff --git a/services/question/routes/index.js b/services/question/routes/index.js deleted file mode 100644 index f76a7f6a53..0000000000 --- a/services/question/routes/index.js +++ /dev/null @@ -1,7 +0,0 @@ -const express = require('express'); -const getHealth = require('../controllers'); -const router = express.Router(); - -router.get('/ht', getHealth); - -module.exports = router; \ No newline at end of file diff --git a/services/question/routes/questionRoutes.js b/services/question/routes/questionRoutes.js deleted file mode 100644 index cd3ebdd5a8..0000000000 --- a/services/question/routes/questionRoutes.js +++ /dev/null @@ -1,7 +0,0 @@ -const express = require('express'); -const getQuestions = require('../controllers/questionController'); -const router = express.Router(); - -router.get('/questions', getQuestions) - -module.exports = router; diff --git a/services/question/setup.js b/services/question/setup.js deleted file mode 100644 index 66609b21f5..0000000000 --- a/services/question/setup.js +++ /dev/null @@ -1,26 +0,0 @@ -const fs = require('fs/promises'); -const Question = require('./models/questionModel'); - -const getQuestions = async () => { - const data = await fs.readFile('./config/questions.json', { encoding: 'utf8' }); - return JSON.parse(data); -} - -const syncQuestions = async () => { - try { - const questions = await getQuestions(); - const ops = questions.map(item => ({ - updateOne: { - filter: { id: item.id }, - update: item, - upsert: true, - } - })); - await Question.bulkWrite(ops); - } catch { - console.log('Error syncing questions: ', error.message); - process.exit(1); - } -} - -module.exports = syncQuestions; \ No newline at end of file diff --git a/services/question/src/app.ts b/services/question/src/app.ts new file mode 100644 index 0000000000..f40c0115be --- /dev/null +++ b/services/question/src/app.ts @@ -0,0 +1,20 @@ +import express, { Express } from 'express'; +import router from './routes'; +import questionRouter from './routes/questionRoutes'; +import connectDb from './models'; +import syncQuestions from './setup'; +import mongoose from 'mongoose'; + +const app: Express = express(); + +// Establish database connection +connectDb(); +mongoose.connection.once('open', async () => await syncQuestions()); + +// Middleware + +// Routes +app.use('/', router); +app.use('/', questionRouter); + +export default app; diff --git a/services/question/src/config/index.ts b/services/question/src/config/index.ts new file mode 100644 index 0000000000..84cf58d914 --- /dev/null +++ b/services/question/src/config/index.ts @@ -0,0 +1,5 @@ +export const PORT = 8081; +export const MONGODB_USERNAME = process.env.MONGODB_USERNAME; +export const MONGODB_PASSWORD = process.env.MONGODB_PASSWORD; +export const MONGODB_URL = 'mongodb://question-db:27017'; +export const MONGODB_DATABASE = 'question'; diff --git a/services/question/config/questions.json b/services/question/src/config/questions.json similarity index 100% rename from services/question/config/questions.json rename to services/question/src/config/questions.json diff --git a/services/question/src/controllers/index.ts b/services/question/src/controllers/index.ts new file mode 100644 index 0000000000..1637ad8429 --- /dev/null +++ b/services/question/src/controllers/index.ts @@ -0,0 +1,10 @@ +import { Response } from 'express'; + +const getHealth = async (res: Response) => { + res.status(200).json({ + message: 'Server is up and running!', + }); + return; +}; + +export default getHealth; \ No newline at end of file diff --git a/services/question/controllers/questionController.js b/services/question/src/controllers/questionController.ts similarity index 58% rename from services/question/controllers/questionController.js rename to services/question/src/controllers/questionController.ts index 0baf09876b..e01c3eebc2 100644 --- a/services/question/controllers/questionController.js +++ b/services/question/src/controllers/questionController.ts @@ -1,6 +1,7 @@ -const Question = require('../models/questionModel'); +import { Response } from 'express'; +import Question from '../models/questionModel'; -const getQuestions = async (req, res) => { +const getQuestions = async (res: Response) => { const questions = await Question.find(); const questionTitles = questions.map(q => q.title); res.status(200).json({ @@ -9,4 +10,4 @@ const getQuestions = async (req, res) => { return; }; -module.exports = getQuestions; \ No newline at end of file +export default getQuestions; \ No newline at end of file diff --git a/services/question/models/index.js b/services/question/src/models/index.ts similarity index 72% rename from services/question/models/index.js rename to services/question/src/models/index.ts index 0ff00ef68b..e2aa02075c 100644 --- a/services/question/models/index.js +++ b/services/question/src/models/index.ts @@ -1,5 +1,5 @@ -const mongoose = require('mongoose'); -const { MONGODB_USERNAME, MONGODB_PASSWORD, MONGODB_URL, MONGODB_DATABASE } = require('../config'); +import mongoose from 'mongoose'; +import { MONGODB_USERNAME, MONGODB_PASSWORD, MONGODB_URL, MONGODB_DATABASE } from '../config'; const connectDb = () => { const connectionString = `${MONGODB_URL}/${MONGODB_DATABASE}` @@ -16,4 +16,4 @@ const connectDb = () => { }) }; -module.exports = connectDb; \ No newline at end of file +export default connectDb; \ No newline at end of file diff --git a/services/question/src/models/questionModel.ts b/services/question/src/models/questionModel.ts new file mode 100644 index 0000000000..f3ccd12c9c --- /dev/null +++ b/services/question/src/models/questionModel.ts @@ -0,0 +1,21 @@ +import { model, Schema } from 'mongoose'; + +export interface IQuestion { + id: number; + title: String; + description: String; + categories: [String]; + complexity: String; +} + +const questionSchema = new Schema({ + id: { type: Number, required: true, unique: true }, + title: String, + description: String, + categories: [String], + complexity: { type: String, enum: ['Easy', 'Medium', 'Difficult'] }, +}, { versionKey: false }); + +const Question = model('Question', questionSchema); + +export default Question; diff --git a/services/question/src/routes/index.ts b/services/question/src/routes/index.ts new file mode 100644 index 0000000000..7140bf003d --- /dev/null +++ b/services/question/src/routes/index.ts @@ -0,0 +1,7 @@ +import express from 'express'; +import getHealth from '../controllers'; +const router = express.Router(); + +router.get('/ht', getHealth); + +export default router; \ No newline at end of file diff --git a/services/question/src/routes/questionRoutes.ts b/services/question/src/routes/questionRoutes.ts new file mode 100644 index 0000000000..979127c3ea --- /dev/null +++ b/services/question/src/routes/questionRoutes.ts @@ -0,0 +1,7 @@ +import { Router } from 'express'; +import getQuestions from '../controllers/questionController'; +const router = Router(); + +router.get('/questions', getQuestions) + +export default router; diff --git a/services/question/server.js b/services/question/src/server.ts similarity index 51% rename from services/question/server.js rename to services/question/src/server.ts index d3ea6bb6fc..cb83666a8b 100644 --- a/services/question/server.js +++ b/services/question/src/server.ts @@ -1,4 +1,4 @@ -const app = require('./app'); -const { PORT } = require('./config'); +import app from './app'; +import { PORT } from './config'; app.listen(PORT, () => console.log(`App is running on port ${PORT}.`)); diff --git a/services/question/src/setup.ts b/services/question/src/setup.ts new file mode 100644 index 0000000000..8cb25e051e --- /dev/null +++ b/services/question/src/setup.ts @@ -0,0 +1,31 @@ +import fs from 'fs/promises'; +import Question, { IQuestion } from './models/questionModel'; + +const getQuestions = async (): Promise => { + const data = await fs.readFile('./src/config/questions.json', { encoding: 'utf8' }); + return JSON.parse(data); +} + +const syncQuestions = async () => { + try { + const questions = await getQuestions(); + const ops = questions.map(item => ({ + updateOne: { + filter: { id: item.id }, + update: item, + upsert: true, + } + })); + await Question.bulkWrite(ops); + console.log('Questions synced successfully') + } catch (error) { + if (error instanceof Error) { + console.log('Error syncing questions: ', error.message); + } else { + console.log('Error syncing questions'); + } + process.exit(1); + } +} + +export default syncQuestions; diff --git a/services/question/tsconfig.json b/services/question/tsconfig.json new file mode 100644 index 0000000000..d53b61e31f --- /dev/null +++ b/services/question/tsconfig.json @@ -0,0 +1,14 @@ +/* Visit https://aka.ms/tsconfig to read more about this file */ +{ + "compilerOptions": { + "target": "es2016", + "module": "commonjs", + "outDir": "./dist", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} From eb18069dbe222bdb6cafbf2c70bf734b5b0abd59 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 13 Sep 2024 01:21:42 +0800 Subject: [PATCH 019/188] Add basic GHA for question --- .github/workflows/tests.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5ea122faa1..7bd6b72e02 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -32,3 +32,17 @@ jobs: run: cd frontend && npm run lint - name: Build App run: cd frontend && npm run build + + build-question: + runs-on: ubuntu-latest + timeout-minutes: 60 + steps: + - uses: actions/checkout@v4 + - name: Use Node.js + uses: actions/setup-node@v4 + with: + node-version: ${{ env.node-version }} + - name: Install Node Modules + run: cd services/question && npm ci + - name: Build App + run: cd services/question && npm run build From 6ea23728014ce01409ea580290c51fe3eafcbc5b Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 13 Sep 2024 01:34:33 +0800 Subject: [PATCH 020/188] Rename server.ts to index.ts --- services/question/package.json | 2 +- services/question/src/{server.ts => index.ts} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename services/question/src/{server.ts => index.ts} (100%) diff --git a/services/question/package.json b/services/question/package.json index 9a4dfe74bb..9a7539b1b2 100644 --- a/services/question/package.json +++ b/services/question/package.json @@ -4,7 +4,7 @@ "main": "index.js", "scripts": { "build": "npx tsc", - "start": "nodemon src/server.ts" + "start": "nodemon src/index.ts" }, "author": "", "license": "ISC", diff --git a/services/question/src/server.ts b/services/question/src/index.ts similarity index 100% rename from services/question/src/server.ts rename to services/question/src/index.ts From 403e1f3a36c616f362e8e6045092ac5ecd8fabdd Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 13 Sep 2024 01:50:20 +0800 Subject: [PATCH 021/188] Clean up code --- services/question/src/app.ts | 4 ++-- services/question/src/controllers/index.ts | 6 ++---- services/question/src/controllers/questionController.ts | 8 +++----- services/question/src/models/index.ts | 6 ++---- services/question/src/models/questionModel.ts | 4 +--- services/question/src/routes/index.ts | 2 +- services/question/src/routes/questionRoutes.ts | 2 +- services/question/src/setup.ts | 6 ++---- 8 files changed, 14 insertions(+), 24 deletions(-) diff --git a/services/question/src/app.ts b/services/question/src/app.ts index f40c0115be..3fc2797a16 100644 --- a/services/question/src/app.ts +++ b/services/question/src/app.ts @@ -1,8 +1,8 @@ import express, { Express } from 'express'; import router from './routes'; import questionRouter from './routes/questionRoutes'; -import connectDb from './models'; -import syncQuestions from './setup'; +import { syncQuestions } from './setup'; +import { connectDb } from './models'; import mongoose from 'mongoose'; const app: Express = express(); diff --git a/services/question/src/controllers/index.ts b/services/question/src/controllers/index.ts index 1637ad8429..bd021a96f9 100644 --- a/services/question/src/controllers/index.ts +++ b/services/question/src/controllers/index.ts @@ -1,10 +1,8 @@ import { Response } from 'express'; -const getHealth = async (res: Response) => { +export const getHealth = async (res: Response) => { res.status(200).json({ message: 'Server is up and running!', }); return; -}; - -export default getHealth; \ No newline at end of file +}; \ No newline at end of file diff --git a/services/question/src/controllers/questionController.ts b/services/question/src/controllers/questionController.ts index e01c3eebc2..e16d18091d 100644 --- a/services/question/src/controllers/questionController.ts +++ b/services/question/src/controllers/questionController.ts @@ -1,13 +1,11 @@ import { Response } from 'express'; -import Question from '../models/questionModel'; +import { Question } from '../models/questionModel'; -const getQuestions = async (res: Response) => { +export const getQuestions = async (res: Response) => { const questions = await Question.find(); const questionTitles = questions.map(q => q.title); res.status(200).json({ message: 'These are all the question titles:' + questionTitles, }); return; -}; - -export default getQuestions; \ No newline at end of file +}; \ No newline at end of file diff --git a/services/question/src/models/index.ts b/services/question/src/models/index.ts index e2aa02075c..4c717d7477 100644 --- a/services/question/src/models/index.ts +++ b/services/question/src/models/index.ts @@ -1,7 +1,7 @@ import mongoose from 'mongoose'; import { MONGODB_USERNAME, MONGODB_PASSWORD, MONGODB_URL, MONGODB_DATABASE } from '../config'; -const connectDb = () => { +export const connectDb = () => { const connectionString = `${MONGODB_URL}/${MONGODB_DATABASE}` mongoose.connect(connectionString, { @@ -14,6 +14,4 @@ const connectDb = () => { console.error('MongoDB connection error:', error.message); process.exit(1); }) -}; - -export default connectDb; \ No newline at end of file +}; \ No newline at end of file diff --git a/services/question/src/models/questionModel.ts b/services/question/src/models/questionModel.ts index f3ccd12c9c..61730a29d7 100644 --- a/services/question/src/models/questionModel.ts +++ b/services/question/src/models/questionModel.ts @@ -16,6 +16,4 @@ const questionSchema = new Schema({ complexity: { type: String, enum: ['Easy', 'Medium', 'Difficult'] }, }, { versionKey: false }); -const Question = model('Question', questionSchema); - -export default Question; +export const Question = model('Question', questionSchema); diff --git a/services/question/src/routes/index.ts b/services/question/src/routes/index.ts index 7140bf003d..e45bbdcc28 100644 --- a/services/question/src/routes/index.ts +++ b/services/question/src/routes/index.ts @@ -1,5 +1,5 @@ import express from 'express'; -import getHealth from '../controllers'; +import { getHealth } from '../controllers'; const router = express.Router(); router.get('/ht', getHealth); diff --git a/services/question/src/routes/questionRoutes.ts b/services/question/src/routes/questionRoutes.ts index 979127c3ea..96cfbab0cf 100644 --- a/services/question/src/routes/questionRoutes.ts +++ b/services/question/src/routes/questionRoutes.ts @@ -1,5 +1,5 @@ import { Router } from 'express'; -import getQuestions from '../controllers/questionController'; +import { getQuestions } from '../controllers/questionController'; const router = Router(); router.get('/questions', getQuestions) diff --git a/services/question/src/setup.ts b/services/question/src/setup.ts index 8cb25e051e..b42b17ede0 100644 --- a/services/question/src/setup.ts +++ b/services/question/src/setup.ts @@ -1,12 +1,12 @@ import fs from 'fs/promises'; -import Question, { IQuestion } from './models/questionModel'; +import { IQuestion, Question } from './models/questionModel'; const getQuestions = async (): Promise => { const data = await fs.readFile('./src/config/questions.json', { encoding: 'utf8' }); return JSON.parse(data); } -const syncQuestions = async () => { +export const syncQuestions = async () => { try { const questions = await getQuestions(); const ops = questions.map(item => ({ @@ -27,5 +27,3 @@ const syncQuestions = async () => { process.exit(1); } } - -export default syncQuestions; From 88dc1fc284740cfc0761649bf978cd8e918ec9a7 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 13 Sep 2024 10:44:44 +0800 Subject: [PATCH 022/188] Add middleware --- services/question/package-lock.json | 104 +++++++++++++++++++++++++- services/question/package.json | 7 +- services/question/src/app.ts | 10 +++ services/question/src/config/index.ts | 6 ++ 4 files changed, 125 insertions(+), 2 deletions(-) diff --git a/services/question/package-lock.json b/services/question/package-lock.json index cd77751c70..fef133ab19 100644 --- a/services/question/package-lock.json +++ b/services/question/package-lock.json @@ -9,11 +9,16 @@ "version": "0.0.0", "license": "ISC", "dependencies": { + "body-parser": "^1.20.3", + "cors": "^2.8.5", "express": "^4.21.0", - "mongoose": "^8.6.2" + "mongoose": "^8.6.2", + "morgan": "^1.10.0" }, "devDependencies": { + "@types/cors": "^2.8.17", "@types/express": "^4.17.21", + "@types/morgan": "^1.9.9", "@types/node": "^22.5.4", "nodemon": "^3.1.4", "ts-node": "^10.9.2", @@ -119,6 +124,16 @@ "@types/node": "*" } }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/express": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", @@ -159,6 +174,16 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/morgan": { + "version": "1.9.9", + "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.9.tgz", + "integrity": "sha512-iRYSDKVaC6FkGSpEVVIvrRGw0DfJMiQzIn3qr2G5B3C//AWkulhXgaBd7tS9/J79GWSYMTHGs7PfI5b3Y8m+RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/node": { "version": "22.5.4", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.4.tgz", @@ -294,6 +319,24 @@ "dev": true, "license": "MIT" }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -460,6 +503,19 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -1065,6 +1121,34 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "license": "MIT", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/mpath": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", @@ -1188,6 +1272,15 @@ "node": ">=0.10.0" } }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/object-inspect": { "version": "1.13.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", @@ -1212,6 +1305,15 @@ "node": ">= 0.8" } }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", diff --git a/services/question/package.json b/services/question/package.json index 9a7539b1b2..9fa067185e 100644 --- a/services/question/package.json +++ b/services/question/package.json @@ -10,11 +10,16 @@ "license": "ISC", "description": "", "dependencies": { + "body-parser": "^1.20.3", + "cors": "^2.8.5", "express": "^4.21.0", - "mongoose": "^8.6.2" + "mongoose": "^8.6.2", + "morgan": "^1.10.0" }, "devDependencies": { + "@types/cors": "^2.8.17", "@types/express": "^4.17.21", + "@types/morgan": "^1.9.9", "@types/node": "^22.5.4", "nodemon": "^3.1.4", "ts-node": "^10.9.2", diff --git a/services/question/src/app.ts b/services/question/src/app.ts index 3fc2797a16..f0dab0bdfe 100644 --- a/services/question/src/app.ts +++ b/services/question/src/app.ts @@ -1,9 +1,13 @@ import express, { Express } from 'express'; +import morgan from 'morgan'; +import cors from 'cors'; import router from './routes'; import questionRouter from './routes/questionRoutes'; import { syncQuestions } from './setup'; import { connectDb } from './models'; import mongoose from 'mongoose'; +import bodyParser from 'body-parser'; +import { corsOptions } from './config'; const app: Express = express(); @@ -12,6 +16,12 @@ connectDb(); mongoose.connection.once('open', async () => await syncQuestions()); // Middleware +app.use(morgan('dev')); + +app.use(bodyParser.urlencoded({ extended: false })); +app.use(bodyParser.json()); + +app.use(cors(corsOptions)); // Routes app.use('/', router); diff --git a/services/question/src/config/index.ts b/services/question/src/config/index.ts index 84cf58d914..2198e310cd 100644 --- a/services/question/src/config/index.ts +++ b/services/question/src/config/index.ts @@ -3,3 +3,9 @@ export const MONGODB_USERNAME = process.env.MONGODB_USERNAME; export const MONGODB_PASSWORD = process.env.MONGODB_PASSWORD; export const MONGODB_URL = 'mongodb://question-db:27017'; export const MONGODB_DATABASE = 'question'; + +export const corsOptions = { + origin: process.env.corsOrigin ?? true, + methods: ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'], + allowedHeaders: ['Origin', 'X-Request-With', 'Content-Type', 'Accept', 'Authorization'] +} \ No newline at end of file From dad68c49d88d2b44a0eb35641a130329a22deab4 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 13 Sep 2024 13:26:31 +0800 Subject: [PATCH 023/188] Add ESLint to Question --- services/question/eslint.config.mjs | 14 + services/question/package-lock.json | 1745 +++++++++++++++++++++++++-- services/question/package.json | 7 +- services/question/tsconfig.json | 5 +- 4 files changed, 1659 insertions(+), 112 deletions(-) create mode 100644 services/question/eslint.config.mjs diff --git a/services/question/eslint.config.mjs b/services/question/eslint.config.mjs new file mode 100644 index 0000000000..6a27a3d3eb --- /dev/null +++ b/services/question/eslint.config.mjs @@ -0,0 +1,14 @@ +// @ts-check + +import eslint from '@eslint/js'; +import tseslint from 'typescript-eslint'; + +export default tseslint.config({ + files: ['**/*.ts'], + extends: [ + eslint.configs.recommended, + ...tseslint.configs.strict, + ...tseslint.configs.stylistic, + ], + rules: {}, +}); diff --git a/services/question/package-lock.json b/services/question/package-lock.json index fef133ab19..ab09579b7d 100644 --- a/services/question/package-lock.json +++ b/services/question/package-lock.json @@ -16,13 +16,18 @@ "morgan": "^1.10.0" }, "devDependencies": { + "@eslint/js": "^9.10.0", "@types/cors": "^2.8.17", + "@types/eslint__js": "^8.42.3", "@types/express": "^4.17.21", "@types/morgan": "^1.9.9", "@types/node": "^22.5.4", + "@typescript-eslint/eslint-plugin": "^8.5.0", + "eslint": "^9.10.0", "nodemon": "^3.1.4", "ts-node": "^10.9.2", - "typescript": "^5.6.2" + "typescript": "^5.5.4", + "typescript-eslint": "^8.5.0" } }, "node_modules/@cspotcode/source-map-support": { @@ -38,6 +43,195 @@ "node": ">=12" } }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/js": { + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz", + "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.1.0.tgz", + "integrity": "sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -75,6 +269,44 @@ "sparse-bitfield": "^3.0.3" } }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -134,6 +366,34 @@ "@types/node": "*" } }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint__js": { + "version": "8.42.3", + "resolved": "https://registry.npmjs.org/@types/eslint__js/-/eslint__js-8.42.3.tgz", + "integrity": "sha512-alfG737uhmPdnvkrLdZLcEKJ/B8s9Y4hrZ+YAdzUeoArBlSUERA2E87ROfOaS4jd/C45fzOoZzidLc1IPwLqOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/express": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", @@ -167,6 +427,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -201,49 +468,353 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "license": "MIT" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "license": "MIT", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.5.0.tgz", + "integrity": "sha512-lHS5hvz33iUFQKuPFGheAB84LwcJ60G8vKnEhnfcK1l8kGVLro2SFYW6K0/tj8FUhRJ0VHyg1oAfg50QGbPPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/type-utils": "8.5.0", + "@typescript-eslint/utils": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.5.0.tgz", + "integrity": "sha512-gF77eNv0Xz2UJg/NbpWJ0kqAm35UMsvZf1GHj8D9MRFTj/V3tAciIWXfmPLsAAF/vUlpWPvUDyH1jjsr0cMVWw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz", + "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.5.0.tgz", + "integrity": "sha512-N1K8Ix+lUM+cIDhL2uekVn/ZD7TZW+9/rwz8DclQpcQ9rk4sIL5CAlBC0CugWKREmDjBzI/kQqU4wkg46jWLYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.5.0", + "@typescript-eslint/utils": "8.5.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/types": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz", + "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz", + "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "node_modules/@typescript-eslint/utils": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.5.0.tgz", + "integrity": "sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==", "dev": true, "license": "MIT", "dependencies": { - "@types/mime": "^1", - "@types/node": "*" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" } }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz", + "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==", "dev": true, "license": "MIT", "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" + "@typescript-eslint/types": "8.5.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@types/webidl-conversions": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", - "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", - "license": "MIT" - }, - "node_modules/@types/whatwg-url": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", - "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", - "license": "MIT", - "dependencies": { - "@types/webidl-conversions": "*" + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/accepts": { @@ -272,6 +843,16 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/acorn-walk": { "version": "8.3.4", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", @@ -285,6 +866,49 @@ "node": ">=0.4.0" } }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -306,6 +930,13 @@ "dev": true, "license": "MIT" }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -435,6 +1066,56 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -460,6 +1141,26 @@ "fsevents": "~2.3.2" } }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -523,6 +1224,21 @@ "dev": true, "license": "MIT" }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -532,93 +1248,305 @@ "ms": "2.0.0" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.10.0.tgz", + "integrity": "sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.10.0", + "@eslint/plugin-kit": "^0.1.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.0.2", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", + "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", + "node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">= 0.8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/eslint/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=0.3.1" + "node": ">=10.13.0" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "node_modules/eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, "license": "MIT" }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", - "license": "MIT", + "node_modules/espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + }, "engines": { - "node": ">= 0.8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "license": "MIT", + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "get-intrinsic": "^1.2.4" + "estraverse": "^5.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=0.10" } }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=4.0" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/etag": { "version": "1.8.1", @@ -671,6 +1599,67 @@ "node": ">= 0.10.0" } }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -702,6 +1691,44 @@ "node": ">= 0.8" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -776,6 +1803,19 @@ "node": ">= 6" } }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -788,6 +1828,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -874,6 +1921,16 @@ "node": ">=0.10.0" } }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", @@ -881,6 +1938,33 @@ "dev": true, "license": "ISC" }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -919,37 +2003,135 @@ "node": ">=0.10.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.8.0" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, "engines": { - "node": ">=0.12.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/kareem": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", - "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" }, "node_modules/make-error": { "version": "1.3.6", @@ -982,6 +2164,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -991,6 +2183,20 @@ "node": ">= 0.6" } }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -1199,6 +2405,13 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -1314,6 +2527,69 @@ "node": ">= 0.8" } }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -1323,6 +2599,26 @@ "node": ">= 0.8" } }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/path-to-regexp": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", @@ -1342,6 +2638,16 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -1386,6 +2692,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -1423,6 +2750,51 @@ "node": ">=8.10.0" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1539,6 +2911,29 @@ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -1594,6 +2989,32 @@ "node": ">= 0.8" } }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1607,6 +3028,13 @@ "node": ">=4" } }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1651,6 +3079,19 @@ "node": ">=14" } }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", @@ -1695,6 +3136,19 @@ } } }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1709,9 +3163,9 @@ } }, "node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "license": "Apache-2.0", "bin": { @@ -1722,6 +3176,30 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.5.0.tgz", + "integrity": "sha512-uD+XxEoSIvqtm4KE97etm32Tn5MfaZWgWfMMREStLxR6JzvHkc2Tkj7zhTEK5XmtpTmKHNnG8Sot6qDfhHtR1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.5.0", + "@typescript-eslint/parser": "8.5.0", + "@typescript-eslint/utils": "8.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -1745,6 +3223,16 @@ "node": ">= 0.8" } }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -1792,6 +3280,32 @@ "node": ">=16" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -1801,6 +3315,19 @@ "engines": { "node": ">=6" } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/services/question/package.json b/services/question/package.json index 9fa067185e..c55ecdd9b0 100644 --- a/services/question/package.json +++ b/services/question/package.json @@ -17,12 +17,17 @@ "morgan": "^1.10.0" }, "devDependencies": { + "@eslint/js": "^9.10.0", "@types/cors": "^2.8.17", + "@types/eslint__js": "^8.42.3", "@types/express": "^4.17.21", "@types/morgan": "^1.9.9", "@types/node": "^22.5.4", + "@typescript-eslint/eslint-plugin": "^8.5.0", + "eslint": "^9.10.0", "nodemon": "^3.1.4", "ts-node": "^10.9.2", - "typescript": "^5.6.2" + "typescript": "^5.5.4", + "typescript-eslint": "^8.5.0" } } diff --git a/services/question/tsconfig.json b/services/question/tsconfig.json index d53b61e31f..476265de67 100644 --- a/services/question/tsconfig.json +++ b/services/question/tsconfig.json @@ -1,8 +1,9 @@ /* Visit https://aka.ms/tsconfig to read more about this file */ { "compilerOptions": { - "target": "es2016", - "module": "commonjs", + "target": "ES2022", + "module": "ES2022", + "moduleResolution": "bundler", "outDir": "./dist", "strict": true, "esModuleInterop": true, From 7e1f5964f51b77949a404540d8b60bed8cd95146 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 13 Sep 2024 13:50:32 +0800 Subject: [PATCH 024/188] Question: Add Prettier and GHA --- .github/workflows/tests.yml | 2 + services/question/.prettierignore | 39 + services/question/.prettierrc.json | 11 + services/question/eslint.config.mjs | 2 + services/question/package-lock.json | 1062 ++++++++++++++++- services/question/package.json | 8 +- services/question/src/config/index.ts | 4 +- services/question/src/controllers/index.ts | 2 +- .../src/controllers/questionController.ts | 2 +- services/question/src/models/index.ts | 25 +- services/question/src/models/questionModel.ts | 25 +- services/question/src/routes/index.ts | 2 +- .../question/src/routes/questionRoutes.ts | 2 +- services/question/src/setup.ts | 8 +- 14 files changed, 1156 insertions(+), 38 deletions(-) create mode 100644 services/question/.prettierignore create mode 100644 services/question/.prettierrc.json diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 7bd6b72e02..d9f331d4f3 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -44,5 +44,7 @@ jobs: node-version: ${{ env.node-version }} - name: Install Node Modules run: cd services/question && npm ci + - name: Linting + run: cd frontend && npm run lint - name: Build App run: cd services/question && npm run build diff --git a/services/question/.prettierignore b/services/question/.prettierignore new file mode 100644 index 0000000000..420f9273b6 --- /dev/null +++ b/services/question/.prettierignore @@ -0,0 +1,39 @@ +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db + +package.json +package-lock.json diff --git a/services/question/.prettierrc.json b/services/question/.prettierrc.json new file mode 100644 index 0000000000..58416554c2 --- /dev/null +++ b/services/question/.prettierrc.json @@ -0,0 +1,11 @@ +{ + "tabWidth": 4, + "useTabs": false, + "singleQuote": true, + "semi": true, + "bracketSpacing": true, + "arrowParens": "avoid", + "trailingComma": "all", + "bracketSameLine": true, + "printWidth": 120 +} diff --git a/services/question/eslint.config.mjs b/services/question/eslint.config.mjs index 6a27a3d3eb..04d352f27d 100644 --- a/services/question/eslint.config.mjs +++ b/services/question/eslint.config.mjs @@ -2,6 +2,7 @@ import eslint from '@eslint/js'; import tseslint from 'typescript-eslint'; +import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'; export default tseslint.config({ files: ['**/*.ts'], @@ -9,6 +10,7 @@ export default tseslint.config({ eslint.configs.recommended, ...tseslint.configs.strict, ...tseslint.configs.stylistic, + eslintPluginPrettierRecommended, ], rules: {}, }); diff --git a/services/question/package-lock.json b/services/question/package-lock.json index ab09579b7d..9c6f712439 100644 --- a/services/question/package-lock.json +++ b/services/question/package-lock.json @@ -24,7 +24,11 @@ "@types/node": "^22.5.4", "@typescript-eslint/eslint-plugin": "^8.5.0", "eslint": "^9.10.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", "nodemon": "^3.1.4", + "prettier": "3.3.3", + "prettier-eslint": "^16.3.0", "ts-node": "^10.9.2", "typescript": "^5.5.4", "typescript-eslint": "^8.5.0" @@ -204,6 +208,47 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -218,6 +263,14 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/@humanwhocodes/retry": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", @@ -232,6 +285,19 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -307,6 +373,26 @@ "node": ">= 8" } }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -817,6 +903,13 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true, + "license": "ISC" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -943,6 +1036,16 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1161,6 +1264,16 @@ "dev": true, "license": "MIT" }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1301,6 +1414,39 @@ "node": ">=0.3.1" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -1416,6 +1562,50 @@ } } }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", + "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.9.1" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "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 + } + } + }, "node_modules/eslint-scope": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", @@ -1606,6 +1796,13 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -1747,6 +1944,13 @@ "node": ">= 0.6" } }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -1790,6 +1994,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -1816,6 +2042,27 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -1835,6 +2082,29 @@ "dev": true, "license": "MIT" }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -1965,6 +2235,28 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -2126,6 +2418,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2133,6 +2432,101 @@ "dev": true, "license": "MIT" }, + "node_modules/loglevel": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.9.2.tgz", + "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/loglevel" + } + }, + "node_modules/loglevel-colored-level-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/loglevel-colored-level-prefix/-/loglevel-colored-level-prefix-1.0.0.tgz", + "integrity": "sha512-u45Wcxxc+SdAlh4yeF/uKlC1SPUPCy0gullSNKXod5I4bmifzk+Q4lSLExNEVn19tGaJipbZ4V4jbFn79/6mVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^1.1.3", + "loglevel": "^1.4.1" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loglevel-colored-level-prefix/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", @@ -2527,6 +2921,16 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -2609,6 +3013,16 @@ "node": ">=8" } }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -2625,6 +3039,16 @@ "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", "license": "MIT" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -2648,10 +3072,457 @@ "node": ">= 0.8.0" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-eslint": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/prettier-eslint/-/prettier-eslint-16.3.0.tgz", + "integrity": "sha512-Lh102TIFCr11PJKUMQ2kwNmxGhTsv/KzUg9QYF2Gkw259g/kPgndZDWavk7/ycbRvj2oz4BPZ1gCU8bhfZH/Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/parser": "^6.7.5", + "common-tags": "^1.4.0", + "dlv": "^1.1.0", + "eslint": "^8.7.0", + "indent-string": "^4.0.0", + "lodash.merge": "^4.6.0", + "loglevel-colored-level-prefix": "^1.0.0", + "prettier": "^3.0.1", + "pretty-format": "^29.7.0", + "require-relative": "^0.8.7", + "typescript": "^5.2.2", + "vue-eslint-parser": "^9.1.0" + }, + "engines": { + "node": ">=16.10.0" + }, + "peerDependencies": { + "prettier-plugin-svelte": "^3.0.0", + "svelte-eslint-parser": "*" + }, + "peerDependenciesMeta": { + "prettier-plugin-svelte": { + "optional": true + }, + "svelte-eslint-parser": { + "optional": true + } + } + }, + "node_modules/prettier-eslint/node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/prettier-eslint/node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/prettier-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/prettier-eslint/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/prettier-eslint/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/prettier-eslint/node_modules/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "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.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/prettier-eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/prettier-eslint/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/prettier-eslint/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/prettier-eslint/node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/prettier-eslint/node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/prettier-eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/prettier-eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/prettier-eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -2737,6 +3608,13 @@ "node": ">= 0.8" } }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -2750,6 +3628,13 @@ "node": ">=8.10.0" } }, + "node_modules/require-relative": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", + "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==", + "dev": true, + "license": "MIT" + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2771,6 +3656,23 @@ "node": ">=0.10.0" } }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -2971,6 +3873,16 @@ "node": ">=10" } }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/sparse-bitfield": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", @@ -3028,6 +3940,23 @@ "node": ">=4" } }, + "node_modules/synckit": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", + "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -3136,6 +4065,13 @@ } } }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3149,6 +4085,19 @@ "node": ">= 0.8.0" } }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -3258,6 +4207,104 @@ "node": ">= 0.8" } }, + "node_modules/vue-eslint-parser": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -3306,6 +4353,13 @@ "node": ">=0.10.0" } }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", diff --git a/services/question/package.json b/services/question/package.json index c55ecdd9b0..459da842c7 100644 --- a/services/question/package.json +++ b/services/question/package.json @@ -4,7 +4,9 @@ "main": "index.js", "scripts": { "build": "npx tsc", - "start": "nodemon src/index.ts" + "start": "nodemon src/index.ts", + "lint": "npx eslint .", + "lint:fix": "npx eslint . --fix" }, "author": "", "license": "ISC", @@ -25,7 +27,11 @@ "@types/node": "^22.5.4", "@typescript-eslint/eslint-plugin": "^8.5.0", "eslint": "^9.10.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", "nodemon": "^3.1.4", + "prettier": "3.3.3", + "prettier-eslint": "^16.3.0", "ts-node": "^10.9.2", "typescript": "^5.5.4", "typescript-eslint": "^8.5.0" diff --git a/services/question/src/config/index.ts b/services/question/src/config/index.ts index 2198e310cd..37006cc1ee 100644 --- a/services/question/src/config/index.ts +++ b/services/question/src/config/index.ts @@ -7,5 +7,5 @@ export const MONGODB_DATABASE = 'question'; export const corsOptions = { origin: process.env.corsOrigin ?? true, methods: ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'], - allowedHeaders: ['Origin', 'X-Request-With', 'Content-Type', 'Accept', 'Authorization'] -} \ No newline at end of file + allowedHeaders: ['Origin', 'X-Request-With', 'Content-Type', 'Accept', 'Authorization'], +}; diff --git a/services/question/src/controllers/index.ts b/services/question/src/controllers/index.ts index bd021a96f9..7d7a9bbb34 100644 --- a/services/question/src/controllers/index.ts +++ b/services/question/src/controllers/index.ts @@ -5,4 +5,4 @@ export const getHealth = async (res: Response) => { message: 'Server is up and running!', }); return; -}; \ No newline at end of file +}; diff --git a/services/question/src/controllers/questionController.ts b/services/question/src/controllers/questionController.ts index e16d18091d..b992b3189e 100644 --- a/services/question/src/controllers/questionController.ts +++ b/services/question/src/controllers/questionController.ts @@ -8,4 +8,4 @@ export const getQuestions = async (res: Response) => { message: 'These are all the question titles:' + questionTitles, }); return; -}; \ No newline at end of file +}; diff --git a/services/question/src/models/index.ts b/services/question/src/models/index.ts index 4c717d7477..988460a157 100644 --- a/services/question/src/models/index.ts +++ b/services/question/src/models/index.ts @@ -2,16 +2,17 @@ import mongoose from 'mongoose'; import { MONGODB_USERNAME, MONGODB_PASSWORD, MONGODB_URL, MONGODB_DATABASE } from '../config'; export const connectDb = () => { - const connectionString = `${MONGODB_URL}/${MONGODB_DATABASE}` + const connectionString = `${MONGODB_URL}/${MONGODB_DATABASE}`; - mongoose.connect(connectionString, { - authSource: 'admin', - user: MONGODB_USERNAME, - pass: MONGODB_PASSWORD, - }) - .then(() => console.log('MongoDB connected successfully')) - .catch((error) => { - console.error('MongoDB connection error:', error.message); - process.exit(1); - }) -}; \ No newline at end of file + mongoose + .connect(connectionString, { + authSource: 'admin', + user: MONGODB_USERNAME, + pass: MONGODB_PASSWORD, + }) + .then(() => console.log('MongoDB connected successfully')) + .catch(error => { + console.error('MongoDB connection error:', error.message); + process.exit(1); + }); +}; diff --git a/services/question/src/models/questionModel.ts b/services/question/src/models/questionModel.ts index 61730a29d7..d10bdfad2a 100644 --- a/services/question/src/models/questionModel.ts +++ b/services/question/src/models/questionModel.ts @@ -2,18 +2,21 @@ import { model, Schema } from 'mongoose'; export interface IQuestion { id: number; - title: String; - description: String; - categories: [String]; - complexity: String; + title: string; + description: string; + categories: [string]; + complexity: string; } -const questionSchema = new Schema({ - id: { type: Number, required: true, unique: true }, - title: String, - description: String, - categories: [String], - complexity: { type: String, enum: ['Easy', 'Medium', 'Difficult'] }, -}, { versionKey: false }); +const questionSchema = new Schema( + { + id: { type: Number, required: true, unique: true }, + title: String, + description: String, + categories: [String], + complexity: { type: String, enum: ['Easy', 'Medium', 'Difficult'] }, + }, + { versionKey: false }, +); export const Question = model('Question', questionSchema); diff --git a/services/question/src/routes/index.ts b/services/question/src/routes/index.ts index e45bbdcc28..7e7faddcfd 100644 --- a/services/question/src/routes/index.ts +++ b/services/question/src/routes/index.ts @@ -4,4 +4,4 @@ const router = express.Router(); router.get('/ht', getHealth); -export default router; \ No newline at end of file +export default router; diff --git a/services/question/src/routes/questionRoutes.ts b/services/question/src/routes/questionRoutes.ts index 96cfbab0cf..c7cb207f31 100644 --- a/services/question/src/routes/questionRoutes.ts +++ b/services/question/src/routes/questionRoutes.ts @@ -2,6 +2,6 @@ import { Router } from 'express'; import { getQuestions } from '../controllers/questionController'; const router = Router(); -router.get('/questions', getQuestions) +router.get('/questions', getQuestions); export default router; diff --git a/services/question/src/setup.ts b/services/question/src/setup.ts index b42b17ede0..0950c2d516 100644 --- a/services/question/src/setup.ts +++ b/services/question/src/setup.ts @@ -4,7 +4,7 @@ import { IQuestion, Question } from './models/questionModel'; const getQuestions = async (): Promise => { const data = await fs.readFile('./src/config/questions.json', { encoding: 'utf8' }); return JSON.parse(data); -} +}; export const syncQuestions = async () => { try { @@ -14,10 +14,10 @@ export const syncQuestions = async () => { filter: { id: item.id }, update: item, upsert: true, - } + }, })); await Question.bulkWrite(ops); - console.log('Questions synced successfully') + console.log('Questions synced successfully'); } catch (error) { if (error instanceof Error) { console.log('Error syncing questions: ', error.message); @@ -26,4 +26,4 @@ export const syncQuestions = async () => { } process.exit(1); } -} +}; From 6b52f747d55e2db0891924eb46b4f1ea5446d26d Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 13 Sep 2024 14:00:19 +0800 Subject: [PATCH 025/188] Simplify GHA --- .github/workflows/tests.yml | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d9f331d4f3..939f390d04 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,9 +17,13 @@ env: # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: - build-frontend: + build-service: runs-on: ubuntu-latest timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + service: [frontend, services/question] steps: - uses: actions/checkout@v4 - name: Use Node.js @@ -27,24 +31,8 @@ jobs: with: node-version: ${{ env.node-version }} - name: Install Node Modules - run: cd frontend && npm ci + run: cd ${{ matrix.service }} && npm ci - name: Linting - run: cd frontend && npm run lint + run: cd ${{ matrix.service }} && npm run lint - name: Build App - run: cd frontend && npm run build - - build-question: - runs-on: ubuntu-latest - timeout-minutes: 60 - steps: - - uses: actions/checkout@v4 - - name: Use Node.js - uses: actions/setup-node@v4 - with: - node-version: ${{ env.node-version }} - - name: Install Node Modules - run: cd services/question && npm ci - - name: Linting - run: cd frontend && npm run lint - - name: Build App - run: cd services/question && npm run build + run: cd ${{ matrix.service }} && npm run build From 3ec6a5d0950083dbba5e08882554aa98f5a1ca8d Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 13 Sep 2024 16:38:49 +0800 Subject: [PATCH 026/188] Revert tsconfig.json --- services/question/tsconfig.json | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/services/question/tsconfig.json b/services/question/tsconfig.json index 476265de67..f5b5901804 100644 --- a/services/question/tsconfig.json +++ b/services/question/tsconfig.json @@ -1,9 +1,8 @@ /* Visit https://aka.ms/tsconfig to read more about this file */ { "compilerOptions": { - "target": "ES2022", - "module": "ES2022", - "moduleResolution": "bundler", + "target": "es2016", + "module": "CommonJS", "outDir": "./dist", "strict": true, "esModuleInterop": true, From 9e2e78e04b8eda45a05fc08b59947a182da4c1e6 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 13 Sep 2024 16:44:16 +0800 Subject: [PATCH 027/188] compose: Add networks Set up network drivers to apply Principle of Least Privilege --- docker-compose.yml | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index bd3927bac2..162a839d39 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,6 +10,8 @@ services: volumes: - /app/node_modules - ./frontend:/app + networks: + - question-network question: container_name: question @@ -25,6 +27,9 @@ services: volumes: - /app/node_modules - ./services/question:/app + networks: + - question-network + - question-db-network question-db: container_name: question-db @@ -34,6 +39,14 @@ services: MONGO_INITDB_ROOT_PASSWORD: ${QUESTION_DB_PASSWORD} volumes: - question-db:/data/db - + networks: + - question-db-network + volumes: - question-db: \ No newline at end of file + question-db: + +networks: + question-network: + driver: bridge + question-db-network: + driver: bridge \ No newline at end of file From 1d1065b7356554c3f9361c94e3a440642b6b833f Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 13 Sep 2024 18:39:43 +0800 Subject: [PATCH 028/188] Clean up code --- .env.sample | 8 +++- docker-compose.yml | 8 ++-- services/question/.env.sample | 9 ++++ services/question/eslint.config.mjs | 10 ++++- services/question/src/app.ts | 16 ++++---- services/question/src/config/index.ts | 11 ----- .../src/{config => data}/questions.json | 0 services/question/src/index.ts | 20 ++++++++- services/question/src/models/index.ts | 41 ++++++++++++------- services/question/src/setup.ts | 29 ------------- services/question/src/utils/data.ts | 7 ++++ 11 files changed, 88 insertions(+), 71 deletions(-) create mode 100644 services/question/.env.sample delete mode 100644 services/question/src/config/index.ts rename services/question/src/{config => data}/questions.json (100%) delete mode 100644 services/question/src/setup.ts create mode 100644 services/question/src/utils/data.ts diff --git a/.env.sample b/.env.sample index 6877ddca74..030ec204c3 100644 --- a/.env.sample +++ b/.env.sample @@ -1,4 +1,10 @@ # This is a sample environment configuration file. # Copy this file to .env and replace the placeholder values with your own. +QUESTION_DB_CLOUD_URI= +QUESTION_DB_LOCAL_URI=mongodb://question-db:27017/question QUESTION_DB_USERNAME=user -QUESTION_DB_PASSWORD=password \ No newline at end of file +QUESTION_DB_PASSWORD=password +QUESTION_CORS_ORIGIN=* +QUESTION_PORT=8081 + +NODE_ENV=development \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 162a839d39..4549daf7a7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,11 +19,13 @@ services: build: context: services/question dockerfile: Dockerfile - environment: - MONGODB_USERNAME: ${QUESTION_DB_USERNAME} - MONGODB_PASSWORD: ${QUESTION_DB_PASSWORD} ports: - 8081:8081 + environment: + DB_CLOUD_URI: ${QUESTION_DB_CLOUD_URI} + DB_LOCAL_URI: ${QUESTION_DB_LOCAL_URI} + DB_USERNAME: ${QUESTION_DB_USERNAME} + DB_PASSWORD: ${QUESTION_DB_PASSWORD} volumes: - /app/node_modules - ./services/question:/app diff --git a/services/question/.env.sample b/services/question/.env.sample new file mode 100644 index 0000000000..5613b8f4a7 --- /dev/null +++ b/services/question/.env.sample @@ -0,0 +1,9 @@ +# This is a sample environment configuration file. +# Copy this file to .env and replace the placeholder values with your own. +DB_CLOUD_URI= +DB_LOCAL_URI=mongodb://question-db:27017/question +DB_USERNAME=user +DB_PASSWORD=password +CORS_ORIGIN=* +PORT=8081 +NODE_ENV=development \ No newline at end of file diff --git a/services/question/eslint.config.mjs b/services/question/eslint.config.mjs index 04d352f27d..3f1c13ceb1 100644 --- a/services/question/eslint.config.mjs +++ b/services/question/eslint.config.mjs @@ -12,5 +12,13 @@ export default tseslint.config({ ...tseslint.configs.stylistic, eslintPluginPrettierRecommended, ], - rules: {}, + rules: { + // https://stackoverflow.com/questions/68816664/get-rid-of-error-delete-eslint-prettier-prettier-and-allow-use-double + 'prettier/prettier': [ + 'error', + { + 'endOfLine': 'auto', + } + ] + }, }); diff --git a/services/question/src/app.ts b/services/question/src/app.ts index f0dab0bdfe..ad51519cca 100644 --- a/services/question/src/app.ts +++ b/services/question/src/app.ts @@ -3,25 +3,23 @@ import morgan from 'morgan'; import cors from 'cors'; import router from './routes'; import questionRouter from './routes/questionRoutes'; -import { syncQuestions } from './setup'; -import { connectDb } from './models'; -import mongoose from 'mongoose'; import bodyParser from 'body-parser'; -import { corsOptions } from './config'; const app: Express = express(); -// Establish database connection -connectDb(); -mongoose.connection.once('open', async () => await syncQuestions()); - // Middleware app.use(morgan('dev')); app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); -app.use(cors(corsOptions)); +app.use( + cors({ + origin: process.env.CORS_ORIGIN ?? true, + methods: ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'], + allowedHeaders: ['Origin', 'X-Request-With', 'Content-Type', 'Accept', 'Authorization'], + }), +); // Routes app.use('/', router); diff --git a/services/question/src/config/index.ts b/services/question/src/config/index.ts deleted file mode 100644 index 37006cc1ee..0000000000 --- a/services/question/src/config/index.ts +++ /dev/null @@ -1,11 +0,0 @@ -export const PORT = 8081; -export const MONGODB_USERNAME = process.env.MONGODB_USERNAME; -export const MONGODB_PASSWORD = process.env.MONGODB_PASSWORD; -export const MONGODB_URL = 'mongodb://question-db:27017'; -export const MONGODB_DATABASE = 'question'; - -export const corsOptions = { - origin: process.env.corsOrigin ?? true, - methods: ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'], - allowedHeaders: ['Origin', 'X-Request-With', 'Content-Type', 'Accept', 'Authorization'], -}; diff --git a/services/question/src/config/questions.json b/services/question/src/data/questions.json similarity index 100% rename from services/question/src/config/questions.json rename to services/question/src/data/questions.json diff --git a/services/question/src/index.ts b/services/question/src/index.ts index cb83666a8b..99e6654e26 100644 --- a/services/question/src/index.ts +++ b/services/question/src/index.ts @@ -1,4 +1,20 @@ import app from './app'; -import { PORT } from './config'; +import { connectToDB, upsertManyQuestions } from './models'; +import { getDemoQuestions } from './utils/data'; -app.listen(PORT, () => console.log(`App is running on port ${PORT}.`)); +const port = process.env.PORT || 8081; + +connectToDB() + .then(async () => { + console.log('MongoDB connected successfully'); + return await getDemoQuestions(); + }) + .then(questions => upsertManyQuestions(questions)) + .then(() => { + console.log('Questions synced successfully'); + app.listen(port, () => console.log(`Question service is listening on port ${port}.`)); + }) + .catch(error => { + console.error('Failed to start server'); + console.error(error); + }); diff --git a/services/question/src/models/index.ts b/services/question/src/models/index.ts index 988460a157..b78620a016 100644 --- a/services/question/src/models/index.ts +++ b/services/question/src/models/index.ts @@ -1,18 +1,29 @@ import mongoose from 'mongoose'; -import { MONGODB_USERNAME, MONGODB_PASSWORD, MONGODB_URL, MONGODB_DATABASE } from '../config'; +import { IQuestion, Question } from './questionModel'; -export const connectDb = () => { - const connectionString = `${MONGODB_URL}/${MONGODB_DATABASE}`; +export async function connectToDB() { + const mongoURI = process.env.NODE_ENV === 'production' ? process.env.DB_CLOUD_URI : process.env.DB_LOCAL_URI; - mongoose - .connect(connectionString, { - authSource: 'admin', - user: MONGODB_USERNAME, - pass: MONGODB_PASSWORD, - }) - .then(() => console.log('MongoDB connected successfully')) - .catch(error => { - console.error('MongoDB connection error:', error.message); - process.exit(1); - }); -}; + if (!mongoURI) { + throw Error('MongoDB URI not specified'); + } else if (!process.env.DB_USERNAME || !process.env.DB_PASSWORD) { + throw Error('MongoDB credentials not specified'); + } + + await mongoose.connect(mongoURI, { + authSource: 'admin', + user: process.env.DB_USERNAME, + pass: process.env.DB_PASSWORD, + }); +} + +export async function upsertManyQuestions(questions: IQuestion[]) { + const ops = questions.map(item => ({ + updateOne: { + filter: { id: item.id }, + update: item, + upsert: true, + }, + })); + await Question.bulkWrite(ops); +} diff --git a/services/question/src/setup.ts b/services/question/src/setup.ts deleted file mode 100644 index 0950c2d516..0000000000 --- a/services/question/src/setup.ts +++ /dev/null @@ -1,29 +0,0 @@ -import fs from 'fs/promises'; -import { IQuestion, Question } from './models/questionModel'; - -const getQuestions = async (): Promise => { - const data = await fs.readFile('./src/config/questions.json', { encoding: 'utf8' }); - return JSON.parse(data); -}; - -export const syncQuestions = async () => { - try { - const questions = await getQuestions(); - const ops = questions.map(item => ({ - updateOne: { - filter: { id: item.id }, - update: item, - upsert: true, - }, - })); - await Question.bulkWrite(ops); - console.log('Questions synced successfully'); - } catch (error) { - if (error instanceof Error) { - console.log('Error syncing questions: ', error.message); - } else { - console.log('Error syncing questions'); - } - process.exit(1); - } -}; diff --git a/services/question/src/utils/data.ts b/services/question/src/utils/data.ts new file mode 100644 index 0000000000..2755c73ebd --- /dev/null +++ b/services/question/src/utils/data.ts @@ -0,0 +1,7 @@ +import fs from 'fs/promises'; +import { IQuestion } from '../models/questionModel'; + +export async function getDemoQuestions(): Promise { + const data = await fs.readFile('./src/data/questions.json', { encoding: 'utf8' }); + return JSON.parse(data); +} From 4376a62772acff3ec375013fd4fb5ec0bcac9db1 Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Sun, 15 Sep 2024 22:34:26 +0800 Subject: [PATCH 029/188] Update README.md --- .idea/.gitignore | 8 ++ .idea/cs3219-ay2425s1-project-g03.iml | 9 ++ .idea/inspectionProfiles/Project_Default.xml | 6 ++ .idea/misc.xml | 6 ++ .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 ++ README.md | 108 ++++++++++++++++++- 7 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/cs3219-ay2425s1-project-g03.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000000..13566b81b0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/cs3219-ay2425s1-project-g03.iml b/.idea/cs3219-ay2425s1-project-g03.iml new file mode 100644 index 0000000000..d6ebd48059 --- /dev/null +++ b/.idea/cs3219-ay2425s1-project-g03.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000000..03d9549ea8 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000000..e0844bc7be --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000000..09dd47d322 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000..35eb1ddfbb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/README.md b/README.md index 5ddee1cbf1..ef25b64012 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,112 @@ [![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-22041afd0340ce965d47ae6ef1cefeee28c7c493a6346c4f15d667ab976d596c.svg)](https://classroom.github.com/a/bzPrOe11) # CS3219 Project (PeerPrep) - AY2425S1 -## Group: Gxx +## Group: G03 ### Note: - You can choose to develop individual microservices within separate folders within this repository **OR** use individual repositories (all public) for each microservice. - In the latter scenario, you should enable sub-modules on this GitHub classroom repository to manage the development/deployment **AND** add your mentor to the individual repositories as a collaborator. -- The teaching team should be given access to the repositories as we may require viewing the history of the repository in case of any disputes or disagreements. +- The teaching team should be given access to the repositories as we may require viewing the history of the repository in case of any disputes or disagreements. + +# Question Service User Guide + +## Get All Questions +This endpoint allows the retrieval of all the questions in the database. + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions` + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, all questions are returned | +| 500 (Internal Server Error) | Unexpected error in the database or server | + +**Example of Response Body for Success**: +TBC + +## Get Question by ID +This endpoint allows the retrieval of the question by using the question ID. + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions/{questionId}` + +### Parameters: + +- Required: `questionId` path parameter + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, question corresponding to the questionID is returned | +| 404 (Not Found) | Question with the specified questionID not found | +| 500 (Internal Server Error) | Unexpected error in the database or server | + +**Example of Response Body for Success**: +TBC + +## Get Question by Parameters +This endpoint allows the retrieval of a random question that matches the parameters provided. + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions/search` + +### Parameters: + +- `limit` - The number of questions to be returned (Required) +- `topics` - The topic of the question (Required) +- `languages` - The language of the question (Required) +- `difficulty` - The difficulty of question (Required) + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, question corresponding to the limit, topics, languages and difficulty is returned | +| 400 (Bad Request) | Missing fields | +| 404 (Not Found) | Question with the specified parameter(s) not found | +| 500 (Internal Server Error) | Unexpected error in the database or server | + +**Example of Response Body for Success**: +TBC + +## Get Topics +This endpoint retrieves all unique topics in the database (e.g. “Sorting”, “OOP”, “DFS”, etc…) + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions/topics` + +### Headers: + +- Required: - + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, all topics are returned | +| 500 (Internal Server Error) | The server encountered an error and could not complete the request | + +**Example of Response Body for Success**: +TBC + +## Get Language +This endpoint retrieves all unique languages in the database (e.g, Java, C++, C, etc..) + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions/languages` + +### Headers: + +- Required: - + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, all languages are returned | +| 500 (Internal Server Error) | The server encountered an error and could not complete the request | + +**Example of Response Body for Success**: +TBC From ba95e712661c78ce8719acf8b77f37e6866d168f Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Sun, 15 Sep 2024 22:50:11 +0800 Subject: [PATCH 030/188] Update Readme.md to original format --- README.md | 106 +----------------------------------------------------- 1 file changed, 1 insertion(+), 105 deletions(-) diff --git a/README.md b/README.md index ef25b64012..b2c78fb560 100644 --- a/README.md +++ b/README.md @@ -5,108 +5,4 @@ ### Note: - You can choose to develop individual microservices within separate folders within this repository **OR** use individual repositories (all public) for each microservice. - In the latter scenario, you should enable sub-modules on this GitHub classroom repository to manage the development/deployment **AND** add your mentor to the individual repositories as a collaborator. -- The teaching team should be given access to the repositories as we may require viewing the history of the repository in case of any disputes or disagreements. - -# Question Service User Guide - -## Get All Questions -This endpoint allows the retrieval of all the questions in the database. - -- **HTTP Method**: `GET` -- **Endpoint**: `/questions` - -### Responses: - -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, all questions are returned | -| 500 (Internal Server Error) | Unexpected error in the database or server | - -**Example of Response Body for Success**: -TBC - -## Get Question by ID -This endpoint allows the retrieval of the question by using the question ID. - -- **HTTP Method**: `GET` -- **Endpoint**: `/questions/{questionId}` - -### Parameters: - -- Required: `questionId` path parameter - -### Responses: - -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, question corresponding to the questionID is returned | -| 404 (Not Found) | Question with the specified questionID not found | -| 500 (Internal Server Error) | Unexpected error in the database or server | - -**Example of Response Body for Success**: -TBC - -## Get Question by Parameters -This endpoint allows the retrieval of a random question that matches the parameters provided. - -- **HTTP Method**: `GET` -- **Endpoint**: `/questions/search` - -### Parameters: - -- `limit` - The number of questions to be returned (Required) -- `topics` - The topic of the question (Required) -- `languages` - The language of the question (Required) -- `difficulty` - The difficulty of question (Required) - -### Responses: - -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, question corresponding to the limit, topics, languages and difficulty is returned | -| 400 (Bad Request) | Missing fields | -| 404 (Not Found) | Question with the specified parameter(s) not found | -| 500 (Internal Server Error) | Unexpected error in the database or server | - -**Example of Response Body for Success**: -TBC - -## Get Topics -This endpoint retrieves all unique topics in the database (e.g. “Sorting”, “OOP”, “DFS”, etc…) - -- **HTTP Method**: `GET` -- **Endpoint**: `/questions/topics` - -### Headers: - -- Required: - - -### Responses: - -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, all topics are returned | -| 500 (Internal Server Error) | The server encountered an error and could not complete the request | - -**Example of Response Body for Success**: -TBC - -## Get Language -This endpoint retrieves all unique languages in the database (e.g, Java, C++, C, etc..) - -- **HTTP Method**: `GET` -- **Endpoint**: `/questions/languages` - -### Headers: - -- Required: - - -### Responses: - -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, all languages are returned | -| 500 (Internal Server Error) | The server encountered an error and could not complete the request | - -**Example of Response Body for Success**: -TBC +- The teaching team should be given access to the repositories as we may require viewing the history of the repository in case of any disputes or disagreements. \ No newline at end of file From 85df44d0b86d509a7b7dc6bbc3e8cdcc6616c30b Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Sun, 15 Sep 2024 22:58:56 +0800 Subject: [PATCH 031/188] Update README.md for Question Service --- README.md | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 104 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5ddee1cbf1..57d341b438 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,107 @@ [![Review Assignment Due Date](https://classroom.github.com/assets/deadline-readme-button-22041afd0340ce965d47ae6ef1cefeee28c7c493a6346c4f15d667ab976d596c.svg)](https://classroom.github.com/a/bzPrOe11) # CS3219 Project (PeerPrep) - AY2425S1 -## Group: Gxx +## Group: G03 -### Note: -- You can choose to develop individual microservices within separate folders within this repository **OR** use individual repositories (all public) for each microservice. -- In the latter scenario, you should enable sub-modules on this GitHub classroom repository to manage the development/deployment **AND** add your mentor to the individual repositories as a collaborator. -- The teaching team should be given access to the repositories as we may require viewing the history of the repository in case of any disputes or disagreements. +# Question Service User Guide + +## Get All Questions +This endpoint allows the retrieval of all the questions in the database. + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions` + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, all questions are returned | +| 500 (Internal Server Error) | Unexpected error in the database or server | + +**Example of Response Body for Success**: +TBC + +## Get Question by ID +This endpoint allows the retrieval of the question by using the question ID. + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions/{questionId}` + +### Parameters: + +- Required: `questionId` path parameter + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, question corresponding to the questionID is returned | +| 404 (Not Found) | Question with the specified questionID not found | +| 500 (Internal Server Error) | Unexpected error in the database or server | + +**Example of Response Body for Success**: +TBC + +## Get Question by Parameters +This endpoint allows the retrieval of a random question that matches the parameters provided. + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions/search` + +### Parameters: + +- `limit` - The number of questions to be returned (Required) +- `topics` - The topic of the question (Required) +- `languages` - The language of the question (Required) +- `difficulty` - The difficulty of question (Required) + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, question corresponding to the limit, topics, languages and difficulty is returned | +| 400 (Bad Request) | Missing fields | +| 404 (Not Found) | Question with the specified parameter(s) not found | +| 500 (Internal Server Error) | Unexpected error in the database or server | + +**Example of Response Body for Success**: +TBC + +## Get Topics +This endpoint retrieves all unique topics in the database (e.g. “Sorting”, “OOP”, “DFS”, etc…) + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions/topics` + +### Headers: + +- Required: - + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, all topics are returned | +| 500 (Internal Server Error) | The server encountered an error and could not complete the request | + +**Example of Response Body for Success**: +TBC + +## Get Language +This endpoint retrieves all unique languages in the database (e.g, Java, C++, C, etc..) + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions/languages` + +### Headers: + +- Required: - + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, all languages are returned | +| 500 (Internal Server Error) | The server encountered an error and could not complete the request | + +**Example of Response Body for Success**: +TBC From 909b93ac79b8d42f7ceb01b2e4739e95c7f068bf Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Sun, 15 Sep 2024 23:11:13 +0800 Subject: [PATCH 032/188] Update README.md --- .idea/.gitignore | 8 +++ README.md | 107 ++---------------------------------- services/question/README.md | 103 ++++++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+), 103 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 services/question/README.md diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000000..13566b81b0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/README.md b/README.md index 57d341b438..1f1edee3a5 100644 --- a/README.md +++ b/README.md @@ -2,106 +2,7 @@ # CS3219 Project (PeerPrep) - AY2425S1 ## Group: G03 -# Question Service User Guide - -## Get All Questions -This endpoint allows the retrieval of all the questions in the database. - -- **HTTP Method**: `GET` -- **Endpoint**: `/questions` - -### Responses: - -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, all questions are returned | -| 500 (Internal Server Error) | Unexpected error in the database or server | - -**Example of Response Body for Success**: -TBC - -## Get Question by ID -This endpoint allows the retrieval of the question by using the question ID. - -- **HTTP Method**: `GET` -- **Endpoint**: `/questions/{questionId}` - -### Parameters: - -- Required: `questionId` path parameter - -### Responses: - -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, question corresponding to the questionID is returned | -| 404 (Not Found) | Question with the specified questionID not found | -| 500 (Internal Server Error) | Unexpected error in the database or server | - -**Example of Response Body for Success**: -TBC - -## Get Question by Parameters -This endpoint allows the retrieval of a random question that matches the parameters provided. - -- **HTTP Method**: `GET` -- **Endpoint**: `/questions/search` - -### Parameters: - -- `limit` - The number of questions to be returned (Required) -- `topics` - The topic of the question (Required) -- `languages` - The language of the question (Required) -- `difficulty` - The difficulty of question (Required) - -### Responses: - -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, question corresponding to the limit, topics, languages and difficulty is returned | -| 400 (Bad Request) | Missing fields | -| 404 (Not Found) | Question with the specified parameter(s) not found | -| 500 (Internal Server Error) | Unexpected error in the database or server | - -**Example of Response Body for Success**: -TBC - -## Get Topics -This endpoint retrieves all unique topics in the database (e.g. “Sorting”, “OOP”, “DFS”, etc…) - -- **HTTP Method**: `GET` -- **Endpoint**: `/questions/topics` - -### Headers: - -- Required: - - -### Responses: - -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, all topics are returned | -| 500 (Internal Server Error) | The server encountered an error and could not complete the request | - -**Example of Response Body for Success**: -TBC - -## Get Language -This endpoint retrieves all unique languages in the database (e.g, Java, C++, C, etc..) - -- **HTTP Method**: `GET` -- **Endpoint**: `/questions/languages` - -### Headers: - -- Required: - - -### Responses: - -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, all languages are returned | -| 500 (Internal Server Error) | The server encountered an error and could not complete the request | - -**Example of Response Body for Success**: -TBC +### Note: +- You can choose to develop individual microservices within separate folders within this repository **OR** use individual repositories (all public) for each microservice. +- In the latter scenario, you should enable sub-modules on this GitHub classroom repository to manage the development/deployment **AND** add your mentor to the individual repositories as a collaborator. +- The teaching team should be given access to the repositories as we may require viewing the history of the repository in case of any disputes or disagreements. diff --git a/services/question/README.md b/services/question/README.md new file mode 100644 index 0000000000..6d952159e9 --- /dev/null +++ b/services/question/README.md @@ -0,0 +1,103 @@ +# Question Service User Guide + +## Get All Questions +This endpoint allows the retrieval of all the questions in the database. + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions` + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, all questions are returned | +| 500 (Internal Server Error) | Unexpected error in the database or server | + +**Example of Response Body for Success**: +TBC + +## Get Question by ID +This endpoint allows the retrieval of the question by using the question ID. + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions/{questionId}` + +### Parameters: + +- Required: `questionId` path parameter + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, question corresponding to the questionID is returned | +| 404 (Not Found) | Question with the specified questionID not found | +| 500 (Internal Server Error) | Unexpected error in the database or server | + +**Example of Response Body for Success**: +TBC + +## Get Question by Parameters +This endpoint allows the retrieval of a random question that matches the parameters provided. + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions/search` + +### Parameters: + +- `limit` - The number of questions to be returned (Required) +- `topics` - The topic of the question (Required) +- `languages` - The language of the question (Required) +- `difficulty` - The difficulty of question (Required) + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, question corresponding to the limit, topics, languages and difficulty is returned | +| 400 (Bad Request) | Missing fields | +| 404 (Not Found) | Question with the specified parameter(s) not found | +| 500 (Internal Server Error) | Unexpected error in the database or server | + +**Example of Response Body for Success**: +TBC + +## Get Topics +This endpoint retrieves all unique topics in the database (e.g. “Sorting”, “OOP”, “DFS”, etc…) + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions/topics` + +### Headers: + +- Required: - + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, all topics are returned | +| 500 (Internal Server Error) | The server encountered an error and could not complete the request | + +**Example of Response Body for Success**: +TBC + +## Get Language +This endpoint retrieves all unique languages in the database (e.g, Java, C++, C, etc..) + +- **HTTP Method**: `GET` +- **Endpoint**: `/questions/languages` + +### Headers: + +- Required: - + +### Responses: + +| Response Code | Explanation | +|---------------|-----------------------------------------------------| +| 200 (OK) | Success, all languages are returned | +| 500 (Internal Server Error) | The server encountered an error and could not complete the request | + +**Example of Response Body for Success**: +TBC From d4938d9b8ef0dc1fc72d5e12a0929ef256d13c38 Mon Sep 17 00:00:00 2001 From: McNaBry Date: Mon, 16 Sep 2024 12:24:48 +0800 Subject: [PATCH 033/188] Update getQuestions function declaration --- services/question/src/controllers/questionController.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/question/src/controllers/questionController.ts b/services/question/src/controllers/questionController.ts index b992b3189e..915d7bdb97 100644 --- a/services/question/src/controllers/questionController.ts +++ b/services/question/src/controllers/questionController.ts @@ -1,7 +1,7 @@ -import { Response } from 'express'; +import { Request, Response } from 'express'; import { Question } from '../models/questionModel'; -export const getQuestions = async (res: Response) => { +export const getQuestions = async (req: Request, res: Response) => { const questions = await Question.find(); const questionTitles = questions.map(q => q.title); res.status(200).json({ From ff17dd9c61968db94526bf67a7a459e694d4e7eb Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Mon, 16 Sep 2024 21:24:55 +0800 Subject: [PATCH 034/188] Rename complexity to difficulty The project document uses both terms question complexity and difficulty level. Let's stick to using difficulty as it is easier to understand. --- services/question/src/data/questions.json | 40 +++++++++---------- services/question/src/models/questionModel.ts | 4 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/services/question/src/data/questions.json b/services/question/src/data/questions.json index 3a76ea8ed7..f76418ef36 100644 --- a/services/question/src/data/questions.json +++ b/services/question/src/data/questions.json @@ -4,139 +4,139 @@ "title": "Reverse a String", "description": "Write a function that reverses a string. The input string is given as an array of characters s.\n\nYou must do this by modifying the input array in-place with O(1) extra memory.\n\n\nExample 1:\n\nInput: s = [\"h\",\"e\",\"l\",\"l\",\"o\"]\nOutput: [\"o\",\"l\",\"l\",\"e\",\"h\"]\n\nExample 2:\nInput: s = [\"H\",\"a\",\"n\",\"n\",\"a\",\"h\"]\nOutput: [\"h\",\"a\",\"n\",\"n\",\"a\",\"H\"]\n\nConstraints:\n1 <= s.length <= 105 s[i] is a printable ascii character.", "categories": ["Strings", "Algorithms"], - "complexity": "Easy" + "difficulty": "Easy" }, { "id": 2, "title": "Linked List Cycle Detection", "description": "Implement a function to detect if a linked list contains a cycle.", "categories": ["Data Structures", "Algorithms"], - "complexity": "Easy" + "difficulty": "Easy" }, { "id": 3, "title": "Roman to Integer", "description": "Given a roman numeral, convert it to an integer.", "categories": ["Algorithms"], - "complexity": "Easy" + "difficulty": "Easy" }, { "id": 4, "title": "Add Binary", "description": "Given two binary strings a and b, return their sum as a binary string.", "categories": ["Bit Manipulation", "Algorithms"], - "complexity": "Easy" + "difficulty": "Easy" }, { "id": 5, "title": "Fibonacci Number", "description": "The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1. That is,\n\nF(0) = 0, F(1) = 1 F(n) = F(n - 1) + F(n - 2), for n > 1.\n\nGiven n, calculate F(n).", "categories": ["Recursion", "Algorithms"], - "complexity": "Easy" + "difficulty": "Easy" }, { "id": 6, "title": "Implement Stack using Queues", "description": "Implement a last-in first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (push, top, pop, and empty).", "categories": ["Data Structures"], - "complexity": "Easy" + "difficulty": "Easy" }, { "id": 7, "title": "Combine Two Tables", "description": "Given table Person with the following columns:\n1. personId (int)\n2. lastName (varchar)\n3. firstName (varchar)\npersonId is the primary key.\n\nAnd table Address with the following columns:\n1. addressId (int)\n2. personId (int)\n3. city (varchar)\n4. state (varchar)\naddressId is the primary key.\n\nWrite a solution to report the first name, last name, city, and state of each person in the Person table. If the address of a personId is not present in the Address table, report null instead. Return the result table in any order.", "categories": ["Databases"], - "complexity": "Easy" + "difficulty": "Easy" }, { "id": 8, "title": "Repeated DNA Sequences", "description": "The DNA sequence is composed of a series of nucleotides abbreviated as 'A', 'C', 'G', and 'T'.\n\nFor example, \"ACGAATTCCG\" is a DNA sequence. When studying DNA, it is useful to identify repeated sequences within the DNA.\n\nGiven a string s that represents a DNA sequence, return all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule. You may return the answer in any order.", "categories": ["Algorithms", "Bit Manipulation"], - "complexity": "Medium" + "difficulty": "Medium" }, { "id": 9, "title": "Course Schedule", "description": "There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1. You are given an array prerequisites where prerequisites[i] = [ai, bi] indicates that you must take course bi first if you want to take course ai.\n\nFor example, the pair [0, 1], indicates that to take course 0 you have to first take course 1. Return true if you can finish all courses. Otherwise, return false.", "categories": ["Data Structures", "Algorithms"], - "complexity": "Medium" + "difficulty": "Medium" }, { "id": 10, "title": "LRU Cache Design", "description": "Design and implement an LRU (Least Recently Used) cache.", "categories": ["Data Structures"], - "complexity": "Medium" + "difficulty": "Medium" }, { "id": 11, "title": "Longest Common Subsequence", "description": "Given two strings text1 and text2, return the length of their longest common subsequence. If there is no common subsequence, return 0.\n\nA subsequence of a string is a new string generated from the original string with some characters (can be none) deleted without changing the relative order of the remaining characters.\n\nFor example, \"ace\" is a subsequence of \"abcde\". A common subsequence of two strings is a subsequence that is common to both strings.", "categories": ["Strings", "Algorithms"], - "complexity": "Medium" + "difficulty": "Medium" }, { "id": 12, "title": "Rotate Image", "description": "You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).", "categories": ["Arrays", "Algorithms"], - "complexity": "Medium" + "difficulty": "Medium" }, { "id": 13, "title": "Airplane Seat Assignment Probability", "description": "n passengers board an airplane with exactly n seats. The first passenger has lost the ticket and picks a seat randomly. But after that, the rest of the passengers will:\nTake their own seat if it is still available, and Pick other seats randomly when they find their seat occupied\n\nReturn the probability that the nth person gets his own seat.", "categories": ["Brainteaser"], - "complexity": "Medium" + "difficulty": "Medium" }, { "id": 14, "title": "Validate Binary Search Tree", "description": "Given the root of a binary tree, determine if it is a valid binary search tree (BST).", "categories": ["Data Structures", "Algorithms"], - "complexity": "Medium" + "difficulty": "Medium" }, { "id": 15, "title": "Sliding Window Maximum", "description": "You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.\n\nReturn the max sliding window.", "categories": ["Arrays", "Algorithms"], - "complexity": "Hard" + "difficulty": "Hard" }, { "id": 16, "title": "N-Queen Problem", "description": "The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other.\n\nGiven an integer n, return all distinct solutions to the n queens puzzle. You may return the answer in any order.\n\nEach solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space, respectively.", "categories": ["Algorithms"], - "complexity": "Hard" + "difficulty": "Hard" }, { "id": 17, "title": "Serialize and Deserialize a Binary Tree", "description": "Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.\n\nDesign an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserializ ation algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.", "categories": ["Data Structures", "Algorithms"], - "complexity": "Hard" + "difficulty": "Hard" }, { "id": 18, "title": "Wildcard Matching", "description": "Given an input string (s) and a pattern (p), implement wildcard pattern matching with support for '?' and '*' where:\n\n'?' Matches any single character. '*' Matches any sequence of characters (including the empty sequence).\nThe matching should cover the entire input string (not partial).", "categories": ["Strings", "Algorithms"], - "complexity": "Hard" + "difficulty": "Hard" }, { "id": 19, "title": "Chalkboard XOR Game", "description": "You are given an array of integers nums represents the numbers written on a chalkboard.\n\nAlice and Bob take turns erasing exactly one number from the chalkboard, with Alice starting first. If erasing a number causes the bitwise XOR of all the elements of the chalkboard to become 0, then that player loses. The bitwise XOR of one element is that element itself, and the bitwise XOR of no elements is 0.\n\nAlso, if any player starts their turn with the bitwise XOR of all the elements of the chalkboard equal to 0, then that player wins.\n\nReturn true if and only if Alice wins the game, assuming both players play optimally.", "categories": ["Brainteaser"], - "complexity": "Hard" + "difficulty": "Hard" }, { "id": 20, "title": "Trips and Users", "description": "Given table Trips:\n1. id (int)\n2. client_id (int)\n3. driver_id (int)\n4. city_id (int)\n5. status (enum)\n6. request_at(da te)\nid is the primary key.\nThe table holds all taxi trips. Each trip has a unique id, while client_id and driver_id are foreign keys to the users_id at the Users table. Status is an ENUM (category) type of ('completed', 'cancelled_by_driver', 'cancelled_by_client').\n\nAnd table Users:\n1. users_id (int)\n2. banned (enum)\n3. role (enum)\nusers_id is the primary key (column with unique values) for this table. The table holds all users. Each user has a unique users_id, and role is an ENUM type of ('client', 'driver', 'partner'). banned is an ENUM (category) type of ('Yes', 'No'). The cancellation rate is computed by dividing the number of canceled (by client or driver) requests with unbanned users by the total number of requests with unbanned users on that day.\n\nWrite a solution to find the cancellation rate of requests with unbanned users (both client and driver must not be banned) each day between \"2013-10-01\" and \"2013-10-03\". Round Cancellation Rate to two decimal points.\n\nReturn the result table in any order.", "categories": ["Databases"], - "complexity": "Hard" + "difficulty": "Hard" } ] \ No newline at end of file diff --git a/services/question/src/models/questionModel.ts b/services/question/src/models/questionModel.ts index d10bdfad2a..4a05ca9e38 100644 --- a/services/question/src/models/questionModel.ts +++ b/services/question/src/models/questionModel.ts @@ -5,7 +5,7 @@ export interface IQuestion { title: string; description: string; categories: [string]; - complexity: string; + difficulty: string; } const questionSchema = new Schema( @@ -14,7 +14,7 @@ const questionSchema = new Schema( title: String, description: String, categories: [String], - complexity: { type: String, enum: ['Easy', 'Medium', 'Difficult'] }, + difficulty: { type: String, enum: ['Easy', 'Medium', 'Difficult'] }, }, { versionKey: false }, ); From 7a3db931a205b4745ec8e84a98341b6c60f3dae7 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Mon, 16 Sep 2024 21:38:17 +0800 Subject: [PATCH 035/188] Specify question schema --- services/question/src/models/questionModel.ts | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/services/question/src/models/questionModel.ts b/services/question/src/models/questionModel.ts index 4a05ca9e38..030bd739b2 100644 --- a/services/question/src/models/questionModel.ts +++ b/services/question/src/models/questionModel.ts @@ -1,20 +1,44 @@ import { model, Schema } from 'mongoose'; +enum Difficulty { + Easy = 'Easy', + Medium = 'Medium', + Hard = 'Hard', +} + export interface IQuestion { id: number; title: string; description: string; categories: [string]; - difficulty: string; + difficulty: Difficulty; } const questionSchema = new Schema( { - id: { type: Number, required: true, unique: true }, - title: String, - description: String, - categories: [String], - difficulty: { type: String, enum: ['Easy', 'Medium', 'Difficult'] }, + id: { + type: Number, + required: true, + unique: true, + }, + title: { + type: String, + required: true, + unique: true, + }, + description: { + type: String, + required: true, + }, + categories: { + type: [String], + required: true, + }, + difficulty: { + type: String, + required: true, + enum: ['Easy', 'Medium', 'Difficult'], + }, }, { versionKey: false }, ); From 2171c15c9deace3e54ddc855187450bf86fd0aae Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Mon, 16 Sep 2024 22:01:19 +0800 Subject: [PATCH 036/188] Rename categories to topics --- services/question/src/data/questions.json | 40 +++++++++---------- services/question/src/models/questionModel.ts | 4 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/services/question/src/data/questions.json b/services/question/src/data/questions.json index f76418ef36..881e421195 100644 --- a/services/question/src/data/questions.json +++ b/services/question/src/data/questions.json @@ -3,140 +3,140 @@ "id": 1, "title": "Reverse a String", "description": "Write a function that reverses a string. The input string is given as an array of characters s.\n\nYou must do this by modifying the input array in-place with O(1) extra memory.\n\n\nExample 1:\n\nInput: s = [\"h\",\"e\",\"l\",\"l\",\"o\"]\nOutput: [\"o\",\"l\",\"l\",\"e\",\"h\"]\n\nExample 2:\nInput: s = [\"H\",\"a\",\"n\",\"n\",\"a\",\"h\"]\nOutput: [\"h\",\"a\",\"n\",\"n\",\"a\",\"H\"]\n\nConstraints:\n1 <= s.length <= 105 s[i] is a printable ascii character.", - "categories": ["Strings", "Algorithms"], + "topics": ["Strings", "Algorithms"], "difficulty": "Easy" }, { "id": 2, "title": "Linked List Cycle Detection", "description": "Implement a function to detect if a linked list contains a cycle.", - "categories": ["Data Structures", "Algorithms"], + "topics": ["Data Structures", "Algorithms"], "difficulty": "Easy" }, { "id": 3, "title": "Roman to Integer", "description": "Given a roman numeral, convert it to an integer.", - "categories": ["Algorithms"], + "topics": ["Algorithms"], "difficulty": "Easy" }, { "id": 4, "title": "Add Binary", "description": "Given two binary strings a and b, return their sum as a binary string.", - "categories": ["Bit Manipulation", "Algorithms"], + "topics": ["Bit Manipulation", "Algorithms"], "difficulty": "Easy" }, { "id": 5, "title": "Fibonacci Number", "description": "The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1. That is,\n\nF(0) = 0, F(1) = 1 F(n) = F(n - 1) + F(n - 2), for n > 1.\n\nGiven n, calculate F(n).", - "categories": ["Recursion", "Algorithms"], + "topics": ["Recursion", "Algorithms"], "difficulty": "Easy" }, { "id": 6, "title": "Implement Stack using Queues", "description": "Implement a last-in first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (push, top, pop, and empty).", - "categories": ["Data Structures"], + "topics": ["Data Structures"], "difficulty": "Easy" }, { "id": 7, "title": "Combine Two Tables", "description": "Given table Person with the following columns:\n1. personId (int)\n2. lastName (varchar)\n3. firstName (varchar)\npersonId is the primary key.\n\nAnd table Address with the following columns:\n1. addressId (int)\n2. personId (int)\n3. city (varchar)\n4. state (varchar)\naddressId is the primary key.\n\nWrite a solution to report the first name, last name, city, and state of each person in the Person table. If the address of a personId is not present in the Address table, report null instead. Return the result table in any order.", - "categories": ["Databases"], + "topics": ["Databases"], "difficulty": "Easy" }, { "id": 8, "title": "Repeated DNA Sequences", "description": "The DNA sequence is composed of a series of nucleotides abbreviated as 'A', 'C', 'G', and 'T'.\n\nFor example, \"ACGAATTCCG\" is a DNA sequence. When studying DNA, it is useful to identify repeated sequences within the DNA.\n\nGiven a string s that represents a DNA sequence, return all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule. You may return the answer in any order.", - "categories": ["Algorithms", "Bit Manipulation"], + "topics": ["Algorithms", "Bit Manipulation"], "difficulty": "Medium" }, { "id": 9, "title": "Course Schedule", "description": "There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1. You are given an array prerequisites where prerequisites[i] = [ai, bi] indicates that you must take course bi first if you want to take course ai.\n\nFor example, the pair [0, 1], indicates that to take course 0 you have to first take course 1. Return true if you can finish all courses. Otherwise, return false.", - "categories": ["Data Structures", "Algorithms"], + "topics": ["Data Structures", "Algorithms"], "difficulty": "Medium" }, { "id": 10, "title": "LRU Cache Design", "description": "Design and implement an LRU (Least Recently Used) cache.", - "categories": ["Data Structures"], + "topics": ["Data Structures"], "difficulty": "Medium" }, { "id": 11, "title": "Longest Common Subsequence", "description": "Given two strings text1 and text2, return the length of their longest common subsequence. If there is no common subsequence, return 0.\n\nA subsequence of a string is a new string generated from the original string with some characters (can be none) deleted without changing the relative order of the remaining characters.\n\nFor example, \"ace\" is a subsequence of \"abcde\". A common subsequence of two strings is a subsequence that is common to both strings.", - "categories": ["Strings", "Algorithms"], + "topics": ["Strings", "Algorithms"], "difficulty": "Medium" }, { "id": 12, "title": "Rotate Image", "description": "You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).", - "categories": ["Arrays", "Algorithms"], + "topics": ["Arrays", "Algorithms"], "difficulty": "Medium" }, { "id": 13, "title": "Airplane Seat Assignment Probability", "description": "n passengers board an airplane with exactly n seats. The first passenger has lost the ticket and picks a seat randomly. But after that, the rest of the passengers will:\nTake their own seat if it is still available, and Pick other seats randomly when they find their seat occupied\n\nReturn the probability that the nth person gets his own seat.", - "categories": ["Brainteaser"], + "topics": ["Brainteaser"], "difficulty": "Medium" }, { "id": 14, "title": "Validate Binary Search Tree", "description": "Given the root of a binary tree, determine if it is a valid binary search tree (BST).", - "categories": ["Data Structures", "Algorithms"], + "topics": ["Data Structures", "Algorithms"], "difficulty": "Medium" }, { "id": 15, "title": "Sliding Window Maximum", "description": "You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.\n\nReturn the max sliding window.", - "categories": ["Arrays", "Algorithms"], + "topics": ["Arrays", "Algorithms"], "difficulty": "Hard" }, { "id": 16, "title": "N-Queen Problem", "description": "The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other.\n\nGiven an integer n, return all distinct solutions to the n queens puzzle. You may return the answer in any order.\n\nEach solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space, respectively.", - "categories": ["Algorithms"], + "topics": ["Algorithms"], "difficulty": "Hard" }, { "id": 17, "title": "Serialize and Deserialize a Binary Tree", "description": "Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.\n\nDesign an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserializ ation algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.", - "categories": ["Data Structures", "Algorithms"], + "topics": ["Data Structures", "Algorithms"], "difficulty": "Hard" }, { "id": 18, "title": "Wildcard Matching", "description": "Given an input string (s) and a pattern (p), implement wildcard pattern matching with support for '?' and '*' where:\n\n'?' Matches any single character. '*' Matches any sequence of characters (including the empty sequence).\nThe matching should cover the entire input string (not partial).", - "categories": ["Strings", "Algorithms"], + "topics": ["Strings", "Algorithms"], "difficulty": "Hard" }, { "id": 19, "title": "Chalkboard XOR Game", "description": "You are given an array of integers nums represents the numbers written on a chalkboard.\n\nAlice and Bob take turns erasing exactly one number from the chalkboard, with Alice starting first. If erasing a number causes the bitwise XOR of all the elements of the chalkboard to become 0, then that player loses. The bitwise XOR of one element is that element itself, and the bitwise XOR of no elements is 0.\n\nAlso, if any player starts their turn with the bitwise XOR of all the elements of the chalkboard equal to 0, then that player wins.\n\nReturn true if and only if Alice wins the game, assuming both players play optimally.", - "categories": ["Brainteaser"], + "topics": ["Brainteaser"], "difficulty": "Hard" }, { "id": 20, "title": "Trips and Users", "description": "Given table Trips:\n1. id (int)\n2. client_id (int)\n3. driver_id (int)\n4. city_id (int)\n5. status (enum)\n6. request_at(da te)\nid is the primary key.\nThe table holds all taxi trips. Each trip has a unique id, while client_id and driver_id are foreign keys to the users_id at the Users table. Status is an ENUM (category) type of ('completed', 'cancelled_by_driver', 'cancelled_by_client').\n\nAnd table Users:\n1. users_id (int)\n2. banned (enum)\n3. role (enum)\nusers_id is the primary key (column with unique values) for this table. The table holds all users. Each user has a unique users_id, and role is an ENUM type of ('client', 'driver', 'partner'). banned is an ENUM (category) type of ('Yes', 'No'). The cancellation rate is computed by dividing the number of canceled (by client or driver) requests with unbanned users by the total number of requests with unbanned users on that day.\n\nWrite a solution to find the cancellation rate of requests with unbanned users (both client and driver must not be banned) each day between \"2013-10-01\" and \"2013-10-03\". Round Cancellation Rate to two decimal points.\n\nReturn the result table in any order.", - "categories": ["Databases"], + "topics": ["Databases"], "difficulty": "Hard" } ] \ No newline at end of file diff --git a/services/question/src/models/questionModel.ts b/services/question/src/models/questionModel.ts index 030bd739b2..84de364fb1 100644 --- a/services/question/src/models/questionModel.ts +++ b/services/question/src/models/questionModel.ts @@ -10,7 +10,7 @@ export interface IQuestion { id: number; title: string; description: string; - categories: [string]; + topics: [string]; difficulty: Difficulty; } @@ -30,7 +30,7 @@ const questionSchema = new Schema( type: String, required: true, }, - categories: { + topics: { type: [String], required: true, }, From 6cf62984ae28d246573d233ad0348c45cbc3f5b5 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Tue, 17 Sep 2024 17:13:51 +0800 Subject: [PATCH 037/188] Fix getHealth fuction parameters --- .env.sample | 2 -- services/question/src/controllers/index.ts | 5 ++--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/.env.sample b/.env.sample index 030ec204c3..93441ff3f8 100644 --- a/.env.sample +++ b/.env.sample @@ -4,7 +4,5 @@ QUESTION_DB_CLOUD_URI= QUESTION_DB_LOCAL_URI=mongodb://question-db:27017/question QUESTION_DB_USERNAME=user QUESTION_DB_PASSWORD=password -QUESTION_CORS_ORIGIN=* -QUESTION_PORT=8081 NODE_ENV=development \ No newline at end of file diff --git a/services/question/src/controllers/index.ts b/services/question/src/controllers/index.ts index 7d7a9bbb34..98bd3586eb 100644 --- a/services/question/src/controllers/index.ts +++ b/services/question/src/controllers/index.ts @@ -1,8 +1,7 @@ -import { Response } from 'express'; +import { Request, Response } from 'express'; -export const getHealth = async (res: Response) => { +export const getHealth = async (req: Request, res: Response) => { res.status(200).json({ message: 'Server is up and running!', }); - return; }; From 5a6faf3e83ef1232451e660dc151ac1ee3f22089 Mon Sep 17 00:00:00 2001 From: McNaBry Date: Wed, 18 Sep 2024 12:15:37 +0800 Subject: [PATCH 038/188] Add PrimeNG --- frontend/package-lock.json | 17 ++ frontend/package.json | 1 + frontend/src/app/app.component.css | 17 ++ frontend/src/app/app.component.html | 332 +--------------------------- frontend/src/app/app.component.ts | 3 +- frontend/src/styles.css | 2 + 6 files changed, 41 insertions(+), 331 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 8698d865dd..a7b75bb8d2 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -16,6 +16,7 @@ "@angular/platform-browser": "^18.2.0", "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", + "primeng": "^17.18.10", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.14.10" @@ -13587,6 +13588,22 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/primeng": { + "version": "17.18.10", + "resolved": "https://registry.npmjs.org/primeng/-/primeng-17.18.10.tgz", + "integrity": "sha512-P3UskInOZ7qYICxSYvf0K8nUEb7DmndiXmyvLGU1wch+XcVWmVs4FZsWKNfdvK7TUdxxYj8WW44nodNV/epr3A==", + "license": "MIT", + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/common": "^17.0.0 || ^18.0.0", + "@angular/core": "^17.0.0 || ^18.0.0", + "@angular/forms": "^17.0.0 || ^18.0.0", + "rxjs": "^6.0.0 || ^7.8.1", + "zone.js": "~0.14.0" + } + }, "node_modules/proc-log": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 6de9739932..c2262bc9d8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -19,6 +19,7 @@ "@angular/platform-browser": "^18.2.0", "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", + "primeng": "^17.18.10", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.14.10" diff --git a/frontend/src/app/app.component.css b/frontend/src/app/app.component.css index e69de29bb2..0bf94ecf3c 100644 --- a/frontend/src/app/app.component.css +++ b/frontend/src/app/app.component.css @@ -0,0 +1,17 @@ +main { + width: 100%; + min-height: 100%; + display: flex; + justify-content: center; + align-items: center; + padding: 1rem; + box-sizing: inherit; + position: relative; +} + +.content { + display: flex; + flex-direction: column; + width: 100%; + margin-bottom: 3rem; +} \ No newline at end of file diff --git a/frontend/src/app/app.component.html b/frontend/src/app/app.component.html index 36093e1879..fe21175a9c 100644 --- a/frontend/src/app/app.component.html +++ b/frontend/src/app/app.component.html @@ -1,336 +1,8 @@ - - - - - - - - - - -
-
- -

Hello, {{ title }}

-

Congratulations! Your app is running. 🎉

-
- -
-
- @for (item of [ - { title: 'Explore the Docs', link: 'https://angular.dev' }, - { title: 'Learn with Tutorials', link: 'https://angular.dev/tutorials' }, - { title: 'CLI Docs', link: 'https://angular.dev/tools/cli' }, - { title: 'Angular Language Service', link: 'https://angular.dev/tools/language-service' }, - { title: 'Angular DevTools', link: 'https://angular.dev/tools/devtools' }, - ]; track item.title) { - - {{ item.title }} - - - - - } -
- -
+

Hello, this is a paragraph!

+
- - - - - - - - - diff --git a/frontend/src/app/app.component.ts b/frontend/src/app/app.component.ts index b7a2b9f112..876dab9dfc 100644 --- a/frontend/src/app/app.component.ts +++ b/frontend/src/app/app.component.ts @@ -1,10 +1,11 @@ import { Component } from '@angular/core'; import { RouterOutlet } from '@angular/router'; +import { ButtonModule } from 'primeng/button'; @Component({ selector: 'app-root', standalone: true, - imports: [RouterOutlet], + imports: [RouterOutlet, ButtonModule], templateUrl: './app.component.html', styleUrl: './app.component.css', }) diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 90d4ee0072..ccceb1856e 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -1 +1,3 @@ /* You can add global styles to this file, and also import other style files */ +@import "primeng/resources/themes/aura-dark-blue/theme.css"; +@import "primeng/resources/primeng.css"; \ No newline at end of file From a2e130c5064b218d5cfc1510bfbe1b94af4ceef2 Mon Sep 17 00:00:00 2001 From: McNaBry Date: Wed, 18 Sep 2024 12:24:23 +0800 Subject: [PATCH 039/188] Add ng lint fix --- frontend/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/package.json b/frontend/package.json index c2262bc9d8..ce295b5cc1 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -7,7 +7,8 @@ "build": "ng build", "watch": "ng build --watch --configuration development", "test": "ng test", - "lint": "ng lint" + "lint": "ng lint", + "lint:fix": "ng lint --fix" }, "private": true, "dependencies": { From 423a305d8c25916807a864813c261b63c429db68 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Wed, 18 Sep 2024 18:24:27 +0800 Subject: [PATCH 040/188] init question components --- frontend/angular.json | 3 ++- .../src/app/questions/questions.component.css | 0 .../app/questions/questions.component.html | 1 + .../app/questions/questions.component.spec.ts | 23 +++++++++++++++++++ .../src/app/questions/questions.component.ts | 12 ++++++++++ 5 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 frontend/src/app/questions/questions.component.css create mode 100644 frontend/src/app/questions/questions.component.html create mode 100644 frontend/src/app/questions/questions.component.spec.ts create mode 100644 frontend/src/app/questions/questions.component.ts diff --git a/frontend/angular.json b/frontend/angular.json index 8a74d05cee..cdb87d9292 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -105,6 +105,7 @@ "cli": { "schematicCollections": [ "@angular-eslint/schematics" - ] + ], + "analytics": false } } diff --git a/frontend/src/app/questions/questions.component.css b/frontend/src/app/questions/questions.component.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html new file mode 100644 index 0000000000..9a11dac84a --- /dev/null +++ b/frontend/src/app/questions/questions.component.html @@ -0,0 +1 @@ +

questions works!

diff --git a/frontend/src/app/questions/questions.component.spec.ts b/frontend/src/app/questions/questions.component.spec.ts new file mode 100644 index 0000000000..540125c6b1 --- /dev/null +++ b/frontend/src/app/questions/questions.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { QuestionsComponent } from './questions.component'; + +describe('QuestionsComponent', () => { + let component: QuestionsComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [QuestionsComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(QuestionsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts new file mode 100644 index 0000000000..08b5b0e32b --- /dev/null +++ b/frontend/src/app/questions/questions.component.ts @@ -0,0 +1,12 @@ +import { Component } from '@angular/core'; + +@Component({ + selector: 'app-questions', + standalone: true, + imports: [], + templateUrl: './questions.component.html', + styleUrl: './questions.component.css' +}) +export class QuestionsComponent { + +} From e15dd720e882cdfa806d76247d4330d456611315 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Wed, 18 Sep 2024 18:34:13 +0800 Subject: [PATCH 041/188] Add route for questions page The new route is /questions --- frontend/src/app/app.routes.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts index dc39edb5f2..af5e1677c6 100644 --- a/frontend/src/app/app.routes.ts +++ b/frontend/src/app/app.routes.ts @@ -1,3 +1,9 @@ import { Routes } from '@angular/router'; +import { QuestionsComponent } from './questions/questions.component'; -export const routes: Routes = []; +export const routes: Routes = [ + { + path:'questions', + component: QuestionsComponent + } +]; From 6a0114ecb4e5c27709ee0042f2b04b8e4e7e3c12 Mon Sep 17 00:00:00 2001 From: McNaBry Date: Thu, 19 Sep 2024 17:39:47 +0800 Subject: [PATCH 042/188] Add PrimeFlex --- frontend/package-lock.json | 7 +++++++ frontend/package.json | 1 + frontend/src/app/app.component.css | 8 ++++++-- frontend/src/app/app.component.html | 4 ++-- frontend/src/styles.css | 3 ++- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index a7b75bb8d2..660a734834 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -16,6 +16,7 @@ "@angular/platform-browser": "^18.2.0", "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", + "primeflex": "^3.3.1", "primeng": "^17.18.10", "rxjs": "~7.8.0", "tslib": "^2.3.0", @@ -13588,6 +13589,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/primeflex": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/primeflex/-/primeflex-3.3.1.tgz", + "integrity": "sha512-zaOq3YvcOYytbAmKv3zYc+0VNS9Wg5d37dfxZnveKBFPr7vEIwfV5ydrpiouTft8MVW6qNjfkaQphHSnvgQbpQ==", + "license": "MIT" + }, "node_modules/primeng": { "version": "17.18.10", "resolved": "https://registry.npmjs.org/primeng/-/primeng-17.18.10.tgz", diff --git a/frontend/package.json b/frontend/package.json index ce295b5cc1..be51c8b809 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -20,6 +20,7 @@ "@angular/platform-browser": "^18.2.0", "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", + "primeflex": "^3.3.1", "primeng": "^17.18.10", "rxjs": "~7.8.0", "tslib": "^2.3.0", diff --git a/frontend/src/app/app.component.css b/frontend/src/app/app.component.css index 0bf94ecf3c..4df7a9e503 100644 --- a/frontend/src/app/app.component.css +++ b/frontend/src/app/app.component.css @@ -7,11 +7,15 @@ main { padding: 1rem; box-sizing: inherit; position: relative; + flex-direction: column; } .content { display: flex; flex-direction: column; - width: 100%; - margin-bottom: 3rem; + width: auto; + margin-bottom: 1rem; + padding: 2rem; + background-color: var(--surface-section); + border-radius: 0.75rem; } \ No newline at end of file diff --git a/frontend/src/app/app.component.html b/frontend/src/app/app.component.html index fe21175a9c..f6eaa2ebd9 100644 --- a/frontend/src/app/app.component.html +++ b/frontend/src/app/app.component.html @@ -1,7 +1,7 @@
-

Hello, this is a paragraph!

- +

Hello, this is a paragraph!

+
diff --git a/frontend/src/styles.css b/frontend/src/styles.css index ccceb1856e..bf0477217c 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -1,3 +1,4 @@ /* You can add global styles to this file, and also import other style files */ @import "primeng/resources/themes/aura-dark-blue/theme.css"; -@import "primeng/resources/primeng.css"; \ No newline at end of file +@import "primeng/resources/primeng.css"; +@import "primeflex/primeflex.css"; \ No newline at end of file From e35083b6a3016a3ca2910abdfbe380603fe36937 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Thu, 19 Sep 2024 22:25:24 +0800 Subject: [PATCH 043/188] Add table component --- frontend/src/app/app.component.css | 7 ++ .../app/questions/questions.component.html | 53 +++++++++++- .../src/app/questions/questions.component.ts | 83 ++++++++++++++++++- 3 files changed, 139 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/app.component.css b/frontend/src/app/app.component.css index 0bf94ecf3c..9eebdab32f 100644 --- a/frontend/src/app/app.component.css +++ b/frontend/src/app/app.component.css @@ -14,4 +14,11 @@ main { flex-direction: column; width: 100%; margin-bottom: 3rem; +} + +.ui-widget-overlay { + background: rgba(0, 0, 0, .25); + opacity: 1!important; + filter: alpha(opacity=100)!important; + z-index: 1049!important } \ No newline at end of file diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index 9a11dac84a..2d6dec2943 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -1 +1,52 @@ -

questions works!

+
+ + + + + + + + + + + + Id + Title + description + Topics + Difficulty + + + + + + + + {{question.id}} + {{question.title}} + {{question.description}} + {{question.topics}} + {{question.difficulty}} + + + + + +
\ No newline at end of file diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 08b5b0e32b..d4c90e4c04 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -1,12 +1,89 @@ -import { Component } from '@angular/core'; +import { Component, NgModule, OnInit } from '@angular/core'; +import { TableModule } from 'primeng/table'; +import { FormsModule } from '@angular/forms'; +import { ToastModule } from 'primeng/toast'; +import { ToolbarModule } from 'primeng/toolbar'; +import { ButtonModule } from 'primeng/button'; +import { CommonModule, NgFor } from '@angular/common' +import { ConfirmationService, MessageService } from 'primeng/api'; +import { ConfirmDialogModule } from 'primeng/confirmdialog'; + +interface Question { + id: number; + title: string; + description: string; + topics: string[]; + difficulty: string; +} + +interface Column { + field: string; + header: string; +} @Component({ selector: 'app-questions', standalone: true, - imports: [], + imports: [TableModule, NgFor, CommonModule, FormsModule, ToastModule, ToolbarModule, ButtonModule, ConfirmDialogModule], + providers: [ConfirmationService, MessageService], templateUrl: './questions.component.html', styleUrl: './questions.component.css' }) -export class QuestionsComponent { +export class QuestionsComponent implements OnInit { + questions: Question[] = [ + { + id: 1, + title: "Reverse a String", + description: "Write a function that reverses a string. The input string is given as an array of characters s.\n\nYou must do this by modifying the input array in-place with O(1) extra memory.\n\n\nExample 1:\n\nInput: s = [\"h\",\"e\",\"l\",\"l\",\"o\"]\nOutput: [\"o\",\"l\",\"l\",\"e\",\"h\"]\n\nExample 2:\nInput: s = [\"H\",\"a\",\"n\",\"n\",\"a\",\"h\"]\nOutput: [\"h\",\"a\",\"n\",\"n\",\"a\",\"H\"]\n\nConstraints:\n1 <= s.length <= 105 s[i] is a printable ascii character.", + topics: ["Strings", "Algorithms"], + difficulty: "Easy" + }, + { + id: 2, + title: "Linked List Cycle Detection", + description: "Implement a function to detect if a linked list contains a cycle.", + topics: ["Data Structures", "Algorithms"], + difficulty: "Easy" + } + ]; + + question!: Question; + + selectedQuestions!: Question[] | null; + + submitted: boolean = false; + + questionDialog: boolean = false; + + cols: Column[] = []; + + constructor(private messageService: MessageService, private confirmationService: ConfirmationService) {} + + ngOnInit() { + + } + + openNew() { + this.question = {} as Question; + this.submitted = false; + this.questionDialog = true; + } + + deleteSelectedQuestions() { + this.confirmationService.confirm({ + message: 'Are you sure you want to delete the selected questions?', + header: 'Delete Confirmation', + icon: 'pi pi-exclamation-triangle', + accept: () => { + this.questions = this.questions.filter((val) => !this.selectedQuestions?.includes(val)); + this.selectedQuestions = null; + this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'Questions Deleted', life: 3000 }); + }, + }); + } + + saveQuestion() { + console.log("save question"); + } } From b335b67ee092c9a9a437fe7358ddac782e097052 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Thu, 19 Sep 2024 22:39:53 +0800 Subject: [PATCH 044/188] Fix primeflex import --- frontend/src/styles.css | 2 +- package-lock.json | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 package-lock.json diff --git a/frontend/src/styles.css b/frontend/src/styles.css index bf0477217c..41c9cbca25 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -1,4 +1,4 @@ /* You can add global styles to this file, and also import other style files */ @import "primeng/resources/themes/aura-dark-blue/theme.css"; @import "primeng/resources/primeng.css"; -@import "primeflex/primeflex.css"; \ No newline at end of file +@import "primeflex/primeflex.scss"; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..e7f5318afc --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "PeerPrep", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} From fc39edc489b89c614dd2e1a5641d53ba17984012 Mon Sep 17 00:00:00 2001 From: McNaBry Date: Thu, 19 Sep 2024 22:55:36 +0800 Subject: [PATCH 045/188] Change primeflex import from css to scss --- frontend/src/styles.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/styles.css b/frontend/src/styles.css index bf0477217c..41c9cbca25 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -1,4 +1,4 @@ /* You can add global styles to this file, and also import other style files */ @import "primeng/resources/themes/aura-dark-blue/theme.css"; @import "primeng/resources/primeng.css"; -@import "primeflex/primeflex.css"; \ No newline at end of file +@import "primeflex/primeflex.scss"; \ No newline at end of file From 017fe9117f936b1a638ca125e91ed94d3071b7d7 Mon Sep 17 00:00:00 2001 From: McNaBry Date: Thu, 19 Sep 2024 23:00:33 +0800 Subject: [PATCH 046/188] Add async animations provider --- frontend/src/app/app.component.html | 2 ++ frontend/src/app/app.component.ts | 3 ++- frontend/src/app/app.config.ts | 7 ++++++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/app.component.html b/frontend/src/app/app.component.html index f6eaa2ebd9..bce6ff84dc 100644 --- a/frontend/src/app/app.component.html +++ b/frontend/src/app/app.component.html @@ -2,6 +2,8 @@

Hello, this is a paragraph!

+ +
diff --git a/frontend/src/app/app.component.ts b/frontend/src/app/app.component.ts index 876dab9dfc..8c4d3178de 100644 --- a/frontend/src/app/app.component.ts +++ b/frontend/src/app/app.component.ts @@ -1,11 +1,12 @@ import { Component } from '@angular/core'; import { RouterOutlet } from '@angular/router'; import { ButtonModule } from 'primeng/button'; +import { PasswordModule } from 'primeng/password'; @Component({ selector: 'app-root', standalone: true, - imports: [RouterOutlet, ButtonModule], + imports: [RouterOutlet, ButtonModule, PasswordModule], templateUrl: './app.component.html', styleUrl: './app.component.css', }) diff --git a/frontend/src/app/app.config.ts b/frontend/src/app/app.config.ts index 384e1136e8..26b7bca3f2 100644 --- a/frontend/src/app/app.config.ts +++ b/frontend/src/app/app.config.ts @@ -2,7 +2,12 @@ import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; +import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; export const appConfig: ApplicationConfig = { - providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes)], + providers: [ + provideZoneChangeDetection({ eventCoalescing: true }), + provideRouter(routes), + provideAnimationsAsync() + ], }; From 6fdd8ec694b735b0eba7a1930dcaf3c42bef8afe Mon Sep 17 00:00:00 2001 From: McNaBry Date: Thu, 19 Sep 2024 23:00:46 +0800 Subject: [PATCH 047/188] Add .env to .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..963a057e75 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +.env From 87601d0bf949046932c1205a1b9a11439aade18e Mon Sep 17 00:00:00 2001 From: McNaBry Date: Thu, 19 Sep 2024 23:05:37 +0800 Subject: [PATCH 048/188] Fix linting --- frontend/angular.json | 3 ++- frontend/src/app/app.component.html | 4 ++-- frontend/src/app/app.config.ts | 6 +----- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/frontend/angular.json b/frontend/angular.json index 8a74d05cee..cdb87d9292 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -105,6 +105,7 @@ "cli": { "schematicCollections": [ "@angular-eslint/schematics" - ] + ], + "analytics": false } } diff --git a/frontend/src/app/app.component.html b/frontend/src/app/app.component.html index bce6ff84dc..332b1fd0b1 100644 --- a/frontend/src/app/app.component.html +++ b/frontend/src/app/app.component.html @@ -2,8 +2,8 @@

Hello, this is a paragraph!

- - + +
diff --git a/frontend/src/app/app.config.ts b/frontend/src/app/app.config.ts index 26b7bca3f2..6be3e3d257 100644 --- a/frontend/src/app/app.config.ts +++ b/frontend/src/app/app.config.ts @@ -5,9 +5,5 @@ import { routes } from './app.routes'; import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; export const appConfig: ApplicationConfig = { - providers: [ - provideZoneChangeDetection({ eventCoalescing: true }), - provideRouter(routes), - provideAnimationsAsync() - ], + providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), provideAnimationsAsync()], }; From 330999c38822da2b4408b86717816326b43a3a87 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Thu, 19 Sep 2024 23:33:28 +0800 Subject: [PATCH 049/188] Add delete question event handling Currently, this delete only deletes questions from the client side. --- frontend/src/app/app.config.ts | 3 ++- frontend/src/app/questions/questions.component.html | 1 - frontend/src/app/questions/questions.component.ts | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/app.config.ts b/frontend/src/app/app.config.ts index 384e1136e8..dc61e0f15f 100644 --- a/frontend/src/app/app.config.ts +++ b/frontend/src/app/app.config.ts @@ -1,8 +1,9 @@ import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; import { provideRouter } from '@angular/router'; +import { provideAnimations } from '@angular/platform-browser/animations'; import { routes } from './app.routes'; export const appConfig: ApplicationConfig = { - providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes)], + providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), provideAnimations()], }; diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index 2d6dec2943..7fd0d461cb 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -47,6 +47,5 @@ - \ No newline at end of file diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index d4c90e4c04..39c064966f 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -7,6 +7,7 @@ import { ButtonModule } from 'primeng/button'; import { CommonModule, NgFor } from '@angular/common' import { ConfirmationService, MessageService } from 'primeng/api'; import { ConfirmDialogModule } from 'primeng/confirmdialog'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; interface Question { id: number; From eca9c809587f738bf63e4a431134701afa9e7a77 Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Fri, 20 Sep 2024 15:49:32 +0800 Subject: [PATCH 050/188] Add node_modules to .gitignore --- services/question/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/services/question/.gitignore b/services/question/.gitignore index 931232e706..052504ff33 100644 --- a/services/question/.gitignore +++ b/services/question/.gitignore @@ -4,6 +4,7 @@ /node_modules /.pnp .pnp.js +/services/question/node_modules/ # testing /coverage From 6049982a53408775da89e17bfd75bd9ac213db61 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 20 Sep 2024 22:01:13 +0800 Subject: [PATCH 051/188] Add dialog box for creating new question --- .../app/questions/questions.component.html | 91 ++++++++++++++- .../src/app/questions/questions.component.ts | 105 +++++++++++++++--- 2 files changed, 182 insertions(+), 14 deletions(-) diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index 7fd0d461cb..8dfbb80c12 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -6,7 +6,7 @@ severity="success" label="New" class="mr-2" - (onClick)="openNew()" /> + (onClick)="openNewQuestion()" /> + + + +
+ + Create new question + +
+
+ +
+
+ + + + Title is required. + +
+
+
+ + + + Topic is required. + +
+
+ + + + Difficulty is required. + +
+
+
+ + + + Description is required. + +
+
+ + + + + +
+ \ No newline at end of file diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 39c064966f..047a4208f1 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -7,14 +7,18 @@ import { ButtonModule } from 'primeng/button'; import { CommonModule, NgFor } from '@angular/common' import { ConfirmationService, MessageService } from 'primeng/api'; import { ConfirmDialogModule } from 'primeng/confirmdialog'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { DialogModule } from 'primeng/dialog'; +import { InputTextModule } from 'primeng/inputtext'; +import { MultiSelectModule } from 'primeng/multiselect'; +import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { DropdownModule } from 'primeng/dropdown'; interface Question { - id: number; - title: string; - description: string; - topics: string[]; - difficulty: string; + id?: number; + title?: string; + description?: string; + topics?: string[]; + difficulty?: string; } interface Column { @@ -22,10 +26,20 @@ interface Column { header: string; } +interface Topic { + label: string; + value: string; +} + +interface Difficulty { + label: string; + value: string; +} + @Component({ selector: 'app-questions', standalone: true, - imports: [TableModule, NgFor, CommonModule, FormsModule, ToastModule, ToolbarModule, ButtonModule, ConfirmDialogModule], + imports: [TableModule, NgFor, CommonModule, FormsModule, ToastModule, ToolbarModule, ButtonModule, ConfirmDialogModule, DialogModule, ButtonModule, ReactiveFormsModule, MultiSelectModule, DropdownModule], providers: [ConfirmationService, MessageService], templateUrl: './questions.component.html', styleUrl: './questions.component.css' @@ -48,6 +62,14 @@ export class QuestionsComponent implements OnInit { difficulty: "Easy" } ]; + + topics!: Topic[]; + + difficulties!: Difficulty[]; + + questionFormGroup!: FormGroup; + + selectedDifficulty!: string; question!: Question; @@ -55,20 +77,66 @@ export class QuestionsComponent implements OnInit { submitted: boolean = false; - questionDialog: boolean = false; + isDialogVisible: boolean = false; cols: Column[] = []; - constructor(private messageService: MessageService, private confirmationService: ConfirmationService) {} + constructor(private messageService: MessageService, private confirmationService: ConfirmationService) {} ngOnInit() { + // two way binding for forms is not working for some reason unless question is initialised with empty values + this.question = { + title: '', + topics: [], + description: '', + difficulty: '' + }; + + this.topics = [ + { label: 'Arrays', value: 'Arrays'}, + { label: 'Dynamic Programming', value: 'Dynamic Programming'}, + { label: 'Greedy', value: 'Greedy'}, + { label: 'Hashset', value: 'Hashset'}, + { label: 'Sorting', value: 'Sorting'} + ]; + this.difficulties = [ + { label: 'Easy', value: 'Easy'}, + { label: 'Medium', value: 'Medium'}, + { label: 'Hard', value: 'Hard'}, + ] + this.questionFormGroup = new FormGroup({ + selectedTopics: new FormControl([]), + selectedDifficulty: new FormControl([]), + textTitle: new FormControl(''), + textDescription: new FormControl('') + }); + + // Dropdown difficulty listener + this.questionFormGroup.get('selectedDifficulty')?.valueChanges.subscribe(v => { + this.question.difficulty = v; + }); + + // Multiselect topics listener + this.questionFormGroup.get('selectedTopics')?.valueChanges.subscribe(v => { + this.question.topics = v; + }); + + // text title listener + this.questionFormGroup.get('textTitle')?.valueChanges.subscribe(v => { + this.question.title = v; + }); + + // text description listener + this.questionFormGroup.get('textDescription')?.valueChanges.subscribe(v => { + this.question.description = v; + }); } - openNew() { - this.question = {} as Question; + openNewQuestion() { + this.question = {}; this.submitted = false; - this.questionDialog = true; + this.isDialogVisible = true; } deleteSelectedQuestions() { @@ -85,6 +153,17 @@ export class QuestionsComponent implements OnInit { } saveQuestion() { - console.log("save question"); + this.submitted = true; + + if(!this.question.title?.trim() || + !this.question.topics || + !this.question.difficulty?.trim() || + !this.question.description?.trim()) { + return; + } + + this.isDialogVisible = false + this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'New Question Added', life: 3000 }); + this.question = {}; } } From 8ee77073a0be616bf6f553ebbb575531af557339 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 20 Sep 2024 22:07:55 +0800 Subject: [PATCH 052/188] Add edit button for each row --- .../src/app/questions/questions.component.html | 16 ++++++++++++++++ .../src/app/questions/questions.component.ts | 10 +++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index 8dfbb80c12..2bcef5cee2 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -32,6 +32,7 @@ description Topics Difficulty + @@ -44,6 +45,21 @@ {{question.description}} {{question.topics}} {{question.difficulty}} + + + + diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 047a4208f1..f36999a44e 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -154,7 +154,7 @@ export class QuestionsComponent implements OnInit { saveQuestion() { this.submitted = true; - + if(!this.question.title?.trim() || !this.question.topics || !this.question.difficulty?.trim() || @@ -166,4 +166,12 @@ export class QuestionsComponent implements OnInit { this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'New Question Added', life: 3000 }); this.question = {}; } + + editQuestion(question: Question) { + + } + + deleteQuestion(question: Question) { + + } } From 19dfe9d789939f8c576896c12ff1462fa2ff993d Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 20 Sep 2024 22:11:22 +0800 Subject: [PATCH 053/188] Add Prime Icons --- frontend/package-lock.json | 7 +++++++ frontend/package.json | 1 + frontend/src/styles.css | 3 ++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 660a734834..73223a55f9 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -17,6 +17,7 @@ "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", "primeflex": "^3.3.1", + "primeicons": "^7.0.0", "primeng": "^17.18.10", "rxjs": "~7.8.0", "tslib": "^2.3.0", @@ -13595,6 +13596,12 @@ "integrity": "sha512-zaOq3YvcOYytbAmKv3zYc+0VNS9Wg5d37dfxZnveKBFPr7vEIwfV5ydrpiouTft8MVW6qNjfkaQphHSnvgQbpQ==", "license": "MIT" }, + "node_modules/primeicons": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-7.0.0.tgz", + "integrity": "sha512-jK3Et9UzwzTsd6tzl2RmwrVY/b8raJ3QZLzoDACj+oTJ0oX7L9Hy+XnVwgo4QVKlKpnP/Ur13SXV/pVh4LzaDw==", + "license": "MIT" + }, "node_modules/primeng": { "version": "17.18.10", "resolved": "https://registry.npmjs.org/primeng/-/primeng-17.18.10.tgz", diff --git a/frontend/package.json b/frontend/package.json index be51c8b809..cbcceb197f 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -21,6 +21,7 @@ "@angular/platform-browser-dynamic": "^18.2.0", "@angular/router": "^18.2.0", "primeflex": "^3.3.1", + "primeicons": "^7.0.0", "primeng": "^17.18.10", "rxjs": "~7.8.0", "tslib": "^2.3.0", diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 41c9cbca25..d322daad6e 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -1,4 +1,5 @@ /* You can add global styles to this file, and also import other style files */ @import "primeng/resources/themes/aura-dark-blue/theme.css"; @import "primeng/resources/primeng.css"; -@import "primeflex/primeflex.scss"; \ No newline at end of file +@import "primeflex/primeflex.scss"; +@import "primeicons/primeicons.css"; \ No newline at end of file From 29b0cff0f1edbb7d53b6e43520cc4992e96169d0 Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Fri, 20 Sep 2024 23:40:37 +0800 Subject: [PATCH 054/188] Add new get endpoint and update models - questionController.ts: Implemented new get endpoint for retrieving questions. - questionModel.ts: Updated `Difficulty` enum to `Hard` enum. - questionRoutes.ts: Added new routes for handling get requests. - helper.ts: Added helper function for improved error handling. --- services/question/src/app.ts | 3 +- .../src/controllers/questionController.ts | 109 +++++++++++++++++- services/question/src/models/index.ts | 4 +- services/question/src/models/questionModel.ts | 2 +- .../question/src/routes/questionRoutes.ts | 27 ++++- services/question/src/utils/data.ts | 9 +- services/question/src/utils/helpers.ts | 51 ++++++++ 7 files changed, 189 insertions(+), 16 deletions(-) create mode 100644 services/question/src/utils/helpers.ts diff --git a/services/question/src/app.ts b/services/question/src/app.ts index ad51519cca..53a5b4acc0 100644 --- a/services/question/src/app.ts +++ b/services/question/src/app.ts @@ -9,7 +9,6 @@ const app: Express = express(); // Middleware app.use(morgan('dev')); - app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json()); @@ -23,6 +22,6 @@ app.use( // Routes app.use('/', router); -app.use('/', questionRouter); +app.use('/questions', questionRouter); export default app; diff --git a/services/question/src/controllers/questionController.ts b/services/question/src/controllers/questionController.ts index 915d7bdb97..e0e949d111 100644 --- a/services/question/src/controllers/questionController.ts +++ b/services/question/src/controllers/questionController.ts @@ -1,11 +1,108 @@ import { Request, Response } from 'express'; +import { handleError, handleNotFound, handleBadRequest, handleSuccess } from '../utils/helpers'; import { Question } from '../models/questionModel'; +/** + * This endpoint allows the retrieval of all the questions in the database. + * @param req + * @param res + */ export const getQuestions = async (req: Request, res: Response) => { - const questions = await Question.find(); - const questionTitles = questions.map(q => q.title); - res.status(200).json({ - message: 'These are all the question titles:' + questionTitles, - }); - return; + try { + const questions = await Question.find(); + + handleSuccess(res, "All questions retrieved successfully", questions); + } catch (error) { + console.error('Error in getQuestions:', error); + handleError(res, error, 'Failed to retrieve questions'); + } +}; + +/** + * This endpoint allows the retrieval of the question by using the question ID. + * @param req + * @param res + */ +export const getQuestionById = async (req: Request, res: Response) => { + const { id } = req.params; + + const newId = parseInt(id, 10); + if (isNaN(newId)) { + return handleBadRequest(res, 'Invalid question ID'); + } + + try { + const question = await Question.findOne({ id: newId }); + + if (!question) { + return handleNotFound(res, 'Question not found'); + } + + handleSuccess(res, "Question with ID retrieved successfully", question); + } catch (error) { + console.error('Error in getQuestionById:', error); + handleError(res, error, 'Failed to retrieve question'); + } +}; + +/** + * This endpoint allows the retrieval of a random question that matches the parameters provided. + * @param req + * @param res + */ +export const getQuestionByParameters = async (req: Request, res: Response) => { + const { limit, topics, difficulty } = req.query; + const stringLimit = limit as string + const newLimit = parseInt(stringLimit, 10); + + if (!topics) { + return handleBadRequest(res, 'Topics are required'); + } + if (!difficulty) { + return handleBadRequest(res, 'Difficulty is required'); + } + if (isNaN(newLimit)) { + return handleBadRequest(res, 'Limit must be a valid positive integer'); + } + if (newLimit <= 0) { + return handleBadRequest(res, 'Limit must be more than 0'); + } + + try { + const topicsArray = (topics as string).split(','); + const query = { + topics: { $in: topicsArray }, + difficulty: difficulty, + }; + const questions = await Question.find(query).limit(newLimit); + + if (!questions || questions.length === 0) { + return handleNotFound(res, 'No questions found with the given parameters'); + } + + handleSuccess(res, "Questions with Parameters retrieved successfully", questions); + } catch (error) { + console.error('Error in getQuestionByParameters:', error); + handleError(res, error, 'Failed to search for questions'); + } }; + +/** + * This endpoint retrieves all unique topics in the database (e.g. “Sorting”, “OOP”, “DFS”, etc…) + * @param req + * @param res + */ +export const getTopics = async (req: Request, res: Response) => { + try { + const topics = await Question.distinct('topics'); + + if (!topics || topics.length === 0) { + return handleNotFound(res, 'No topics found'); + } + + handleSuccess(res, "Topics retrieved successfully", topics); + } catch (error) { + console.error('Error in getTopics:', error); + handleError(res, error, 'Failed to retrieve topics'); + } +}; \ No newline at end of file diff --git a/services/question/src/models/index.ts b/services/question/src/models/index.ts index b78620a016..90596e07ce 100644 --- a/services/question/src/models/index.ts +++ b/services/question/src/models/index.ts @@ -4,8 +4,10 @@ import { IQuestion, Question } from './questionModel'; export async function connectToDB() { const mongoURI = process.env.NODE_ENV === 'production' ? process.env.DB_CLOUD_URI : process.env.DB_LOCAL_URI; + console.log('MongoDB URI:', mongoURI); + if (!mongoURI) { - throw Error('MongoDB URI not specified'); + throw new Error('MongoDB URI not specified'); } else if (!process.env.DB_USERNAME || !process.env.DB_PASSWORD) { throw Error('MongoDB credentials not specified'); } diff --git a/services/question/src/models/questionModel.ts b/services/question/src/models/questionModel.ts index 84de364fb1..4e14460f10 100644 --- a/services/question/src/models/questionModel.ts +++ b/services/question/src/models/questionModel.ts @@ -37,7 +37,7 @@ const questionSchema = new Schema( difficulty: { type: String, required: true, - enum: ['Easy', 'Medium', 'Difficult'], + enum: ['Easy', 'Medium', 'Hard'], }, }, { versionKey: false }, diff --git a/services/question/src/routes/questionRoutes.ts b/services/question/src/routes/questionRoutes.ts index c7cb207f31..8896825ad4 100644 --- a/services/question/src/routes/questionRoutes.ts +++ b/services/question/src/routes/questionRoutes.ts @@ -1,7 +1,26 @@ import { Router } from 'express'; -import { getQuestions } from '../controllers/questionController'; -const router = Router(); +import { getQuestions, getQuestionById, getQuestionByParameters, getTopics } from '../controllers/questionController'; -router.get('/questions', getQuestions); +const questionRouter = Router(); -export default router; +/** + * To Test: curl -X GET "http://localhost:8081/questions/search?topics=Algorithms,Data%20Structures&difficulty=Easy&limit=5" + */ +questionRouter.get('/search', getQuestionByParameters); + +/** + * To Test: http://localhost:8081/topics + */ +questionRouter.get('/topics', getTopics); + +/** + * To Test: http://localhost:8081/questions/ + */ +questionRouter.get('/', getQuestions); + +/** + * To Test: http://localhost:8081/questions/1 + */ +questionRouter.get('/:id', getQuestionById); + +export default questionRouter; diff --git a/services/question/src/utils/data.ts b/services/question/src/utils/data.ts index 2755c73ebd..dd29e9da52 100644 --- a/services/question/src/utils/data.ts +++ b/services/question/src/utils/data.ts @@ -2,6 +2,11 @@ import fs from 'fs/promises'; import { IQuestion } from '../models/questionModel'; export async function getDemoQuestions(): Promise { - const data = await fs.readFile('./src/data/questions.json', { encoding: 'utf8' }); - return JSON.parse(data); + try { + const data = await fs.readFile('./src/data/questions.json', { encoding: 'utf8' }); + return JSON.parse(data); + } catch (error) { + console.error('Error reading questions from JSON:', error); + throw new Error('Failed to read demo questions'); + } } diff --git a/services/question/src/utils/helpers.ts b/services/question/src/utils/helpers.ts new file mode 100644 index 0000000000..eb8bd85a61 --- /dev/null +++ b/services/question/src/utils/helpers.ts @@ -0,0 +1,51 @@ +import { Response } from 'express'; + +/** + * 500: Unexpected error in the database/server + * @param res + * @param error + * @param message + * @param statusCode + */ +export const handleError = (res: any, error: any, message = 'An unexpected error occurred', statusCode = 500) => { + console.error(error); + res.status(statusCode).json({ error }); +}; + +/** + * 400: Bad Request + * @param res + * @param error + * @param message + * @param statusCode + */ +export const handleBadRequest = (res: any, error: any, message = 'Bad Request', statusCode = 400) => { + console.error(error); + res.status(statusCode).json({ error }); +}; + +/** + * 404: Not Found + * @param res + * @param error + * @param message + * @param statusCode + */ +export const handleNotFound = (res: any, error: any, message = 'Not Found', statusCode = 404) => { + console.error(error); + res.status(statusCode).json({ error }); +}; + +/** + * 200: Success + * @param res + * @param message + * @param data + */ +export const handleSuccess = (res: Response, message: string, data: any) => { + res.status(200).json({ + status: 'success', + message, + data, + }); +}; \ No newline at end of file From 5c6968588078e177320fd7af43fae4bef3f087dd Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Sat, 21 Sep 2024 20:53:17 +0800 Subject: [PATCH 055/188] feat: Update and add new endpoints for question service - Update `getQuestions`: Include optional parameters for filtering. - Update `getQuestionsByParameters`: Add randomisation. - Add `addQuestion`: New endpoint to add a question. - Add `updateQuestion`: New Endpoint to update an existing question. - Add `deleteQuestion`: New Endpoint to delete a question. --- services/question/.gitignore | 1 - .../src/controllers/questionController.ts | 162 +++++++++++++++--- services/question/src/models/questionModel.ts | 1 + .../question/src/routes/questionRoutes.ts | 63 ++++++- services/question/src/utils/helpers.ts | 17 +- 5 files changed, 209 insertions(+), 35 deletions(-) diff --git a/services/question/.gitignore b/services/question/.gitignore index 052504ff33..931232e706 100644 --- a/services/question/.gitignore +++ b/services/question/.gitignore @@ -4,7 +4,6 @@ /node_modules /.pnp .pnp.js -/services/question/node_modules/ # testing /coverage diff --git a/services/question/src/controllers/questionController.ts b/services/question/src/controllers/questionController.ts index e0e949d111..055ece514d 100644 --- a/services/question/src/controllers/questionController.ts +++ b/services/question/src/controllers/questionController.ts @@ -1,17 +1,39 @@ -import { Request, Response } from 'express'; -import { handleError, handleNotFound, handleBadRequest, handleSuccess } from '../utils/helpers'; -import { Question } from '../models/questionModel'; +import {Request, Response} from 'express'; +import {handleError, handleNotFound, handleBadRequest, handleSuccess} from '../utils/helpers'; +import {Question} from '../models/questionModel'; /** - * This endpoint allows the retrieval of all the questions in the database. + * This endpoint allows the retrieval of all the questions in the database (or can filter by optional parameters). * @param req * @param res */ export const getQuestions = async (req: Request, res: Response) => { try { - const questions = await Question.find(); + const {title, description, topics, difficulty} = req.query; + const query: any = {}; - handleSuccess(res, "All questions retrieved successfully", questions); + if (title) { + query.title = {$regex: `^${title as string}$`, $options: 'i'}; + } + if (description) { + const words = (description as string).split(' '); + query.description = {$regex: words.join('|'), $options: 'i'}; + } + if (topics) { + const topicsArray = (topics as string).split(','); + query.topics = {$in: topicsArray, $options: 'i'}; + } + if (difficulty) { + query.difficulty = difficulty as string; + } + + const questions = await Question.find(query); + + if ((title || description || topics || difficulty) && questions.length === 0) { + return handleNotFound(res, 'No questions found matching the provided parameters.'); + } + + handleSuccess(res, 200, 'Questions retrieved successfully', questions); } catch (error) { console.error('Error in getQuestions:', error); handleError(res, error, 'Failed to retrieve questions'); @@ -24,21 +46,21 @@ export const getQuestions = async (req: Request, res: Response) => { * @param res */ export const getQuestionById = async (req: Request, res: Response) => { - const { id } = req.params; + const {id} = req.params; const newId = parseInt(id, 10); - if (isNaN(newId)) { + if (isNaN(parseInt(id, 10))) { return handleBadRequest(res, 'Invalid question ID'); } try { - const question = await Question.findOne({ id: newId }); + const question = await Question.findOne({id: newId}); if (!question) { return handleNotFound(res, 'Question not found'); } - handleSuccess(res, "Question with ID retrieved successfully", question); + handleSuccess(res, 200, "Question with ID retrieved successfully", question); } catch (error) { console.error('Error in getQuestionById:', error); handleError(res, error, 'Failed to retrieve question'); @@ -46,14 +68,12 @@ export const getQuestionById = async (req: Request, res: Response) => { }; /** - * This endpoint allows the retrieval of a random question that matches the parameters provided. + * This endpoint allows the retrieval of random questions that matches the parameters provided. * @param req * @param res */ export const getQuestionByParameters = async (req: Request, res: Response) => { - const { limit, topics, difficulty } = req.query; - const stringLimit = limit as string - const newLimit = parseInt(stringLimit, 10); + const {limit, topics, difficulty} = req.query; if (!topics) { return handleBadRequest(res, 'Topics are required'); @@ -61,6 +81,13 @@ export const getQuestionByParameters = async (req: Request, res: Response) => { if (!difficulty) { return handleBadRequest(res, 'Difficulty is required'); } + + let newLimit; + if (limit) { + newLimit = parseInt(limit as string, 10); + } else { + newLimit = 1; + } if (isNaN(newLimit)) { return handleBadRequest(res, 'Limit must be a valid positive integer'); } @@ -71,16 +98,22 @@ export const getQuestionByParameters = async (req: Request, res: Response) => { try { const topicsArray = (topics as string).split(','); const query = { - topics: { $in: topicsArray }, + topics: {$in: topicsArray, $options: 'i'}, difficulty: difficulty, }; - const questions = await Question.find(query).limit(newLimit); + const numOfQuestions = await Question.countDocuments(query); - if (!questions || questions.length === 0) { + if (numOfQuestions === 0) { return handleNotFound(res, 'No questions found with the given parameters'); } - handleSuccess(res, "Questions with Parameters retrieved successfully", questions); + const finalLimit = Math.min(newLimit, numOfQuestions); + const questions = await Question.aggregate([ + {$match: query}, + {$sample: {size: finalLimit}}, + ]); + + handleSuccess(res, 200, "Questions with Parameters retrieved successfully", questions); } catch (error) { console.error('Error in getQuestionByParameters:', error); handleError(res, error, 'Failed to search for questions'); @@ -88,7 +121,7 @@ export const getQuestionByParameters = async (req: Request, res: Response) => { }; /** - * This endpoint retrieves all unique topics in the database (e.g. “Sorting”, “OOP”, “DFS”, etc…) + * This endpoint retrieves all unique topics in the database * @param req * @param res */ @@ -100,9 +133,98 @@ export const getTopics = async (req: Request, res: Response) => { return handleNotFound(res, 'No topics found'); } - handleSuccess(res, "Topics retrieved successfully", topics); + handleSuccess(res, 200, "Topics retrieved successfully", topics); } catch (error) { console.error('Error in getTopics:', error); handleError(res, error, 'Failed to retrieve topics'); } +}; + +/** + * This endpoint allows to add new question into the database + * @param req + * @param res + */ +export const addQuestion = async (req: Request, res: Response) => { + const {id, title, description, topics, difficulty} = req.body; + + if (!id) { + return handleBadRequest(res, 'ID is required'); + } + if (!title) { + return handleBadRequest(res, 'Title is required'); + } + if (!description) { + return handleBadRequest(res, 'Description is required'); + } + if (!topics) { + return handleBadRequest(res, 'Topics are required'); + } + if (!difficulty) { + return handleBadRequest(res, 'Difficulty is required'); + } + + try { + const existingQuestion = await Question.findOne({id}); + if (existingQuestion) { + return handleBadRequest(res, `A question with ID ${id} already exists`); + } + + const newQuestion = new Question({ + id, + title, + description, + topics, + difficulty, + }); + + const savedQuestion = await newQuestion.save(); + handleSuccess(res, 201, 'Question created successfully', savedQuestion); + } catch (error) { + handleError(res, error, 'Failed to add question'); + } +}; + +/** + * This endpoint allows updating an existing question (only can update the title, description, topics and difficulty). + * @param req + * @param res + */ +export const updateQuestion = async (req: Request, res: Response) => { + const {id} = req.params; + const updates = {...req.body}; + + try { + const updatedQuestion = await Question.findOneAndUpdate({id: parseInt(id, 10)}, updates, {new: true, runValidators: true}); + + if (!updatedQuestion) { + return handleNotFound(res, 'Question not found'); + } + + handleSuccess(res, 200, "Question updated successfully", updatedQuestion); + } catch (error) { + handleError(res, error, 'Failed to update question'); + } +}; + +/** + * This endpoint allows deletion of a question by the question ID. + * @param req + * @param res + */ +export const deleteQuestion = async (req: Request, res: Response) => { + const {id} = req.params; + + try { + const deletedID = parseInt(id, 10) + const deletedQuestion = await Question.findOneAndDelete({id: deletedID}); + + if (!deletedQuestion) { + return handleNotFound(res, 'Question not found'); + } + + handleSuccess(res, 200, "Question deleted successfully", deletedQuestion); + } catch (error) { + handleError(res, error, 'Failed to delete question'); + } }; \ No newline at end of file diff --git a/services/question/src/models/questionModel.ts b/services/question/src/models/questionModel.ts index 4e14460f10..c3905db976 100644 --- a/services/question/src/models/questionModel.ts +++ b/services/question/src/models/questionModel.ts @@ -20,6 +20,7 @@ const questionSchema = new Schema( type: Number, required: true, unique: true, + immutable: true, }, title: { type: String, diff --git a/services/question/src/routes/questionRoutes.ts b/services/question/src/routes/questionRoutes.ts index 8896825ad4..73217dece8 100644 --- a/services/question/src/routes/questionRoutes.ts +++ b/services/question/src/routes/questionRoutes.ts @@ -1,26 +1,77 @@ -import { Router } from 'express'; -import { getQuestions, getQuestionById, getQuestionByParameters, getTopics } from '../controllers/questionController'; +import {Router} from 'express'; +import { + getQuestions, + getQuestionById, + getQuestionByParameters, + getTopics, + addQuestion, + deleteQuestion, + updateQuestion +} from '../controllers/questionController'; + +/** + * All the routes related to questions. + * All the comments are happy scenarios. + */ const questionRouter = Router(); /** - * To Test: curl -X GET "http://localhost:8081/questions/search?topics=Algorithms,Data%20Structures&difficulty=Easy&limit=5" + * curl -X GET "http://localhost:8081/questions/search?topics=Algorithms&difficulty=Medium" + * curl -X GET "http://localhost:8081/questions/search?topics=Algorithms,Data%20Structures&difficulty=Easy&limit=5" */ questionRouter.get('/search', getQuestionByParameters); /** - * To Test: http://localhost:8081/topics + * curl -X GET http://localhost:8081/topics */ questionRouter.get('/topics', getTopics); /** - * To Test: http://localhost:8081/questions/ + * curl -X GET http://localhost:8081/questions + * curl -X GET "http://localhost:8081/questions?title=Reverse%20a%20String" + * curl -X GET "http://localhost:8081/questions?description=string" + * curl -X GET "http://localhost:8081/questions?topics=Algorithms,Data%20Structures" + * curl -X GET "http://localhost:8081/questions?difficulty=Easy" + * curl -X GET "http://localhost:8081/questions?title=Reverse%20a%20String&difficulty=Easy" + * curl -X GET "http://localhost:8081/questions?description=string&topics=Algorithms" + * curl -X GET "http://localhost:8081/questions?title=Reverse%20a%20String&description=string&topics=Algorithms&difficulty=Easy" */ questionRouter.get('/', getQuestions); /** - * To Test: http://localhost:8081/questions/1 + * curl -X GET http://localhost:8081/questions/1 */ questionRouter.get('/:id', getQuestionById); +/** + * curl -X POST http://localhost:8081/questions \ + * -H "Content-Type: application/json" \ + * -d '{ + * "id": 21, + * "title": "New Question", + * "description": "This is a description for a new question.", + * "topics": ["Data Structures", "Algorithms"], + * "difficulty": "Medium" + * }' + */ +questionRouter.post('/', addQuestion); + +/** + * curl -X PUT http://localhost:8081/questions/21 \ + * -H "Content-Type: application/json" \ + * -d '{ + * "title": "Updated Question Title", + * "description": "This is the updated description.", + * "topics": ["Updated Topic"], + * "difficulty": "Hard" + * }' + */ +questionRouter.put('/:id', updateQuestion); + +/** + * curl -X DELETE http://localhost:8081/questions/21 + */ +questionRouter.delete('/:id', deleteQuestion); + export default questionRouter; diff --git a/services/question/src/utils/helpers.ts b/services/question/src/utils/helpers.ts index eb8bd85a61..f98e752b55 100644 --- a/services/question/src/utils/helpers.ts +++ b/services/question/src/utils/helpers.ts @@ -1,4 +1,4 @@ -import { Response } from 'express'; +import {Response} from 'express'; /** * 500: Unexpected error in the database/server @@ -9,7 +9,7 @@ import { Response } from 'express'; */ export const handleError = (res: any, error: any, message = 'An unexpected error occurred', statusCode = 500) => { console.error(error); - res.status(statusCode).json({ error }); + res.status(statusCode).json({error}); }; /** @@ -21,7 +21,7 @@ export const handleError = (res: any, error: any, message = 'An unexpected error */ export const handleBadRequest = (res: any, error: any, message = 'Bad Request', statusCode = 400) => { console.error(error); - res.status(statusCode).json({ error }); + res.status(statusCode).json({error}); }; /** @@ -33,18 +33,19 @@ export const handleBadRequest = (res: any, error: any, message = 'Bad Request', */ export const handleNotFound = (res: any, error: any, message = 'Not Found', statusCode = 404) => { console.error(error); - res.status(statusCode).json({ error }); + res.status(statusCode).json({error}); }; /** - * 200: Success + * Handles successful responses. * @param res + * @param statusCode - Default is 200 * @param message * @param data */ -export const handleSuccess = (res: Response, message: string, data: any) => { - res.status(200).json({ - status: 'success', +export const handleSuccess = (res: Response, statusCode: number = 200, message: string, data: any) => { + res.status(statusCode).json({ + status: 'Success', message, data, }); From 0a9794f3a64477c55156fd4c7eaad891c153e339 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Sat, 21 Sep 2024 21:02:04 +0800 Subject: [PATCH 056/188] Fix edit bugs Previously, the multiselect would only show nulls when populated. Now, it would correctly show the right value. --- .../app/questions/questions.component.html | 12 ++--- .../src/app/questions/questions.component.ts | 45 ++++++++++++++----- 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index 2bcef5cee2..d8a7f56ca4 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -3,11 +3,13 @@ Id Title - description + Description Topics Difficulty @@ -53,12 +55,6 @@ [outlined]="true" severity="success" (onClick)="editQuestion(question)" /> - @@ -150,7 +146,7 @@ (onClick)="saveQuestion()" /> - + \ No newline at end of file diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index f36999a44e..cf3de295f0 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -8,7 +8,6 @@ import { CommonModule, NgFor } from '@angular/common' import { ConfirmationService, MessageService } from 'primeng/api'; import { ConfirmDialogModule } from 'primeng/confirmdialog'; import { DialogModule } from 'primeng/dialog'; -import { InputTextModule } from 'primeng/inputtext'; import { MultiSelectModule } from 'primeng/multiselect'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { DropdownModule } from 'primeng/dropdown'; @@ -83,6 +82,7 @@ export class QuestionsComponent implements OnInit { constructor(private messageService: MessageService, private confirmationService: ConfirmationService) {} + ngOnInit() { // two way binding for forms is not working for some reason unless question is initialised with empty values this.question = { @@ -97,16 +97,23 @@ export class QuestionsComponent implements OnInit { { label: 'Dynamic Programming', value: 'Dynamic Programming'}, { label: 'Greedy', value: 'Greedy'}, { label: 'Hashset', value: 'Hashset'}, - { label: 'Sorting', value: 'Sorting'} + { label: 'Sorting', value: 'Sorting'}, + { label: 'Algorithms', value: 'Algorithms'}, + { label: 'Bit Manipulation', value: 'Bit Manipulation'}, + { label: 'Brainteaser', value: 'Brainteaser'}, + { label: 'Data Structures', value: 'Data Structures'}, + { label: 'Databases', value: 'Databases'}, + { label: 'Recursion', value: 'Recursion'}, + { label: 'Strings', value: 'Strings'} ]; this.difficulties = [ { label: 'Easy', value: 'Easy'}, { label: 'Medium', value: 'Medium'}, - { label: 'Hard', value: 'Hard'}, + { label: 'Hard', value: 'Hard'} ] this.questionFormGroup = new FormGroup({ - selectedTopics: new FormControl([]), + selectedTopics: new FormControl([]), selectedDifficulty: new FormControl([]), textTitle: new FormControl(''), textDescription: new FormControl('') @@ -154,7 +161,7 @@ export class QuestionsComponent implements OnInit { saveQuestion() { this.submitted = true; - + console.log(this.question); if(!this.question.title?.trim() || !this.question.topics || !this.question.difficulty?.trim() || @@ -162,16 +169,32 @@ export class QuestionsComponent implements OnInit { return; } + if(this.question.id) { + this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'Question has been updated successfully', life: 3000 }); + } else { + this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'New Question Added', life: 3000 }); + } + this.isDialogVisible = false - this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'New Question Added', life: 3000 }); this.question = {}; + this.questionFormGroup.reset({ + selectedTopics: [], + selectedDifficulty: '', + textTitle: '', + textDescription: '' + }); } + // TODO: Fix selectedTopics editQuestion(question: Question) { - - } - - deleteQuestion(question: Question) { - + this.question.id = question.id; + this.questionFormGroup.patchValue({ + textTitle: question.title, + textDescription: question.description, + selectedTopics: question.topics, + selectedDifficulty: question.difficulty + }); + this.isDialogVisible = true; + console.log(this.questionFormGroup.value); } } From a1eebb9f0cf6f349be4f31719e4023e9fb86a2b3 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Sat, 21 Sep 2024 22:07:46 +0800 Subject: [PATCH 057/188] Fix spacing issues --- .../app/questions/questions.component.html | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index d8a7f56ca4..6609ca2fdb 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -1,20 +1,21 @@ -
+
- - - - - + +
+ + +
+ +
+

Manage Questions

+
+
@@ -49,11 +55,11 @@ {{question.difficulty}} From 398a915b7aa6835aa3ab059febcf28539c30ab92 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Sat, 21 Sep 2024 22:08:27 +0800 Subject: [PATCH 058/188] Fix row duplicate bug --- .../src/app/questions/questions.component.ts | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index cf3de295f0..fc5a126eb3 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -141,6 +141,7 @@ export class QuestionsComponent implements OnInit { } openNewQuestion() { + this.resetFormGroup(); this.question = {}; this.submitted = false; this.isDialogVisible = true; @@ -169,23 +170,26 @@ export class QuestionsComponent implements OnInit { return; } + // --------------------------------------------- + // Add questions to the database and client side + // --------------------------------------------- + if(this.question.id) { + // update this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'Question has been updated successfully', life: 3000 }); + } else { + // add + this.question.id = this.createId(); + this.questions.push(this.question); this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'New Question Added', life: 3000 }); } - + + this.isDialogVisible = false this.question = {}; - this.questionFormGroup.reset({ - selectedTopics: [], - selectedDifficulty: '', - textTitle: '', - textDescription: '' - }); } - // TODO: Fix selectedTopics editQuestion(question: Question) { this.question.id = question.id; this.questionFormGroup.patchValue({ @@ -195,6 +199,20 @@ export class QuestionsComponent implements OnInit { selectedDifficulty: question.difficulty }); this.isDialogVisible = true; - console.log(this.questionFormGroup.value); + } + + // assuming newest question is always appended at the back + createId() { + console.log(this.questions); + return Number(this.questions.at(-1)?.id) + 1; + } + + resetFormGroup() { + this.questionFormGroup.reset({ + selectedTopics: [], + selectedDifficulty: '', + textTitle: '', + textDescription: '' + }); } } From 669c32956600cb4846a94a4b4e877284f5e65222 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Sat, 21 Sep 2024 22:13:53 +0800 Subject: [PATCH 059/188] Update question data to read locally --- .../src/app/questions/questions.component.ts | 18 +-- frontend/src/app/questions/questions.json | 142 ++++++++++++++++++ 2 files changed, 144 insertions(+), 16 deletions(-) create mode 100644 frontend/src/app/questions/questions.json diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index fc5a126eb3..f9391ea55a 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -11,6 +11,7 @@ import { DialogModule } from 'primeng/dialog'; import { MultiSelectModule } from 'primeng/multiselect'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { DropdownModule } from 'primeng/dropdown'; +import questionData from "./questions.json"; interface Question { id?: number; @@ -45,22 +46,7 @@ interface Difficulty { }) export class QuestionsComponent implements OnInit { - questions: Question[] = [ - { - id: 1, - title: "Reverse a String", - description: "Write a function that reverses a string. The input string is given as an array of characters s.\n\nYou must do this by modifying the input array in-place with O(1) extra memory.\n\n\nExample 1:\n\nInput: s = [\"h\",\"e\",\"l\",\"l\",\"o\"]\nOutput: [\"o\",\"l\",\"l\",\"e\",\"h\"]\n\nExample 2:\nInput: s = [\"H\",\"a\",\"n\",\"n\",\"a\",\"h\"]\nOutput: [\"h\",\"a\",\"n\",\"n\",\"a\",\"H\"]\n\nConstraints:\n1 <= s.length <= 105 s[i] is a printable ascii character.", - topics: ["Strings", "Algorithms"], - difficulty: "Easy" - }, - { - id: 2, - title: "Linked List Cycle Detection", - description: "Implement a function to detect if a linked list contains a cycle.", - topics: ["Data Structures", "Algorithms"], - difficulty: "Easy" - } - ]; + questions: Question[] = questionData; topics!: Topic[]; diff --git a/frontend/src/app/questions/questions.json b/frontend/src/app/questions/questions.json new file mode 100644 index 0000000000..881e421195 --- /dev/null +++ b/frontend/src/app/questions/questions.json @@ -0,0 +1,142 @@ +[ + { + "id": 1, + "title": "Reverse a String", + "description": "Write a function that reverses a string. The input string is given as an array of characters s.\n\nYou must do this by modifying the input array in-place with O(1) extra memory.\n\n\nExample 1:\n\nInput: s = [\"h\",\"e\",\"l\",\"l\",\"o\"]\nOutput: [\"o\",\"l\",\"l\",\"e\",\"h\"]\n\nExample 2:\nInput: s = [\"H\",\"a\",\"n\",\"n\",\"a\",\"h\"]\nOutput: [\"h\",\"a\",\"n\",\"n\",\"a\",\"H\"]\n\nConstraints:\n1 <= s.length <= 105 s[i] is a printable ascii character.", + "topics": ["Strings", "Algorithms"], + "difficulty": "Easy" + }, + { + "id": 2, + "title": "Linked List Cycle Detection", + "description": "Implement a function to detect if a linked list contains a cycle.", + "topics": ["Data Structures", "Algorithms"], + "difficulty": "Easy" + }, + { + "id": 3, + "title": "Roman to Integer", + "description": "Given a roman numeral, convert it to an integer.", + "topics": ["Algorithms"], + "difficulty": "Easy" + }, + { + "id": 4, + "title": "Add Binary", + "description": "Given two binary strings a and b, return their sum as a binary string.", + "topics": ["Bit Manipulation", "Algorithms"], + "difficulty": "Easy" + }, + { + "id": 5, + "title": "Fibonacci Number", + "description": "The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1. That is,\n\nF(0) = 0, F(1) = 1 F(n) = F(n - 1) + F(n - 2), for n > 1.\n\nGiven n, calculate F(n).", + "topics": ["Recursion", "Algorithms"], + "difficulty": "Easy" + }, + { + "id": 6, + "title": "Implement Stack using Queues", + "description": "Implement a last-in first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (push, top, pop, and empty).", + "topics": ["Data Structures"], + "difficulty": "Easy" + }, + { + "id": 7, + "title": "Combine Two Tables", + "description": "Given table Person with the following columns:\n1. personId (int)\n2. lastName (varchar)\n3. firstName (varchar)\npersonId is the primary key.\n\nAnd table Address with the following columns:\n1. addressId (int)\n2. personId (int)\n3. city (varchar)\n4. state (varchar)\naddressId is the primary key.\n\nWrite a solution to report the first name, last name, city, and state of each person in the Person table. If the address of a personId is not present in the Address table, report null instead. Return the result table in any order.", + "topics": ["Databases"], + "difficulty": "Easy" + }, + { + "id": 8, + "title": "Repeated DNA Sequences", + "description": "The DNA sequence is composed of a series of nucleotides abbreviated as 'A', 'C', 'G', and 'T'.\n\nFor example, \"ACGAATTCCG\" is a DNA sequence. When studying DNA, it is useful to identify repeated sequences within the DNA.\n\nGiven a string s that represents a DNA sequence, return all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule. You may return the answer in any order.", + "topics": ["Algorithms", "Bit Manipulation"], + "difficulty": "Medium" + }, + { + "id": 9, + "title": "Course Schedule", + "description": "There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1. You are given an array prerequisites where prerequisites[i] = [ai, bi] indicates that you must take course bi first if you want to take course ai.\n\nFor example, the pair [0, 1], indicates that to take course 0 you have to first take course 1. Return true if you can finish all courses. Otherwise, return false.", + "topics": ["Data Structures", "Algorithms"], + "difficulty": "Medium" + }, + { + "id": 10, + "title": "LRU Cache Design", + "description": "Design and implement an LRU (Least Recently Used) cache.", + "topics": ["Data Structures"], + "difficulty": "Medium" + }, + { + "id": 11, + "title": "Longest Common Subsequence", + "description": "Given two strings text1 and text2, return the length of their longest common subsequence. If there is no common subsequence, return 0.\n\nA subsequence of a string is a new string generated from the original string with some characters (can be none) deleted without changing the relative order of the remaining characters.\n\nFor example, \"ace\" is a subsequence of \"abcde\". A common subsequence of two strings is a subsequence that is common to both strings.", + "topics": ["Strings", "Algorithms"], + "difficulty": "Medium" + }, + { + "id": 12, + "title": "Rotate Image", + "description": "You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).", + "topics": ["Arrays", "Algorithms"], + "difficulty": "Medium" + }, + { + "id": 13, + "title": "Airplane Seat Assignment Probability", + "description": "n passengers board an airplane with exactly n seats. The first passenger has lost the ticket and picks a seat randomly. But after that, the rest of the passengers will:\nTake their own seat if it is still available, and Pick other seats randomly when they find their seat occupied\n\nReturn the probability that the nth person gets his own seat.", + "topics": ["Brainteaser"], + "difficulty": "Medium" + }, + { + "id": 14, + "title": "Validate Binary Search Tree", + "description": "Given the root of a binary tree, determine if it is a valid binary search tree (BST).", + "topics": ["Data Structures", "Algorithms"], + "difficulty": "Medium" + }, + { + "id": 15, + "title": "Sliding Window Maximum", + "description": "You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.\n\nReturn the max sliding window.", + "topics": ["Arrays", "Algorithms"], + "difficulty": "Hard" + }, + { + "id": 16, + "title": "N-Queen Problem", + "description": "The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other.\n\nGiven an integer n, return all distinct solutions to the n queens puzzle. You may return the answer in any order.\n\nEach solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space, respectively.", + "topics": ["Algorithms"], + "difficulty": "Hard" + }, + { + "id": 17, + "title": "Serialize and Deserialize a Binary Tree", + "description": "Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.\n\nDesign an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserializ ation algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.", + "topics": ["Data Structures", "Algorithms"], + "difficulty": "Hard" + }, + { + "id": 18, + "title": "Wildcard Matching", + "description": "Given an input string (s) and a pattern (p), implement wildcard pattern matching with support for '?' and '*' where:\n\n'?' Matches any single character. '*' Matches any sequence of characters (including the empty sequence).\nThe matching should cover the entire input string (not partial).", + "topics": ["Strings", "Algorithms"], + "difficulty": "Hard" + }, + { + "id": 19, + "title": "Chalkboard XOR Game", + "description": "You are given an array of integers nums represents the numbers written on a chalkboard.\n\nAlice and Bob take turns erasing exactly one number from the chalkboard, with Alice starting first. If erasing a number causes the bitwise XOR of all the elements of the chalkboard to become 0, then that player loses. The bitwise XOR of one element is that element itself, and the bitwise XOR of no elements is 0.\n\nAlso, if any player starts their turn with the bitwise XOR of all the elements of the chalkboard equal to 0, then that player wins.\n\nReturn true if and only if Alice wins the game, assuming both players play optimally.", + "topics": ["Brainteaser"], + "difficulty": "Hard" + }, + { + "id": 20, + "title": "Trips and Users", + "description": "Given table Trips:\n1. id (int)\n2. client_id (int)\n3. driver_id (int)\n4. city_id (int)\n5. status (enum)\n6. request_at(da te)\nid is the primary key.\nThe table holds all taxi trips. Each trip has a unique id, while client_id and driver_id are foreign keys to the users_id at the Users table. Status is an ENUM (category) type of ('completed', 'cancelled_by_driver', 'cancelled_by_client').\n\nAnd table Users:\n1. users_id (int)\n2. banned (enum)\n3. role (enum)\nusers_id is the primary key (column with unique values) for this table. The table holds all users. Each user has a unique users_id, and role is an ENUM type of ('client', 'driver', 'partner'). banned is an ENUM (category) type of ('Yes', 'No'). The cancellation rate is computed by dividing the number of canceled (by client or driver) requests with unbanned users by the total number of requests with unbanned users on that day.\n\nWrite a solution to find the cancellation rate of requests with unbanned users (both client and driver must not be banned) each day between \"2013-10-01\" and \"2013-10-03\". Round Cancellation Rate to two decimal points.\n\nReturn the result table in any order.", + "topics": ["Databases"], + "difficulty": "Hard" + } +] \ No newline at end of file From 6c3c4ea6a1ac75aab3c63ebe48a55f671b341a33 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Sat, 21 Sep 2024 22:21:00 +0800 Subject: [PATCH 060/188] Fix pagination bug Previously, pagination would not expand even if new rows were added --- frontend/src/app/questions/questions.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index f9391ea55a..75bf8b75d6 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -167,7 +167,7 @@ export class QuestionsComponent implements OnInit { } else { // add this.question.id = this.createId(); - this.questions.push(this.question); + this.questions = [...this.questions, this.question]; this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'New Question Added', life: 3000 }); } From 87be2f4907b44f96d5708f61bef0a76e5f6fc705 Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Sat, 21 Sep 2024 23:07:01 +0800 Subject: [PATCH 061/188] Update README.md for Question Service - Improved upon the current GET with updated details - Add new details on ADD, UPDATE and DELETE Questions --- services/question/README.md | 293 +++++++++++++++++++++++++++++------- 1 file changed, 242 insertions(+), 51 deletions(-) diff --git a/services/question/README.md b/services/question/README.md index 6d952159e9..14903f5313 100644 --- a/services/question/README.md +++ b/services/question/README.md @@ -1,22 +1,65 @@ # Question Service User Guide -## Get All Questions -This endpoint allows the retrieval of all the questions in the database. +## Get Questions + +This endpoint allows the retrieval of all the questions in the database. If filter by (optional) parameters, questions +that matches with parameters will be returned; if no parameters are provided, all questions will be returned. - **HTTP Method**: `GET` - **Endpoint**: `/questions` +### Parameters: + +- `title` (Optional) - Filter by question title. +- `description` (Optional) - Filter by question description. +- `topics` (Optional) - Filter by topics associated with the questions. +- `difficulty` (Optional) - Filter by question difficulty. + ### Responses: -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, all questions are returned | +| Response Code | Explanation | +|-----------------------------|--------------------------------------------| +| 200 (OK) | Success, all questions are returned | +| 404 (Not Found) | No questions found. | | 500 (Internal Server Error) | Unexpected error in the database or server | -**Example of Response Body for Success**: -TBC +**Example of Response Body for Success**: + +```json +{ + "status": "Success", + "message": "Questions retrieved successfully", + "data": [ + { + "_id": "66ea6985cd34132719540c22", + "id": 1, + "description": "Write a function that reverses a string. The input string is given as an array of characters s.\n\nYou must do this by modifying the input array in-place with O(1) extra memory.\n\n\nExample 1:\n\nInput: s = [\"h\",\"e\",\"l\",\"l\",\"o\"]\nOutput: [\"o\",\"l\",\"l\",\"e\",\"h\"]\n\nExample 2:\nInput: s = [\"H\",\"a\",\"n\",\"n\",\"a\",\"h\"]\nOutput: [\"h\",\"a\",\"n\",\"n\",\"a\",\"H\"]\n\nConstraints:\n1 \u003C= s.length \u003C= 105 s[i] is a printable ascii character.", + "difficulty": "Easy", + "title": "Reverse a String", + "topics": [ + "Strings", + "Algorithms" + ] + }, + { + "_id": "66ea6985cd34132719540c23", + "id": 2, + "description": "Implement a function to detect if a linked list contains a cycle.", + "difficulty": "Easy", + "title": "Linked List Cycle Detection", + "topics": [ + "Data Structures", + "Algorithms" + ] + } + ] +} +``` + +--- ## Get Question by ID + This endpoint allows the retrieval of the question by using the question ID. - **HTTP Method**: `GET` @@ -24,80 +67,228 @@ This endpoint allows the retrieval of the question by using the question ID. ### Parameters: -- Required: `questionId` path parameter +- `questionId` (Required) - The ID of the question to retrieve. ### Responses: -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, question corresponding to the questionID is returned | -| 404 (Not Found) | Question with the specified questionID not found | -| 500 (Internal Server Error) | Unexpected error in the database or server | - -**Example of Response Body for Success**: -TBC - -## Get Question by Parameters -This endpoint allows the retrieval of a random question that matches the parameters provided. +| Response Code | Explanation | +|-----------------------------|-----------------------------------------------------------------| +| 200 (OK) | Success, question corresponding to the `questionID` is returned | +| 404 (Not Found) | Question with the specified `questionID` not found | +| 500 (Internal Server Error) | Unexpected error in the database or server | + +**Example of Response Body for Success**: + +```json +{ + "status": "Success", + "message": "Question with ID retrieved successfully", + "data": { + "_id": "66ea6985cd34132719540c22", + "id": 1, + "description": "Write a function that reverses a string. The input string is given as an array of characters s.\n\nYou must do this by modifying the input array in-place with O(1) extra memory.\n\n\nExample 1:\n\nInput: s = [\"h\",\"e\",\"l\",\"l\",\"o\"]\nOutput: [\"o\",\"l\",\"l\",\"e\",\"h\"]\n\nExample 2:\nInput: s = [\"H\",\"a\",\"n\",\"n\",\"a\",\"h\"]\nOutput: [\"h\",\"a\",\"n\",\"n\",\"a\",\"H\"]\n\nConstraints:\n1 \u003C= s.length \u003C= 105 s[i] is a printable ascii character.", + "difficulty": "Easy", + "title": "Reverse a String", + "topics": [ + "Strings", + "Algorithms" + ] + } +} +``` + +--- + +## Get Question by Parameters (Random) + +This endpoint allows the retrieval of random questions that matches the parameters provided. - **HTTP Method**: `GET` - **Endpoint**: `/questions/search` ### Parameters: -- `limit` - The number of questions to be returned (Required) -- `topics` - The topic of the question (Required) -- `languages` - The language of the question (Required) -- `difficulty` - The difficulty of question (Required) +- `limit` (Optional) - The number of questions to be returned. If not provided, default limit is 1. +- `topics` (Required) - The topic of the question. +- `difficulty` (Required) - The difficulty of the question. ### Responses: -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, question corresponding to the limit, topics, languages and difficulty is returned | -| 400 (Bad Request) | Missing fields | -| 404 (Not Found) | Question with the specified parameter(s) not found | -| 500 (Internal Server Error) | Unexpected error in the database or server | +| Response Code | Explanation | +|-----------------------------|-------------------------------------------------------------------------------------------| +| 200 (OK) | Success, questions corresponding to the `limit`, `topics`, and `difficulty` are returned. | +| 400 (Bad Request) | Missing fields | +| 404 (Not Found) | Question with the specified parameter(s) not found | +| 500 (Internal Server Error) | Unexpected error in the database or server | **Example of Response Body for Success**: -TBC +```json + +``` + +--- ## Get Topics -This endpoint retrieves all unique topics in the database (e.g. “Sorting”, “OOP”, “DFS”, etc…) + +This endpoint retrieves all unique topics in the database - **HTTP Method**: `GET` - **Endpoint**: `/questions/topics` -### Headers: - -- Required: - - ### Responses: -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, all topics are returned | +| Response Code | Explanation | +|-----------------------------|--------------------------------------------------------------------| +| 200 (OK) | Success, all topics are returned | | 500 (Internal Server Error) | The server encountered an error and could not complete the request | **Example of Response Body for Success**: -TBC +```json +{ + "status": "Success", + "message": "Topics retrieved successfully", + "data": [ + "Algorithms", + "Arrays", + "Bit Manipulation", + "Brainteaser", + "Data Structures", + "Databases", + "Recursion", + "Strings" + ] +} +``` + +--- + +## Add Question + +This endpoint allows the addition of a new question. + +- **HTTP Method**: `POST` +- **Endpoint**: `/questions` -## Get Language -This endpoint retrieves all unique languages in the database (e.g, Java, C++, C, etc..) +### Parameters: -- **HTTP Method**: `GET` -- **Endpoint**: `/questions/languages` +- `id` (Required) - The unique ID of the question. +- `title` (Required) - The title of the question. +- `description` (Required) - A description of the question. +- `topics` (Required) - The topics associated with the question. +- `difficulty` (Required) - The difficulty level of the question. + +### Responses: + +| Response Code | Explanation | +|-----------------------------|----------------------------------------------------------------| +| 201 (Created) | The question is created successfully. | +| 400 (Bad Request) | Required fields are missing or invalid or `id` already exists. | +| 500 (Internal Server Error) | Unexpected error in the database or server. | + +**Example of Response Body for Success**: +```json +{ + "status": "Success", + "message": "Question created successfully", + "data": { + "id": 21, + "title": "New Question", + "description": "This is a description for a new question.", + "topics": [ + "Data Structures", + "Algorithms" + ], + "difficulty": "Medium", + "_id": "66eedf739672ca081e9fd5ff" + } +} +``` + +--- + +## Update Question + +This endpoint allows updating an existing question. Only the title, description, topics, and difficulty can be updated. + +- **HTTP Method**: `PUT` +- **Endpoint**: `/questions/{questionId}` + +### Request Parameters: + +- `questionId` (Required) - The ID of the question to update. -### Headers: +### Request Body: -- Required: - +- `title` (Optional) - New title for the question. +- `description` (Optional) - New description for the question. +- `topics` (Optional) - New topics for the question. +- `difficulty` (Optional) - New difficulty level for the question. ### Responses: -| Response Code | Explanation | -|---------------|-----------------------------------------------------| -| 200 (OK) | Success, all languages are returned | -| 500 (Internal Server Error) | The server encountered an error and could not complete the request | +| Response Code | Explanation | +|-----------------------------|-----------------------------------------------------| +| 200 (OK) | Success, the question is updated successfully. | +| 404 (Not Found) | Question with the specified `questionId` not found. | +| 500 (Internal Server Error) | Unexpected error in the database or server. | + +**Example of Response Body for Success**: +```json +{ + "status": "Success", + "message": "Question updated successfully", + "data": { + "_id": "66eedf739672ca081e9fd5ff", + "id": 21, + "title": "Updated Title", + "description": "Updated description for the existing question.", + "topics": [ + "Data Structures", + "Algorithms" + ], + "difficulty": "Hard" + } +} +``` + +--- + +## Delete Question + +This endpoint allows the deletion of a question by the question ID. + +- **HTTP Method**: `DELETE` +- **Endpoint**: `/questions/{questionId}` -**Example of Response Body for Success**: -TBC +### Parameters: + +- `questionId` (Required) - The ID of the question to delete. + +### Responses: + +| Response Code | Explanation | +|-----------------------------|-----------------------------------------------------| +| 200 (OK) | Success, the question is deleted successfully. | +| 404 (Not Found) | Question with the specified `questionId` not found. | +| 500 (Internal Server Error) | Unexpected error in the database or server. | + +**Example of Response Body for Success**: +```json +{ + "status": "Success", + "message": "Question deleted successfully", + "data": { + "_id": "66eedf739672ca081e9fd5ff", + "id": 21, + "title": "Updated Title", + "description": "Updated description for the existing question.", + "topics": [ + "Data Structures", + "Algorithms" + ], + "difficulty": "Hard" + } +} +``` + +--- From 7498b25ee6db37fd386d4e93a1ff7709595d082e Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Sun, 22 Sep 2024 08:19:36 +0800 Subject: [PATCH 062/188] Update README.md and endpoint - Add response body for success for getQuestionByParameters - Update case insensitive for topics --- services/question/README.md | 126 ++++++++++++------ .../src/controllers/questionController.ts | 11 +- 2 files changed, 92 insertions(+), 45 deletions(-) diff --git a/services/question/README.md b/services/question/README.md index 14903f5313..23dce7ec55 100644 --- a/services/question/README.md +++ b/services/question/README.md @@ -121,9 +121,47 @@ This endpoint allows the retrieval of random questions that matches the paramete | 404 (Not Found) | Question with the specified parameter(s) not found | | 500 (Internal Server Error) | Unexpected error in the database or server | -**Example of Response Body for Success**: -```json +**Example of Response Body for Success**: +```json +{ + "status": "Success", + "message": "Questions with Parameters retrieved successfully", + "data": [ + { + "_id": "66ea6985cd34132719540c25", + "id": 4, + "description": "Given two binary strings a and b, return their sum as a binary string.", + "difficulty": "Easy", + "title": "Add Binary", + "topics": [ + "Bit Manipulation", + "Algorithms" + ] + }, + { + "_id": "66ea6985cd34132719540c22", + "id": 1, + "description": "Write a function that reverses a string. The input string is given as an array of characters s.\n\nYou must do this by modifying the input array in-place with O(1) extra memory.\n\n\nExample 1:\n\nInput: s = [\"h\",\"e\",\"l\",\"l\",\"o\"]\nOutput: [\"o\",\"l\",\"l\",\"e\",\"h\"]\n\nExample 2:\nInput: s = [\"H\",\"a\",\"n\",\"n\",\"a\",\"h\"]\nOutput: [\"h\",\"a\",\"n\",\"n\",\"a\",\"H\"]\n\nConstraints:\n1 \u003C= s.length \u003C= 105 s[i] is a printable ascii character.", + "difficulty": "Easy", + "title": "Reverse a String", + "topics": [ + "Strings", + "Algorithms" + ] + }, + { + "_id": "66ea6985cd34132719540c27", + "id": 6, + "description": "Implement a last-in first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (push, top, pop, and empty).", + "difficulty": "Easy", + "title": "Implement Stack using Queues", + "topics": [ + "Data Structures" + ] + } + ] +} ``` --- @@ -142,7 +180,8 @@ This endpoint retrieves all unique topics in the database | 200 (OK) | Success, all topics are returned | | 500 (Internal Server Error) | The server encountered an error and could not complete the request | -**Example of Response Body for Success**: +**Example of Response Body for Success**: + ```json { "status": "Success", @@ -186,21 +225,22 @@ This endpoint allows the addition of a new question. | 500 (Internal Server Error) | Unexpected error in the database or server. | **Example of Response Body for Success**: + ```json { - "status": "Success", - "message": "Question created successfully", - "data": { - "id": 21, - "title": "New Question", - "description": "This is a description for a new question.", - "topics": [ - "Data Structures", - "Algorithms" - ], - "difficulty": "Medium", - "_id": "66eedf739672ca081e9fd5ff" - } + "status": "Success", + "message": "Question created successfully", + "data": { + "id": 21, + "title": "New Question", + "description": "This is a description for a new question.", + "topics": [ + "Data Structures", + "Algorithms" + ], + "difficulty": "Medium", + "_id": "66eedf739672ca081e9fd5ff" + } } ``` @@ -233,21 +273,22 @@ This endpoint allows updating an existing question. Only the title, description, | 500 (Internal Server Error) | Unexpected error in the database or server. | **Example of Response Body for Success**: + ```json { - "status": "Success", - "message": "Question updated successfully", - "data": { - "_id": "66eedf739672ca081e9fd5ff", - "id": 21, - "title": "Updated Title", - "description": "Updated description for the existing question.", - "topics": [ - "Data Structures", - "Algorithms" - ], - "difficulty": "Hard" - } + "status": "Success", + "message": "Question updated successfully", + "data": { + "_id": "66eedf739672ca081e9fd5ff", + "id": 21, + "title": "Updated Title", + "description": "Updated description for the existing question.", + "topics": [ + "Data Structures", + "Algorithms" + ], + "difficulty": "Hard" + } } ``` @@ -273,21 +314,22 @@ This endpoint allows the deletion of a question by the question ID. | 500 (Internal Server Error) | Unexpected error in the database or server. | **Example of Response Body for Success**: + ```json { - "status": "Success", - "message": "Question deleted successfully", - "data": { - "_id": "66eedf739672ca081e9fd5ff", - "id": 21, - "title": "Updated Title", - "description": "Updated description for the existing question.", - "topics": [ - "Data Structures", - "Algorithms" - ], - "difficulty": "Hard" - } + "status": "Success", + "message": "Question deleted successfully", + "data": { + "_id": "66eedf739672ca081e9fd5ff", + "id": 21, + "title": "Updated Title", + "description": "Updated description for the existing question.", + "topics": [ + "Data Structures", + "Algorithms" + ], + "difficulty": "Hard" + } } ``` diff --git a/services/question/src/controllers/questionController.ts b/services/question/src/controllers/questionController.ts index 055ece514d..75810b2c33 100644 --- a/services/question/src/controllers/questionController.ts +++ b/services/question/src/controllers/questionController.ts @@ -21,7 +21,9 @@ export const getQuestions = async (req: Request, res: Response) => { } if (topics) { const topicsArray = (topics as string).split(','); - query.topics = {$in: topicsArray, $options: 'i'}; + query.topics = { + $in: topicsArray.map(topic => new RegExp(topic, 'i')) + }; } if (difficulty) { query.difficulty = difficulty as string; @@ -98,7 +100,7 @@ export const getQuestionByParameters = async (req: Request, res: Response) => { try { const topicsArray = (topics as string).split(','); const query = { - topics: {$in: topicsArray, $options: 'i'}, + topics: {$in: topicsArray.map(topic => new RegExp(topic, 'i'))}, difficulty: difficulty, }; const numOfQuestions = await Question.countDocuments(query); @@ -195,7 +197,10 @@ export const updateQuestion = async (req: Request, res: Response) => { const updates = {...req.body}; try { - const updatedQuestion = await Question.findOneAndUpdate({id: parseInt(id, 10)}, updates, {new: true, runValidators: true}); + const updatedQuestion = await Question.findOneAndUpdate({id: parseInt(id, 10)}, updates, { + new: true, + runValidators: true + }); if (!updatedQuestion) { return handleNotFound(res, 'Question not found'); From 7a8e2f41170a2586e920947a55b36d99921f6580 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Sun, 22 Sep 2024 15:53:28 +0800 Subject: [PATCH 063/188] Reformat code for consistent indetation --- frontend/src/app/app.routes.ts | 6 +- .../app/questions/questions.component.html | 2 +- .../app/questions/questions.component.spec.ts | 27 ++-- .../src/app/questions/questions.component.ts | 130 +++++++++++------- 4 files changed, 95 insertions(+), 70 deletions(-) diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts index af5e1677c6..1c428a448e 100644 --- a/frontend/src/app/app.routes.ts +++ b/frontend/src/app/app.routes.ts @@ -3,7 +3,7 @@ import { QuestionsComponent } from './questions/questions.component'; export const routes: Routes = [ { - path:'questions', - component: QuestionsComponent - } + path: 'questions', + component: QuestionsComponent, + }, ]; diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index 6609ca2fdb..01af6f2f9d 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -88,7 +88,7 @@

Manage Questions

pInputText id="title" required - autofocus + class="text-base text-color surface-overlay p-2 border-1 border-solid surface-border border-round appearance-none outline-none focus:border-primary w-full"> Title is required. diff --git a/frontend/src/app/questions/questions.component.spec.ts b/frontend/src/app/questions/questions.component.spec.ts index 540125c6b1..4ba0f70cfc 100644 --- a/frontend/src/app/questions/questions.component.spec.ts +++ b/frontend/src/app/questions/questions.component.spec.ts @@ -3,21 +3,20 @@ import { ComponentFixture, TestBed } from '@angular/core/testing'; import { QuestionsComponent } from './questions.component'; describe('QuestionsComponent', () => { - let component: QuestionsComponent; - let fixture: ComponentFixture; + let component: QuestionsComponent; + let fixture: ComponentFixture; - beforeEach(async () => { - await TestBed.configureTestingModule({ - imports: [QuestionsComponent] - }) - .compileComponents(); + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [QuestionsComponent], + }).compileComponents(); - fixture = TestBed.createComponent(QuestionsComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); + fixture = TestBed.createComponent(QuestionsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); - it('should create', () => { - expect(component).toBeTruthy(); - }); + it('should create', () => { + expect(component).toBeTruthy(); + }); }); diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 75bf8b75d6..0ca31e5e63 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -1,17 +1,17 @@ -import { Component, NgModule, OnInit } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { TableModule } from 'primeng/table'; import { FormsModule } from '@angular/forms'; import { ToastModule } from 'primeng/toast'; import { ToolbarModule } from 'primeng/toolbar'; import { ButtonModule } from 'primeng/button'; -import { CommonModule, NgFor } from '@angular/common' +import { CommonModule, NgFor } from '@angular/common'; import { ConfirmationService, MessageService } from 'primeng/api'; import { ConfirmDialogModule } from 'primeng/confirmdialog'; import { DialogModule } from 'primeng/dialog'; import { MultiSelectModule } from 'primeng/multiselect'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { DropdownModule } from 'primeng/dropdown'; -import questionData from "./questions.json"; +import questionData from './questions.json'; interface Question { id?: number; @@ -37,14 +37,27 @@ interface Difficulty { } @Component({ - selector: 'app-questions', - standalone: true, - imports: [TableModule, NgFor, CommonModule, FormsModule, ToastModule, ToolbarModule, ButtonModule, ConfirmDialogModule, DialogModule, ButtonModule, ReactiveFormsModule, MultiSelectModule, DropdownModule], - providers: [ConfirmationService, MessageService], - templateUrl: './questions.component.html', - styleUrl: './questions.component.css' + selector: 'app-questions', + standalone: true, + imports: [ + TableModule, + NgFor, + CommonModule, + FormsModule, + ToastModule, + ToolbarModule, + ButtonModule, + ConfirmDialogModule, + DialogModule, + ButtonModule, + ReactiveFormsModule, + MultiSelectModule, + DropdownModule, + ], + providers: [ConfirmationService, MessageService], + templateUrl: './questions.component.html', + styleUrl: './questions.component.css', }) - export class QuestionsComponent implements OnInit { questions: Question[] = questionData; @@ -55,19 +68,21 @@ export class QuestionsComponent implements OnInit { questionFormGroup!: FormGroup; selectedDifficulty!: string; - + question!: Question; selectedQuestions!: Question[] | null; - submitted: boolean = false; + submitted = false; - isDialogVisible: boolean = false; + isDialogVisible = false; cols: Column[] = []; - - constructor(private messageService: MessageService, private confirmationService: ConfirmationService) {} + constructor( + private messageService: MessageService, + private confirmationService: ConfirmationService, + ) {} ngOnInit() { // two way binding for forms is not working for some reason unless question is initialised with empty values @@ -75,34 +90,34 @@ export class QuestionsComponent implements OnInit { title: '', topics: [], description: '', - difficulty: '' + difficulty: '', }; this.topics = [ - { label: 'Arrays', value: 'Arrays'}, - { label: 'Dynamic Programming', value: 'Dynamic Programming'}, - { label: 'Greedy', value: 'Greedy'}, - { label: 'Hashset', value: 'Hashset'}, - { label: 'Sorting', value: 'Sorting'}, - { label: 'Algorithms', value: 'Algorithms'}, - { label: 'Bit Manipulation', value: 'Bit Manipulation'}, - { label: 'Brainteaser', value: 'Brainteaser'}, - { label: 'Data Structures', value: 'Data Structures'}, - { label: 'Databases', value: 'Databases'}, - { label: 'Recursion', value: 'Recursion'}, - { label: 'Strings', value: 'Strings'} + { label: 'Arrays', value: 'Arrays' }, + { label: 'Dynamic Programming', value: 'Dynamic Programming' }, + { label: 'Greedy', value: 'Greedy' }, + { label: 'Hashset', value: 'Hashset' }, + { label: 'Sorting', value: 'Sorting' }, + { label: 'Algorithms', value: 'Algorithms' }, + { label: 'Bit Manipulation', value: 'Bit Manipulation' }, + { label: 'Brainteaser', value: 'Brainteaser' }, + { label: 'Data Structures', value: 'Data Structures' }, + { label: 'Databases', value: 'Databases' }, + { label: 'Recursion', value: 'Recursion' }, + { label: 'Strings', value: 'Strings' }, ]; this.difficulties = [ - { label: 'Easy', value: 'Easy'}, - { label: 'Medium', value: 'Medium'}, - { label: 'Hard', value: 'Hard'} - ] + { label: 'Easy', value: 'Easy' }, + { label: 'Medium', value: 'Medium' }, + { label: 'Hard', value: 'Hard' }, + ]; this.questionFormGroup = new FormGroup({ selectedTopics: new FormControl([]), selectedDifficulty: new FormControl([]), textTitle: new FormControl(''), - textDescription: new FormControl('') + textDescription: new FormControl(''), }); // Dropdown difficulty listener @@ -139,9 +154,14 @@ export class QuestionsComponent implements OnInit { header: 'Delete Confirmation', icon: 'pi pi-exclamation-triangle', accept: () => { - this.questions = this.questions.filter((val) => !this.selectedQuestions?.includes(val)); + this.questions = this.questions.filter(val => !this.selectedQuestions?.includes(val)); this.selectedQuestions = null; - this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'Questions Deleted', life: 3000 }); + this.messageService.add({ + severity: 'success', + summary: 'Successful', + detail: 'Questions Deleted', + life: 3000, + }); }, }); } @@ -149,30 +169,36 @@ export class QuestionsComponent implements OnInit { saveQuestion() { this.submitted = true; console.log(this.question); - if(!this.question.title?.trim() || + if ( + !this.question.title?.trim() || !this.question.topics || - !this.question.difficulty?.trim() || - !this.question.description?.trim()) { + !this.question.difficulty?.trim() || + !this.question.description?.trim() + ) { return; } - - // --------------------------------------------- - // Add questions to the database and client side - // --------------------------------------------- - - if(this.question.id) { + + if (this.question.id) { // update - this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'Question has been updated successfully', life: 3000 }); - + this.messageService.add({ + severity: 'success', + summary: 'Successful', + detail: 'Question has been updated successfully', + life: 3000, + }); } else { // add this.question.id = this.createId(); this.questions = [...this.questions, this.question]; - this.messageService.add({ severity: 'success', summary: 'Successful', detail: 'New Question Added', life: 3000 }); + this.messageService.add({ + severity: 'success', + summary: 'Successful', + detail: 'New Question Added', + life: 3000, + }); } - - this.isDialogVisible = false + this.isDialogVisible = false; this.question = {}; } @@ -182,8 +208,8 @@ export class QuestionsComponent implements OnInit { textTitle: question.title, textDescription: question.description, selectedTopics: question.topics, - selectedDifficulty: question.difficulty - }); + selectedDifficulty: question.difficulty, + }); this.isDialogVisible = true; } @@ -198,7 +224,7 @@ export class QuestionsComponent implements OnInit { selectedTopics: [], selectedDifficulty: '', textTitle: '', - textDescription: '' + textDescription: '', }); } } From 807dc1b4e628a21b0948f11d9fbcfed348c4577a Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Sun, 22 Sep 2024 16:07:20 +0800 Subject: [PATCH 064/188] Refactor classes and enums into separate files --- .../app/questions/difficulty-levels.enum.ts | 5 +++ frontend/src/app/questions/question.model.ts | 22 ++++++++++++ .../src/app/questions/questions.component.ts | 35 +++++-------------- 3 files changed, 35 insertions(+), 27 deletions(-) create mode 100644 frontend/src/app/questions/difficulty-levels.enum.ts create mode 100644 frontend/src/app/questions/question.model.ts diff --git a/frontend/src/app/questions/difficulty-levels.enum.ts b/frontend/src/app/questions/difficulty-levels.enum.ts new file mode 100644 index 0000000000..6ef37f3254 --- /dev/null +++ b/frontend/src/app/questions/difficulty-levels.enum.ts @@ -0,0 +1,5 @@ +export enum DifficultyLevels { + EASY = 'Easy', + MEDIUM = 'Medium', + HARD = 'Hard', +} diff --git a/frontend/src/app/questions/question.model.ts b/frontend/src/app/questions/question.model.ts new file mode 100644 index 0000000000..5b339b8860 --- /dev/null +++ b/frontend/src/app/questions/question.model.ts @@ -0,0 +1,22 @@ +export interface Question { + id?: number; + title?: string; + description?: string; + topics?: string[]; + difficulty?: string; +} + +export interface Column { + field: string; + header: string; +} + +export interface Topic { + label: string; + value: string; +} + +export interface Difficulty { + label: string; + value: string; +} diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 0ca31e5e63..16491bf617 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -12,29 +12,8 @@ import { MultiSelectModule } from 'primeng/multiselect'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { DropdownModule } from 'primeng/dropdown'; import questionData from './questions.json'; - -interface Question { - id?: number; - title?: string; - description?: string; - topics?: string[]; - difficulty?: string; -} - -interface Column { - field: string; - header: string; -} - -interface Topic { - label: string; - value: string; -} - -interface Difficulty { - label: string; - value: string; -} +import { Question, Column, Topic, Difficulty } from './question.model'; +import { DifficultyLevels } from './difficulty-levels.enum'; @Component({ selector: 'app-questions', @@ -93,6 +72,7 @@ export class QuestionsComponent implements OnInit { difficulty: '', }; + // Dummy data for topics this.topics = [ { label: 'Arrays', value: 'Arrays' }, { label: 'Dynamic Programming', value: 'Dynamic Programming' }, @@ -109,10 +89,11 @@ export class QuestionsComponent implements OnInit { ]; this.difficulties = [ - { label: 'Easy', value: 'Easy' }, - { label: 'Medium', value: 'Medium' }, - { label: 'Hard', value: 'Hard' }, + { label: DifficultyLevels.EASY, value: DifficultyLevels.EASY }, + { label: DifficultyLevels.MEDIUM, value: DifficultyLevels.MEDIUM }, + { label: DifficultyLevels.HARD, value: DifficultyLevels.HARD }, ]; + this.questionFormGroup = new FormGroup({ selectedTopics: new FormControl([]), selectedDifficulty: new FormControl([]), @@ -177,7 +158,7 @@ export class QuestionsComponent implements OnInit { ) { return; } - + if (this.question.id) { // update this.messageService.add({ From e5f14bf6c3609618cf866411e33ea47f8d9963b1 Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Sun, 22 Sep 2024 17:07:12 +0800 Subject: [PATCH 065/188] Update README.md and Endpoints: - README.md: Added examples for ease of copy and paste - questionController.ts: Added additional checking for update --- services/question/README.md | 99 +++++++++++++++++-- .../src/controllers/questionController.ts | 67 +++++++------ .../question/src/routes/questionRoutes.ts | 50 ++-------- services/question/src/utils/helpers.ts | 12 +-- 4 files changed, 142 insertions(+), 86 deletions(-) diff --git a/services/question/README.md b/services/question/README.md index 23dce7ec55..00ab8dc9a7 100644 --- a/services/question/README.md +++ b/services/question/README.md @@ -23,7 +23,32 @@ that matches with parameters will be returned; if no parameters are provided, al | 404 (Not Found) | No questions found. | | 500 (Internal Server Error) | Unexpected error in the database or server | -**Example of Response Body for Success**: +### Command Line Example: + +``` +Retrieve all Questions: +curl -X GET http://localhost:8081/questions + +Retrieve Questions by Title: +curl -X GET "http://localhost:8081/questions?title=Reverse%20a%20String" + +Retrieve Questions by Description: +curl -X GET "http://localhost:8081/questions?description=string" + +Retrieve Questions by Topics: +curl -X GET "http://localhost:8081/questions?topics=Algorithms,Data%20Structures" + +Retrieve Questions by Difficulty: +curl -X GET "http://localhost:8081/questions?difficulty=Easy" + +Retrieve Questions by Title and Difficulty: +curl -X GET "http://localhost:8081/questions?title=Reverse%20a%20String&difficulty=Easy" + +Retrieve Questions by Title, Description, Topics, and Difficulty: +curl -X GET "http://localhost:8081/questions?title=Reverse%20a%20String&description=string&topics=Algorithms&difficulty=Easy" +``` + +### Example of Response Body for Success: ```json { @@ -77,7 +102,14 @@ This endpoint allows the retrieval of the question by using the question ID. | 404 (Not Found) | Question with the specified `questionID` not found | | 500 (Internal Server Error) | Unexpected error in the database or server | -**Example of Response Body for Success**: +### Command Line Example: + +``` +Retrieve Question by ID: +curl -X GET http://localhost:8081/questions/1 +``` + +### Example of Response Body for Success: ```json { @@ -121,7 +153,17 @@ This endpoint allows the retrieval of random questions that matches the paramete | 404 (Not Found) | Question with the specified parameter(s) not found | | 500 (Internal Server Error) | Unexpected error in the database or server | -**Example of Response Body for Success**: +### Command Line Example: + +``` +Retrieve Random Question by Topics and Difficulty: +curl -X GET "http://localhost:8081/questions/search?topics=Algorithms&difficulty=Medium" + +Retrieve Random Question by Topics, Difficulty, and Limit: +curl -X GET "http://localhost:8081/questions/search?topics=Algorithms,Data%20Structures&difficulty=Easy&limit=5" +``` + +### Example of Response Body for Success: ```json { @@ -180,7 +222,14 @@ This endpoint retrieves all unique topics in the database | 200 (OK) | Success, all topics are returned | | 500 (Internal Server Error) | The server encountered an error and could not complete the request | -**Example of Response Body for Success**: +### Command Line Example: + +``` +Retrieve Topics: +curl -X GET http://localhost:8081/questions/topics +``` + +### Example of Response Body for Success: ```json { @@ -224,7 +273,22 @@ This endpoint allows the addition of a new question. | 400 (Bad Request) | Required fields are missing or invalid or `id` already exists. | | 500 (Internal Server Error) | Unexpected error in the database or server. | -**Example of Response Body for Success**: +### Command Line Example: + +``` +Add Question: +curl -X POST http://localhost:8081/questions \ + -H "Content-Type: application/json" \ + -d '{ + "id": 21, + "title": "New Question", + "description": "This is a description for a new question.", + "topics": ["Data Structures", "Algorithms"], + "difficulty": "Medium" + }' +``` + +### Example of Response Body for Success: ```json { @@ -272,7 +336,21 @@ This endpoint allows updating an existing question. Only the title, description, | 404 (Not Found) | Question with the specified `questionId` not found. | | 500 (Internal Server Error) | Unexpected error in the database or server. | -**Example of Response Body for Success**: +### Command Line Example: + +``` +Update Question: +curl -X PUT http://localhost:8081/questions/21 \ + -H "Content-Type: application/json" \ + -d '{ + "title": "Updated Question Title", + "description": "This is the updated description.", + "topics": ["Updated Topic"], + "difficulty": "Hard" + }' +``` + +### Example of Response Body for Success: ```json { @@ -313,7 +391,14 @@ This endpoint allows the deletion of a question by the question ID. | 404 (Not Found) | Question with the specified `questionId` not found. | | 500 (Internal Server Error) | Unexpected error in the database or server. | -**Example of Response Body for Success**: +### Command Line Example: + +``` +Delete Question: +curl -X DELETE http://localhost:8081/questions/21 +``` + +### Example of Response Body for Success: ```json { diff --git a/services/question/src/controllers/questionController.ts b/services/question/src/controllers/questionController.ts index 75810b2c33..a75d9c0776 100644 --- a/services/question/src/controllers/questionController.ts +++ b/services/question/src/controllers/questionController.ts @@ -1,6 +1,6 @@ -import {Request, Response} from 'express'; -import {handleError, handleNotFound, handleBadRequest, handleSuccess} from '../utils/helpers'; -import {Question} from '../models/questionModel'; +import { Request, Response } from 'express'; +import { handleError, handleNotFound, handleBadRequest, handleSuccess } from '../utils/helpers'; +import { Question } from '../models/questionModel'; /** * This endpoint allows the retrieval of all the questions in the database (or can filter by optional parameters). @@ -9,20 +9,20 @@ import {Question} from '../models/questionModel'; */ export const getQuestions = async (req: Request, res: Response) => { try { - const {title, description, topics, difficulty} = req.query; + const { title, description, topics, difficulty } = req.query; const query: any = {}; if (title) { - query.title = {$regex: `^${title as string}$`, $options: 'i'}; + query.title = { $regex: `^${title as string}$`, $options: 'i' }; } if (description) { const words = (description as string).split(' '); - query.description = {$regex: words.join('|'), $options: 'i'}; + query.description = { $regex: words.join('|'), $options: 'i' }; } if (topics) { const topicsArray = (topics as string).split(','); query.topics = { - $in: topicsArray.map(topic => new RegExp(topic, 'i')) + $in: topicsArray.map(topic => new RegExp(topic, 'i')), }; } if (difficulty) { @@ -48,7 +48,7 @@ export const getQuestions = async (req: Request, res: Response) => { * @param res */ export const getQuestionById = async (req: Request, res: Response) => { - const {id} = req.params; + const { id } = req.params; const newId = parseInt(id, 10); if (isNaN(parseInt(id, 10))) { @@ -56,13 +56,13 @@ export const getQuestionById = async (req: Request, res: Response) => { } try { - const question = await Question.findOne({id: newId}); + const question = await Question.findOne({ id: newId }); if (!question) { return handleNotFound(res, 'Question not found'); } - handleSuccess(res, 200, "Question with ID retrieved successfully", question); + handleSuccess(res, 200, 'Question with ID retrieved successfully', question); } catch (error) { console.error('Error in getQuestionById:', error); handleError(res, error, 'Failed to retrieve question'); @@ -75,7 +75,7 @@ export const getQuestionById = async (req: Request, res: Response) => { * @param res */ export const getQuestionByParameters = async (req: Request, res: Response) => { - const {limit, topics, difficulty} = req.query; + const { limit, topics, difficulty } = req.query; if (!topics) { return handleBadRequest(res, 'Topics are required'); @@ -100,7 +100,7 @@ export const getQuestionByParameters = async (req: Request, res: Response) => { try { const topicsArray = (topics as string).split(','); const query = { - topics: {$in: topicsArray.map(topic => new RegExp(topic, 'i'))}, + topics: { $in: topicsArray.map(topic => new RegExp(topic, 'i')) }, difficulty: difficulty, }; const numOfQuestions = await Question.countDocuments(query); @@ -110,12 +110,9 @@ export const getQuestionByParameters = async (req: Request, res: Response) => { } const finalLimit = Math.min(newLimit, numOfQuestions); - const questions = await Question.aggregate([ - {$match: query}, - {$sample: {size: finalLimit}}, - ]); + const questions = await Question.aggregate([{ $match: query }, { $sample: { size: finalLimit } }]); - handleSuccess(res, 200, "Questions with Parameters retrieved successfully", questions); + handleSuccess(res, 200, 'Questions with Parameters retrieved successfully', questions); } catch (error) { console.error('Error in getQuestionByParameters:', error); handleError(res, error, 'Failed to search for questions'); @@ -135,7 +132,7 @@ export const getTopics = async (req: Request, res: Response) => { return handleNotFound(res, 'No topics found'); } - handleSuccess(res, 200, "Topics retrieved successfully", topics); + handleSuccess(res, 200, 'Topics retrieved successfully', topics); } catch (error) { console.error('Error in getTopics:', error); handleError(res, error, 'Failed to retrieve topics'); @@ -148,7 +145,7 @@ export const getTopics = async (req: Request, res: Response) => { * @param res */ export const addQuestion = async (req: Request, res: Response) => { - const {id, title, description, topics, difficulty} = req.body; + const { id, title, description, topics, difficulty } = req.body; if (!id) { return handleBadRequest(res, 'ID is required'); @@ -167,7 +164,13 @@ export const addQuestion = async (req: Request, res: Response) => { } try { - const existingQuestion = await Question.findOne({id}); + const existingQuestion = await Question.findOne({ + $or: [ + { id }, + { title: { $regex: `^${title}$`, $options: 'i' } }, + { description: { $regex: `^${description}$`, $options: 'i' } }, + ], + }); if (existingQuestion) { return handleBadRequest(res, `A question with ID ${id} already exists`); } @@ -193,20 +196,24 @@ export const addQuestion = async (req: Request, res: Response) => { * @param res */ export const updateQuestion = async (req: Request, res: Response) => { - const {id} = req.params; - const updates = {...req.body}; + const { id } = req.params; + const updates = { ...req.body }; + + if ('id' in updates) { + return handleBadRequest(res, 'ID cannot be updated'); + } try { - const updatedQuestion = await Question.findOneAndUpdate({id: parseInt(id, 10)}, updates, { + const updatedQuestion = await Question.findOneAndUpdate({ id: parseInt(id, 10) }, updates, { new: true, - runValidators: true + runValidators: true, }); if (!updatedQuestion) { return handleNotFound(res, 'Question not found'); } - handleSuccess(res, 200, "Question updated successfully", updatedQuestion); + handleSuccess(res, 200, 'Question updated successfully', updatedQuestion); } catch (error) { handleError(res, error, 'Failed to update question'); } @@ -218,18 +225,18 @@ export const updateQuestion = async (req: Request, res: Response) => { * @param res */ export const deleteQuestion = async (req: Request, res: Response) => { - const {id} = req.params; + const { id } = req.params; try { - const deletedID = parseInt(id, 10) - const deletedQuestion = await Question.findOneAndDelete({id: deletedID}); + const deletedID = parseInt(id, 10); + const deletedQuestion = await Question.findOneAndDelete({ id: deletedID }); if (!deletedQuestion) { return handleNotFound(res, 'Question not found'); } - handleSuccess(res, 200, "Question deleted successfully", deletedQuestion); + handleSuccess(res, 200, 'Question deleted successfully', deletedQuestion); } catch (error) { handleError(res, error, 'Failed to delete question'); } -}; \ No newline at end of file +}; diff --git a/services/question/src/routes/questionRoutes.ts b/services/question/src/routes/questionRoutes.ts index 73217dece8..512f2aa733 100644 --- a/services/question/src/routes/questionRoutes.ts +++ b/services/question/src/routes/questionRoutes.ts @@ -1,4 +1,4 @@ -import {Router} from 'express'; +import { Router } from 'express'; import { getQuestions, getQuestionById, @@ -6,71 +6,35 @@ import { getTopics, addQuestion, deleteQuestion, - updateQuestion + updateQuestion, } from '../controllers/questionController'; /** - * All the routes related to questions. - * All the comments are happy scenarios. + * Router for question endpoints. */ const questionRouter = Router(); /** - * curl -X GET "http://localhost:8081/questions/search?topics=Algorithms&difficulty=Medium" - * curl -X GET "http://localhost:8081/questions/search?topics=Algorithms,Data%20Structures&difficulty=Easy&limit=5" + * Get questions (or anything related to questions) from the database. */ questionRouter.get('/search', getQuestionByParameters); - -/** - * curl -X GET http://localhost:8081/topics - */ questionRouter.get('/topics', getTopics); - -/** - * curl -X GET http://localhost:8081/questions - * curl -X GET "http://localhost:8081/questions?title=Reverse%20a%20String" - * curl -X GET "http://localhost:8081/questions?description=string" - * curl -X GET "http://localhost:8081/questions?topics=Algorithms,Data%20Structures" - * curl -X GET "http://localhost:8081/questions?difficulty=Easy" - * curl -X GET "http://localhost:8081/questions?title=Reverse%20a%20String&difficulty=Easy" - * curl -X GET "http://localhost:8081/questions?description=string&topics=Algorithms" - * curl -X GET "http://localhost:8081/questions?title=Reverse%20a%20String&description=string&topics=Algorithms&difficulty=Easy" - */ questionRouter.get('/', getQuestions); - -/** - * curl -X GET http://localhost:8081/questions/1 - */ questionRouter.get('/:id', getQuestionById); /** - * curl -X POST http://localhost:8081/questions \ - * -H "Content-Type: application/json" \ - * -d '{ - * "id": 21, - * "title": "New Question", - * "description": "This is a description for a new question.", - * "topics": ["Data Structures", "Algorithms"], - * "difficulty": "Medium" - * }' + * Add a new question to the database. */ questionRouter.post('/', addQuestion); /** - * curl -X PUT http://localhost:8081/questions/21 \ - * -H "Content-Type: application/json" \ - * -d '{ - * "title": "Updated Question Title", - * "description": "This is the updated description.", - * "topics": ["Updated Topic"], - * "difficulty": "Hard" - * }' + * Update a question in the database. */ questionRouter.put('/:id', updateQuestion); /** - * curl -X DELETE http://localhost:8081/questions/21 + * Delete a question from the database. */ questionRouter.delete('/:id', deleteQuestion); diff --git a/services/question/src/utils/helpers.ts b/services/question/src/utils/helpers.ts index f98e752b55..acf44553a4 100644 --- a/services/question/src/utils/helpers.ts +++ b/services/question/src/utils/helpers.ts @@ -1,4 +1,4 @@ -import {Response} from 'express'; +import { Response } from 'express'; /** * 500: Unexpected error in the database/server @@ -9,7 +9,7 @@ import {Response} from 'express'; */ export const handleError = (res: any, error: any, message = 'An unexpected error occurred', statusCode = 500) => { console.error(error); - res.status(statusCode).json({error}); + res.status(statusCode).json({ error }); }; /** @@ -21,7 +21,7 @@ export const handleError = (res: any, error: any, message = 'An unexpected error */ export const handleBadRequest = (res: any, error: any, message = 'Bad Request', statusCode = 400) => { console.error(error); - res.status(statusCode).json({error}); + res.status(statusCode).json({ error }); }; /** @@ -33,7 +33,7 @@ export const handleBadRequest = (res: any, error: any, message = 'Bad Request', */ export const handleNotFound = (res: any, error: any, message = 'Not Found', statusCode = 404) => { console.error(error); - res.status(statusCode).json({error}); + res.status(statusCode).json({ error }); }; /** @@ -43,10 +43,10 @@ export const handleNotFound = (res: any, error: any, message = 'Not Found', stat * @param message * @param data */ -export const handleSuccess = (res: Response, statusCode: number = 200, message: string, data: any) => { +export const handleSuccess = (res: Response, statusCode = 200, message: string, data: any) => { res.status(statusCode).json({ status: 'Success', message, data, }); -}; \ No newline at end of file +}; From 599addf079fb9930badbbbac137f5b1622582691 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Sun, 22 Sep 2024 17:26:25 +0800 Subject: [PATCH 066/188] Fix bug where selected row is not getting updated after edit --- frontend/src/app/questions/questions.component.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 16491bf617..d5c0b1ae2c 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -161,6 +161,7 @@ export class QuestionsComponent implements OnInit { if (this.question.id) { // update + this.questions[this.questions.findIndex(x => x.id == this.question.id)] = this.question; this.messageService.add({ severity: 'success', summary: 'Successful', @@ -193,7 +194,7 @@ export class QuestionsComponent implements OnInit { }); this.isDialogVisible = true; } - + // assuming newest question is always appended at the back createId() { console.log(this.questions); From b0bae2a476f157b9e44d75443b8a4609adf1d49a Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Sun, 22 Sep 2024 17:40:35 +0800 Subject: [PATCH 067/188] Remove redundant component --- frontend/src/app/app.component.html | 9 --------- frontend/src/app/questions/questions.component.ts | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/frontend/src/app/app.component.html b/frontend/src/app/app.component.html index 332b1fd0b1..67e7bd4cd6 100644 --- a/frontend/src/app/app.component.html +++ b/frontend/src/app/app.component.html @@ -1,10 +1 @@ -
-
-

Hello, this is a paragraph!

- - - -
-
- diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index d5c0b1ae2c..bfaaffe997 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -194,7 +194,7 @@ export class QuestionsComponent implements OnInit { }); this.isDialogVisible = true; } - + // assuming newest question is always appended at the back createId() { console.log(this.questions); From 25ce3b8130758293dcf88d7548e0110be7f6737a Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Sun, 22 Sep 2024 18:16:05 +0800 Subject: [PATCH 068/188] Fix lint error --- frontend/src/app/questions/questions.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index 01af6f2f9d..b63853fb3b 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -105,7 +105,7 @@

Manage Questions

optionLabel="label" optionValue="value" placeholder="Select Topics"/> - + Topic is required.
From acdc854bf03a19fc1dc1445c5e872b7a5868011e Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Mon, 23 Sep 2024 11:54:08 +0800 Subject: [PATCH 069/188] Update README.md and MongoDB settings: - README.md: Update the documentation with new cmd statements - MongoDB Settings: Add an initialisation script to create user with required credentials when the MongoDB container is first started. --- docker-compose.yml | 2 ++ services/question/README.md | 19 ++----------------- .../question/src/init-mongo/init-mongo.js | 5 +++++ 3 files changed, 9 insertions(+), 17 deletions(-) create mode 100644 services/question/src/init-mongo/init-mongo.js diff --git a/docker-compose.yml b/docker-compose.yml index 4549daf7a7..f948f9242e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -41,8 +41,10 @@ services: MONGO_INITDB_ROOT_PASSWORD: ${QUESTION_DB_PASSWORD} volumes: - question-db:/data/db + - ./services/question/init-mongo/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js networks: - question-db-network + restart: always volumes: question-db: diff --git a/services/question/README.md b/services/question/README.md index 00ab8dc9a7..5f08456c3d 100644 --- a/services/question/README.md +++ b/services/question/README.md @@ -277,15 +277,7 @@ This endpoint allows the addition of a new question. ``` Add Question: -curl -X POST http://localhost:8081/questions \ - -H "Content-Type: application/json" \ - -d '{ - "id": 21, - "title": "New Question", - "description": "This is a description for a new question.", - "topics": ["Data Structures", "Algorithms"], - "difficulty": "Medium" - }' +curl -X POST http://localhost:8081/questions -H "Content-Type: application/json" -d "{\"id\": 21, \"title\": \"New Question\", \"description\": \"This is a description for a new question.\", \"topics\": [\"Data Structures\", \"Algorithms\"], \"difficulty\": \"Medium\"}" ``` ### Example of Response Body for Success: @@ -340,14 +332,7 @@ This endpoint allows updating an existing question. Only the title, description, ``` Update Question: -curl -X PUT http://localhost:8081/questions/21 \ - -H "Content-Type: application/json" \ - -d '{ - "title": "Updated Question Title", - "description": "This is the updated description.", - "topics": ["Updated Topic"], - "difficulty": "Hard" - }' +curl -X PUT http://localhost:8081/questions/21 -H "Content-Type: application/json" -d "{\"title\": \"Updated Question Title\", \"description\": \"This is the updated description.\", \"topics\": [\"Updated Topic\"], \"difficulty\": \"Hard\"}" ``` ### Example of Response Body for Success: diff --git a/services/question/src/init-mongo/init-mongo.js b/services/question/src/init-mongo/init-mongo.js new file mode 100644 index 0000000000..d429f2d60f --- /dev/null +++ b/services/question/src/init-mongo/init-mongo.js @@ -0,0 +1,5 @@ +db.createUser({ + user: "user", + pwd: "password", + roles: [{ role: "root", db: "admin" }] +}); \ No newline at end of file From 8f5b53c2f7b9f52b9a05e76d54945e159c7044c6 Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Mon, 23 Sep 2024 14:03:43 +0800 Subject: [PATCH 070/188] Fix EsLint Issues --- .../src/controllers/questionController.ts | 1 + services/question/src/utils/helpers.ts | 43 +++++++++++-------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/services/question/src/controllers/questionController.ts b/services/question/src/controllers/questionController.ts index a75d9c0776..91278984d8 100644 --- a/services/question/src/controllers/questionController.ts +++ b/services/question/src/controllers/questionController.ts @@ -10,6 +10,7 @@ import { Question } from '../models/questionModel'; export const getQuestions = async (req: Request, res: Response) => { try { const { title, description, topics, difficulty } = req.query; + // eslint-disable-next-line @typescript-eslint/no-explicit-any const query: any = {}; if (title) { diff --git a/services/question/src/utils/helpers.ts b/services/question/src/utils/helpers.ts index acf44553a4..91863ea8fe 100644 --- a/services/question/src/utils/helpers.ts +++ b/services/question/src/utils/helpers.ts @@ -1,49 +1,58 @@ import { Response } from 'express'; /** - * 500: Unexpected error in the database/server + * Handles errors and sends a 500 response with the error message. * @param res * @param error * @param message - * @param statusCode */ -export const handleError = (res: any, error: any, message = 'An unexpected error occurred', statusCode = 500) => { +export const handleError = (res: Response, error: unknown, message = 'An unexpected error occurred') => { console.error(error); - res.status(statusCode).json({ error }); + res.status(500).json({ + status: 'Error', + message, + error, + }); }; /** - * 400: Bad Request + * Handles bad requests and sends a 400 response with a custom message. * @param res * @param error * @param message - * @param statusCode */ -export const handleBadRequest = (res: any, error: any, message = 'Bad Request', statusCode = 400) => { +export const handleBadRequest = (res: Response, error: unknown, message = 'Bad Request') => { console.error(error); - res.status(statusCode).json({ error }); + res.status(400).json({ + status: 'Error', + message, + error, + }); }; /** - * 404: Not Found + * Handles not found errors and sends a 404 response with a custom message. * @param res * @param error * @param message - * @param statusCode */ -export const handleNotFound = (res: any, error: any, message = 'Not Found', statusCode = 404) => { - console.error(error); - res.status(statusCode).json({ error }); +export const handleNotFound = (res: Response, error: unknown, message = 'Not Found') => { + console.log(error); + res.status(404).json({ + status: 'Error', + message, + error, + }); }; /** - * Handles successful responses. + * Handles successful responses and sends a 200 response with the provided data. * @param res - * @param statusCode - Default is 200 - * @param message * @param data + * @param message + * @param statusCode - HTTP status code (default is 200) */ -export const handleSuccess = (res: Response, statusCode = 200, message: string, data: any) => { +export const handleSuccess = (res: Response, statusCode = 200, message: string, data: unknown) => { res.status(statusCode).json({ status: 'Success', message, From 41c79e63275eb94534414311ef5c2fc6f78ee015 Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Mon, 23 Sep 2024 14:25:18 +0800 Subject: [PATCH 071/188] Update README.md --- services/question/README.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/services/question/README.md b/services/question/README.md index 5f08456c3d..397fe004ae 100644 --- a/services/question/README.md +++ b/services/question/README.md @@ -1,5 +1,27 @@ # Question Service User Guide +## Pre-requisites + +You need to create the `.env` files from the provided `.env.sample` files in both the root directory and +the `services/question` directory. + +1. Open the Command Prompt. +2. Navigate to the root directory of the project. +3. Run the following command to create the `.env` files: +```cmd +cp .env.sample .env +cp services/question/.env.sample services/question/.env +``` +4. After setting up the .env files, build the Docker images and start the containers using the following command: +```cmd +docker compose build +docker compose up -d +``` +5. To stop and remove the containers and associated volumes, use the following command: +```cmd +docker compose down -v +``` + ## Get Questions This endpoint allows the retrieval of all the questions in the database. If filter by (optional) parameters, questions From 558105c2bddabfbfdfc4c3bf20e15f76bef6d10c Mon Sep 17 00:00:00 2001 From: McNaBry Date: Mon, 23 Sep 2024 16:11:19 +0800 Subject: [PATCH 072/188] Update prettier to format html files (#34) --- frontend/eslint.config.js | 10 +++++++++- frontend/src/app/app.component.html | 9 --------- frontend/src/index.html | 20 ++++++++++---------- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/frontend/eslint.config.js b/frontend/eslint.config.js index 69799f4f8d..35f0c3a224 100644 --- a/frontend/eslint.config.js +++ b/frontend/eslint.config.js @@ -46,7 +46,15 @@ module.exports = tseslint.config( extends: [ ...angular.configs.templateRecommended, ...angular.configs.templateAccessibility, + eslintPluginPrettierRecommended ], - rules: {}, + rules: { + 'prettier/prettier': [ + 'error', + { + 'parser': 'angular', + } + ] + }, }, ); diff --git a/frontend/src/app/app.component.html b/frontend/src/app/app.component.html index 332b1fd0b1..67e7bd4cd6 100644 --- a/frontend/src/app/app.component.html +++ b/frontend/src/app/app.component.html @@ -1,10 +1 @@ -
-
-

Hello, this is a paragraph!

- - - -
-
- diff --git a/frontend/src/index.html b/frontend/src/index.html index 3af61ec9be..bb07f6a60d 100644 --- a/frontend/src/index.html +++ b/frontend/src/index.html @@ -1,13 +1,13 @@ - - - Frontend - - - - - - - + + + Frontend + + + + + + + From ad5d1aa13660379830d816a67eaef0dd1cf3ca66 Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Tue, 24 Sep 2024 10:45:08 +0800 Subject: [PATCH 073/188] Minor Fixes on Question Service - Edit the README based on comments - Edit the EndPoints functionality based on comments --- services/question/README.md | 49 +++++++++---------- services/question/eslint.config.mjs | 2 + .../src/controllers/questionController.ts | 13 ++--- 3 files changed, 30 insertions(+), 34 deletions(-) diff --git a/services/question/README.md b/services/question/README.md index 397fe004ae..39b89bc24c 100644 --- a/services/question/README.md +++ b/services/question/README.md @@ -2,22 +2,17 @@ ## Pre-requisites -You need to create the `.env` files from the provided `.env.sample` files in both the root directory and -the `services/question` directory. - -1. Open the Command Prompt. -2. Navigate to the root directory of the project. -3. Run the following command to create the `.env` files: +1. Run the following command to create the `.env` files at the root directory: ```cmd cp .env.sample .env cp services/question/.env.sample services/question/.env ``` -4. After setting up the .env files, build the Docker images and start the containers using the following command: +2. After setting up the .env files, build the Docker images and start the containers using the following command: ```cmd docker compose build docker compose up -d ``` -5. To stop and remove the containers and associated volumes, use the following command: +3. To stop and remove the containers and associated volumes, use the following command: ```cmd docker compose down -v ``` @@ -39,11 +34,11 @@ that matches with parameters will be returned; if no parameters are provided, al ### Responses: -| Response Code | Explanation | -|-----------------------------|--------------------------------------------| -| 200 (OK) | Success, all questions are returned | -| 404 (Not Found) | No questions found. | -| 500 (Internal Server Error) | Unexpected error in the database or server | +| Response Code | Explanation | +|-----------------------------|---------------------------------------------| +| 200 (OK) | Success, all questions are returned. | +| 404 (Not Found) | No questions found. | +| 500 (Internal Server Error) | Unexpected error in the database or server. | ### Command Line Example: @@ -70,6 +65,9 @@ Retrieve Questions by Title, Description, Topics, and Difficulty: curl -X GET "http://localhost:8081/questions?title=Reverse%20a%20String&description=string&topics=Algorithms&difficulty=Easy" ``` +### Parameter Format Details: +The `topics` parameter must be passed as a comma-separated string in `GET` request because there is limitation with URL encoding and readability concerns. + ### Example of Response Body for Success: ```json @@ -118,11 +116,11 @@ This endpoint allows the retrieval of the question by using the question ID. ### Responses: -| Response Code | Explanation | -|-----------------------------|-----------------------------------------------------------------| -| 200 (OK) | Success, question corresponding to the `questionID` is returned | -| 404 (Not Found) | Question with the specified `questionID` not found | -| 500 (Internal Server Error) | Unexpected error in the database or server | +| Response Code | Explanation | +|-----------------------------|------------------------------------------------------------------| +| 200 (OK) | Success, question corresponding to the `questionID` is returned. | +| 404 (Not Found) | Question with the specified `questionID` not found. | +| 500 (Internal Server Error) | Unexpected error in the database or server. | ### Command Line Example: @@ -171,9 +169,9 @@ This endpoint allows the retrieval of random questions that matches the paramete | Response Code | Explanation | |-----------------------------|-------------------------------------------------------------------------------------------| | 200 (OK) | Success, questions corresponding to the `limit`, `topics`, and `difficulty` are returned. | -| 400 (Bad Request) | Missing fields | -| 404 (Not Found) | Question with the specified parameter(s) not found | -| 500 (Internal Server Error) | Unexpected error in the database or server | +| 400 (Bad Request) | Missing fields. | +| 404 (Not Found) | Question with the specified parameter(s) not found. | +| 500 (Internal Server Error) | Unexpected error in the database or server. | ### Command Line Example: @@ -239,10 +237,11 @@ This endpoint retrieves all unique topics in the database ### Responses: -| Response Code | Explanation | -|-----------------------------|--------------------------------------------------------------------| -| 200 (OK) | Success, all topics are returned | -| 500 (Internal Server Error) | The server encountered an error and could not complete the request | +| Response Code | Explanation | +|-----------------------------|---------------------------------------------------------------------| +| 200 (OK) | Success, all topics are returned. | +| 404 (Not Found) | No topic found. | +| 500 (Internal Server Error) | The server encountered an error and could not complete the request. | ### Command Line Example: diff --git a/services/question/eslint.config.mjs b/services/question/eslint.config.mjs index 3f1c13ceb1..6873f57ac4 100644 --- a/services/question/eslint.config.mjs +++ b/services/question/eslint.config.mjs @@ -13,6 +13,8 @@ export default tseslint.config({ eslintPluginPrettierRecommended, ], rules: { + '@typescript-eslint/no-explicit-any': 'off', + // https://stackoverflow.com/questions/68816664/get-rid-of-error-delete-eslint-prettier-prettier-and-allow-use-double 'prettier/prettier': [ 'error', diff --git a/services/question/src/controllers/questionController.ts b/services/question/src/controllers/questionController.ts index 91278984d8..ed80a3d8a9 100644 --- a/services/question/src/controllers/questionController.ts +++ b/services/question/src/controllers/questionController.ts @@ -10,11 +10,10 @@ import { Question } from '../models/questionModel'; export const getQuestions = async (req: Request, res: Response) => { try { const { title, description, topics, difficulty } = req.query; - // eslint-disable-next-line @typescript-eslint/no-explicit-any const query: any = {}; if (title) { - query.title = { $regex: `^${title as string}$`, $options: 'i' }; + query.title = title as string; } if (description) { const words = (description as string).split(' '); @@ -166,14 +165,10 @@ export const addQuestion = async (req: Request, res: Response) => { try { const existingQuestion = await Question.findOne({ - $or: [ - { id }, - { title: { $regex: `^${title}$`, $options: 'i' } }, - { description: { $regex: `^${description}$`, $options: 'i' } }, - ], - }); + $or: [{ id }, { title: title }, { description: description }], + }).collation({ locale: 'en', strength: 2 }); if (existingQuestion) { - return handleBadRequest(res, `A question with ID ${id} already exists`); + return handleBadRequest(res, `A question with the same ID, title, or description already exists.`); } const newQuestion = new Question({ From 98932ce99759f853098c6f6ea21ae333cda24022 Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Tue, 24 Sep 2024 15:30:50 +0800 Subject: [PATCH 074/188] Update README.md and functionality of Endpoints: - README.md: Update details on the functionality of Endpoints - index.ts: Initialise counter for questionID when start database - questionController.ts: Update getQuestions and getQuestionsByParameters to return empty array if not found - questionController.ts: Add counter for ID when addQuestion - counterModel.ts & sequence.ts: Add function to initialise and retrieve counter --- services/question/README.md | 89 ++++++++++--------- .../src/controllers/questionController.ts | 17 ++-- services/question/src/index.ts | 5 ++ services/question/src/models/counterModel.ts | 19 ++++ services/question/src/utils/sequence.ts | 33 +++++++ 5 files changed, 113 insertions(+), 50 deletions(-) create mode 100644 services/question/src/models/counterModel.ts create mode 100644 services/question/src/utils/sequence.ts diff --git a/services/question/README.md b/services/question/README.md index 39b89bc24c..4989a60f12 100644 --- a/services/question/README.md +++ b/services/question/README.md @@ -3,16 +3,21 @@ ## Pre-requisites 1. Run the following command to create the `.env` files at the root directory: + ```cmd cp .env.sample .env cp services/question/.env.sample services/question/.env ``` + 2. After setting up the .env files, build the Docker images and start the containers using the following command: + ```cmd docker compose build docker compose up -d ``` + 3. To stop and remove the containers and associated volumes, use the following command: + ```cmd docker compose down -v ``` @@ -34,11 +39,10 @@ that matches with parameters will be returned; if no parameters are provided, al ### Responses: -| Response Code | Explanation | -|-----------------------------|---------------------------------------------| -| 200 (OK) | Success, all questions are returned. | -| 404 (Not Found) | No questions found. | -| 500 (Internal Server Error) | Unexpected error in the database or server. | +| Response Code | Explanation | +|-----------------------------|-----------------------------------------------------------------------------------------------------------------| +| 200 (OK) | Success, all questions are returned. If no questions match the optional parameters, an empty array is returned. | +| 500 (Internal Server Error) | Unexpected error in the database or server. | ### Command Line Example: @@ -66,7 +70,9 @@ curl -X GET "http://localhost:8081/questions?title=Reverse%20a%20String&descript ``` ### Parameter Format Details: -The `topics` parameter must be passed as a comma-separated string in `GET` request because there is limitation with URL encoding and readability concerns. + +The `topics` parameter must be passed as a comma-separated string in `GET` request because there is limitation with URL +encoding and readability concerns. ### Example of Response Body for Success: @@ -108,19 +114,19 @@ The `topics` parameter must be passed as a comma-separated string in `GET` reque This endpoint allows the retrieval of the question by using the question ID. - **HTTP Method**: `GET` -- **Endpoint**: `/questions/{questionId}` +- **Endpoint**: `/questions/{id}` ### Parameters: -- `questionId` (Required) - The ID of the question to retrieve. +- `id` (Required) - The ID of the question to retrieve. ### Responses: -| Response Code | Explanation | -|-----------------------------|------------------------------------------------------------------| -| 200 (OK) | Success, question corresponding to the `questionID` is returned. | -| 404 (Not Found) | Question with the specified `questionID` not found. | -| 500 (Internal Server Error) | Unexpected error in the database or server. | +| Response Code | Explanation | +|-----------------------------|----------------------------------------------------------| +| 200 (OK) | Success, question corresponding to the `id` is returned. | +| 404 (Not Found) | Question with the specified `id` not found. | +| 500 (Internal Server Error) | Unexpected error in the database or server. | ### Command Line Example: @@ -166,12 +172,13 @@ This endpoint allows the retrieval of random questions that matches the paramete ### Responses: -| Response Code | Explanation | -|-----------------------------|-------------------------------------------------------------------------------------------| -| 200 (OK) | Success, questions corresponding to the `limit`, `topics`, and `difficulty` are returned. | -| 400 (Bad Request) | Missing fields. | -| 404 (Not Found) | Question with the specified parameter(s) not found. | -| 500 (Internal Server Error) | Unexpected error in the database or server. | +### Responses: + +| Response Code | Explanation | +|-----------------------------|-------------------------------------------------------------------------------------------------------------| +| 200 (OK) | Success, questions matching the parameters are returned. If no questions match, an empty array is returned. | +| 400 (Bad Request) | The request is missing required parameters or the parameters are invalid. | +| 500 (Internal Server Error) | Unexpected error in the database or server. | ### Command Line Example: @@ -273,14 +280,14 @@ curl -X GET http://localhost:8081/questions/topics ## Add Question -This endpoint allows the addition of a new question. +This endpoint allows the addition of a new question. The `id` is now automatically generated by the system to ensure +uniqueness. - **HTTP Method**: `POST` - **Endpoint**: `/questions` ### Parameters: -- `id` (Required) - The unique ID of the question. - `title` (Required) - The title of the question. - `description` (Required) - A description of the question. - `topics` (Required) - The topics associated with the question. @@ -288,17 +295,17 @@ This endpoint allows the addition of a new question. ### Responses: -| Response Code | Explanation | -|-----------------------------|----------------------------------------------------------------| -| 201 (Created) | The question is created successfully. | -| 400 (Bad Request) | Required fields are missing or invalid or `id` already exists. | -| 500 (Internal Server Error) | Unexpected error in the database or server. | +| Response Code | Explanation | +|-----------------------------|--------------------------------------------------------------------| +| 201 (Created) | The question is created successfully. | +| 400 (Bad Request) | Required fields are missing or invalid or question already exists. | +| 500 (Internal Server Error) | Unexpected error in the database or server. | ### Command Line Example: ``` Add Question: -curl -X POST http://localhost:8081/questions -H "Content-Type: application/json" -d "{\"id\": 21, \"title\": \"New Question\", \"description\": \"This is a description for a new question.\", \"topics\": [\"Data Structures\", \"Algorithms\"], \"difficulty\": \"Medium\"}" +curl -X POST http://localhost:8081/questions -H "Content-Type: application/json" -d "{\"title\": \"New Question\", \"description\": \"This is a description for a new question.\", \"topics\": [\"Data Structures\", \"Algorithms\"], \"difficulty\": \"Medium\"}" ``` ### Example of Response Body for Success: @@ -328,11 +335,11 @@ curl -X POST http://localhost:8081/questions -H "Content-Type: application/json" This endpoint allows updating an existing question. Only the title, description, topics, and difficulty can be updated. - **HTTP Method**: `PUT` -- **Endpoint**: `/questions/{questionId}` +- **Endpoint**: `/questions/{id}` ### Request Parameters: -- `questionId` (Required) - The ID of the question to update. +- `id` (Required) - The ID of the question to update. ### Request Body: @@ -343,11 +350,11 @@ This endpoint allows updating an existing question. Only the title, description, ### Responses: -| Response Code | Explanation | -|-----------------------------|-----------------------------------------------------| -| 200 (OK) | Success, the question is updated successfully. | -| 404 (Not Found) | Question with the specified `questionId` not found. | -| 500 (Internal Server Error) | Unexpected error in the database or server. | +| Response Code | Explanation | +|-----------------------------|------------------------------------------------| +| 200 (OK) | Success, the question is updated successfully. | +| 404 (Not Found) | Question with the specified `id` not found. | +| 500 (Internal Server Error) | Unexpected error in the database or server. | ### Command Line Example: @@ -383,19 +390,19 @@ curl -X PUT http://localhost:8081/questions/21 -H "Content-Type: application/jso This endpoint allows the deletion of a question by the question ID. - **HTTP Method**: `DELETE` -- **Endpoint**: `/questions/{questionId}` +- **Endpoint**: `/questions/{id}` ### Parameters: -- `questionId` (Required) - The ID of the question to delete. +- `id` (Required) - The ID of the question to delete. ### Responses: -| Response Code | Explanation | -|-----------------------------|-----------------------------------------------------| -| 200 (OK) | Success, the question is deleted successfully. | -| 404 (Not Found) | Question with the specified `questionId` not found. | -| 500 (Internal Server Error) | Unexpected error in the database or server. | +| Response Code | Explanation | +|-----------------------------|------------------------------------------------| +| 200 (OK) | Success, the question is deleted successfully. | +| 404 (Not Found) | Question with the specified `id` not found. | +| 500 (Internal Server Error) | Unexpected error in the database or server. | ### Command Line Example: diff --git a/services/question/src/controllers/questionController.ts b/services/question/src/controllers/questionController.ts index ed80a3d8a9..e658e41c12 100644 --- a/services/question/src/controllers/questionController.ts +++ b/services/question/src/controllers/questionController.ts @@ -1,6 +1,7 @@ import { Request, Response } from 'express'; import { handleError, handleNotFound, handleBadRequest, handleSuccess } from '../utils/helpers'; import { Question } from '../models/questionModel'; +import { getNextSequenceValue } from '../utils/sequence'; /** * This endpoint allows the retrieval of all the questions in the database (or can filter by optional parameters). @@ -32,7 +33,7 @@ export const getQuestions = async (req: Request, res: Response) => { const questions = await Question.find(query); if ((title || description || topics || difficulty) && questions.length === 0) { - return handleNotFound(res, 'No questions found matching the provided parameters.'); + return handleSuccess(res, 200, 'No questions found matching the provided parameters.', []); } handleSuccess(res, 200, 'Questions retrieved successfully', questions); @@ -106,7 +107,7 @@ export const getQuestionByParameters = async (req: Request, res: Response) => { const numOfQuestions = await Question.countDocuments(query); if (numOfQuestions === 0) { - return handleNotFound(res, 'No questions found with the given parameters'); + return handleSuccess(res, 200, 'No questions found with the given parameters', []); } const finalLimit = Math.min(newLimit, numOfQuestions); @@ -145,11 +146,8 @@ export const getTopics = async (req: Request, res: Response) => { * @param res */ export const addQuestion = async (req: Request, res: Response) => { - const { id, title, description, topics, difficulty } = req.body; + const { title, description, topics, difficulty } = req.body; - if (!id) { - return handleBadRequest(res, 'ID is required'); - } if (!title) { return handleBadRequest(res, 'Title is required'); } @@ -165,14 +163,15 @@ export const addQuestion = async (req: Request, res: Response) => { try { const existingQuestion = await Question.findOne({ - $or: [{ id }, { title: title }, { description: description }], + $or: [{ title: title }, { description: description }], }).collation({ locale: 'en', strength: 2 }); if (existingQuestion) { - return handleBadRequest(res, `A question with the same ID, title, or description already exists.`); + return handleBadRequest(res, `A question with the same title or description already exists.`); } + const newId = await getNextSequenceValue('questionId'); const newQuestion = new Question({ - id, + id: newId, title, description, topics, diff --git a/services/question/src/index.ts b/services/question/src/index.ts index 99e6654e26..4802d8777b 100644 --- a/services/question/src/index.ts +++ b/services/question/src/index.ts @@ -1,6 +1,7 @@ import app from './app'; import { connectToDB, upsertManyQuestions } from './models'; import { getDemoQuestions } from './utils/data'; +import { initializeCounter } from './utils/sequence'; const port = process.env.PORT || 8081; @@ -12,6 +13,10 @@ connectToDB() .then(questions => upsertManyQuestions(questions)) .then(() => { console.log('Questions synced successfully'); + return initializeCounter(); + }) + .then(() => { + console.log('Question ID initialized successfully'); app.listen(port, () => console.log(`Question service is listening on port ${port}.`)); }) .catch(error => { diff --git a/services/question/src/models/counterModel.ts b/services/question/src/models/counterModel.ts new file mode 100644 index 0000000000..abee73bc58 --- /dev/null +++ b/services/question/src/models/counterModel.ts @@ -0,0 +1,19 @@ +import { Schema, model } from 'mongoose'; + +export interface ICounter { + _id: string; + sequence_value: number; +} + +const counterSchema = new Schema({ + _id: { + type: String, + required: true, + }, + sequence_value: { + type: Number, + required: true, + }, +}); + +export const Counter = model('Counter', counterSchema); \ No newline at end of file diff --git a/services/question/src/utils/sequence.ts b/services/question/src/utils/sequence.ts new file mode 100644 index 0000000000..602a2fc053 --- /dev/null +++ b/services/question/src/utils/sequence.ts @@ -0,0 +1,33 @@ +import { Question } from '../models/questionModel'; +import { Counter } from '../models/counterModel'; + +/** + * This function initializes the counter for the questions. + */ +export async function initializeCounter() { + const maxQuestion = await Question.findOne().sort('-id').exec(); + let maxId = 0; + if (maxQuestion) { + maxId = maxQuestion.id; + } + await Counter.findOneAndUpdate( + { _id: 'questionId' }, + { $set: { sequence_value: maxId } }, + { upsert: true }, + ); + console.log(`Question ID initialized to start from: ${maxId}`); +} + +/** + * This function retrieves the next sequence value. + * @param sequenceName + */ +export const getNextSequenceValue = async (sequenceName: string): Promise => { + const counter = await Counter.findByIdAndUpdate( + sequenceName, + { $inc: { sequence_value: 1 } }, + { new: true, upsert: true }, + ); + console.log(`Updated Question ID: ${counter.sequence_value}`); + return counter.sequence_value; +}; \ No newline at end of file From 04d1b5d77ff284c1d2940aae5bd41194696217bf Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Tue, 24 Sep 2024 15:32:14 +0800 Subject: [PATCH 075/188] Use ESlint for indentation --- services/question/src/models/counterModel.ts | 2 +- services/question/src/utils/sequence.ts | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/services/question/src/models/counterModel.ts b/services/question/src/models/counterModel.ts index abee73bc58..3220f50ba9 100644 --- a/services/question/src/models/counterModel.ts +++ b/services/question/src/models/counterModel.ts @@ -16,4 +16,4 @@ const counterSchema = new Schema({ }, }); -export const Counter = model('Counter', counterSchema); \ No newline at end of file +export const Counter = model('Counter', counterSchema); diff --git a/services/question/src/utils/sequence.ts b/services/question/src/utils/sequence.ts index 602a2fc053..ec39b0c5ef 100644 --- a/services/question/src/utils/sequence.ts +++ b/services/question/src/utils/sequence.ts @@ -10,11 +10,7 @@ export async function initializeCounter() { if (maxQuestion) { maxId = maxQuestion.id; } - await Counter.findOneAndUpdate( - { _id: 'questionId' }, - { $set: { sequence_value: maxId } }, - { upsert: true }, - ); + await Counter.findOneAndUpdate({ _id: 'questionId' }, { $set: { sequence_value: maxId } }, { upsert: true }); console.log(`Question ID initialized to start from: ${maxId}`); } @@ -30,4 +26,4 @@ export const getNextSequenceValue = async (sequenceName: string): Promise Date: Tue, 24 Sep 2024 15:36:10 +0800 Subject: [PATCH 076/188] Added .idea to .gitignore --- services/question/.gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/question/.gitignore b/services/question/.gitignore index 931232e706..13e9addf04 100644 --- a/services/question/.gitignore +++ b/services/question/.gitignore @@ -1,5 +1,8 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. +# Ignore IntelliJ IDEA project files +.idea/ + # dependencies /node_modules /.pnp From 632349648d507b43285962381360dfd628bfdfb8 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Tue, 24 Sep 2024 16:46:54 +0800 Subject: [PATCH 077/188] Update minor changes - Update toast message for successful delete - Add spaces between multiple topics - Update .css to use .min - Remove redundant console logs --- frontend/src/app/questions/questions.component.html | 2 +- frontend/src/app/questions/questions.component.ts | 5 ++--- frontend/src/styles.css | 4 ++-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index b63853fb3b..cf569f9e74 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -51,7 +51,7 @@

Manage Questions

{{question.id}} {{question.title}} {{question.description}} - {{question.topics}} + {{question.topics.join(', ')}} {{question.difficulty}} Date: Tue, 24 Sep 2024 16:50:36 +0800 Subject: [PATCH 078/188] Fix indentations inconsistencies for .html files --- .../app/questions/questions.component.html | 137 ++++++++---------- 1 file changed, 64 insertions(+), 73 deletions(-) diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index cf569f9e74..cac263cc3d 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -2,31 +2,31 @@
- - + +
- +

Manage Questions

@@ -48,34 +48,28 @@

Manage Questions

- {{question.id}} - {{question.title}} - {{question.description}} - {{question.topics.join(', ')}} - {{question.difficulty}} + {{ question.id }} + {{ question.title }} + {{ question.description }} + {{ question.topics.join(', ') }} + {{ question.difficulty }} - + - +
- - Create new question - + Create new question
@@ -84,12 +78,11 @@

Manage Questions

+ type="text" + pInputText + id="title" + required + class="text-base text-color surface-overlay p-2 border-1 border-solid surface-border border-round appearance-none outline-none focus:border-primary w-full" /> Title is required. @@ -99,27 +92,31 @@

Manage Questions

- + optionValue="value" + placeholder="Select Topics" /> + Topic is required.
- - + Difficulty is required.
@@ -129,30 +126,24 @@

Manage Questions

- + Description is required.
- - + + - \ No newline at end of file + From 31dd2a800a796b218ec28f69a6d852f40b5cb1dc Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Tue, 24 Sep 2024 17:27:45 +0800 Subject: [PATCH 079/188] Update budget limit --- frontend/angular.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/angular.json b/frontend/angular.json index cdb87d9292..9c586609e2 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -36,8 +36,8 @@ "budgets": [ { "type": "initial", - "maximumWarning": "500kB", - "maximumError": "1MB" + "maximumWarning": "2MB", + "maximumError": "3MB" }, { "type": "anyComponentStyle", From 4fa3ee9938aa29fe3941f2a9e353ad0fe4c59f8d Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Wed, 25 Sep 2024 11:57:45 +0800 Subject: [PATCH 080/188] Add .idea to .gitignore and remove from Git tracking --- .gitignore | 2 ++ services/question/.gitignore | 3 --- 2 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..dd189b758d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Ignore IntelliJ IDEA project files +.idea/ \ No newline at end of file diff --git a/services/question/.gitignore b/services/question/.gitignore index 13e9addf04..931232e706 100644 --- a/services/question/.gitignore +++ b/services/question/.gitignore @@ -1,8 +1,5 @@ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. -# Ignore IntelliJ IDEA project files -.idea/ - # dependencies /node_modules /.pnp From 8edfb05bb4324229e3f6462b8909117ace53f5a0 Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Wed, 25 Sep 2024 12:05:14 +0800 Subject: [PATCH 081/188] Remove .idea from tracking and update .gitignore --- .gitignore | 3 ++- .idea/.gitignore | 8 -------- 2 files changed, 2 insertions(+), 9 deletions(-) delete mode 100644 .idea/.gitignore diff --git a/.gitignore b/.gitignore index dd189b758d..f3ce38b554 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ # Ignore IntelliJ IDEA project files -.idea/ \ No newline at end of file +.idea/ +.env \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b81b0..0000000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml From 0c7e193a816d961db5b9b4d8b1a9af72bb7e1a97 Mon Sep 17 00:00:00 2001 From: samuelim01 <61283948+samuelim01@users.noreply.github.com> Date: Wed, 25 Sep 2024 19:45:59 +0800 Subject: [PATCH 082/188] PR template (#3) --- .github/pull_request_template.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/pull_request_template.md diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000000..7ab3439700 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,10 @@ +## Description + +Please include a summary of the changes made in this pull request. + +## Checklist + +- [ ] I have updated documentation +- [ ] All tests passing + +## Screenshots (if applicable) \ No newline at end of file From 90173d77224f4cee35c77278ebe30aea90c1fbcf Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Wed, 25 Sep 2024 22:30:01 +0800 Subject: [PATCH 083/188] Generate template for service caller --- .../src/app/questions/question.service.spec.ts | 16 ++++++++++++++++ frontend/src/app/questions/question.service.ts | 10 ++++++++++ 2 files changed, 26 insertions(+) create mode 100644 frontend/src/app/questions/question.service.spec.ts create mode 100644 frontend/src/app/questions/question.service.ts diff --git a/frontend/src/app/questions/question.service.spec.ts b/frontend/src/app/questions/question.service.spec.ts new file mode 100644 index 0000000000..54f2238efc --- /dev/null +++ b/frontend/src/app/questions/question.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { QuestionService } from './question.service'; + +describe('QuestionService', () => { + let service: QuestionService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(QuestionService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/questions/question.service.ts b/frontend/src/app/questions/question.service.ts new file mode 100644 index 0000000000..6b91ac56fe --- /dev/null +++ b/frontend/src/app/questions/question.service.ts @@ -0,0 +1,10 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class QuestionService { + + constructor(private http: HttpClient) { } +} From f20f99c2e66d118bded608620ba7d87a0cb26e1c Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Wed, 25 Sep 2024 22:43:36 +0800 Subject: [PATCH 084/188] Refactor models into separate files --- frontend/src/app/questions/column.model.ts | 4 +++ .../src/app/questions/difficulty.model.ts | 4 +++ frontend/src/app/questions/question.model.ts | 30 +++++++------------ .../app/questions/question.service.spec.ts | 16 +++++----- .../src/app/questions/question.service.ts | 5 ++-- frontend/src/app/questions/topic.model.ts | 4 +++ 6 files changed, 33 insertions(+), 30 deletions(-) create mode 100644 frontend/src/app/questions/column.model.ts create mode 100644 frontend/src/app/questions/difficulty.model.ts create mode 100644 frontend/src/app/questions/topic.model.ts diff --git a/frontend/src/app/questions/column.model.ts b/frontend/src/app/questions/column.model.ts new file mode 100644 index 0000000000..2462f0c027 --- /dev/null +++ b/frontend/src/app/questions/column.model.ts @@ -0,0 +1,4 @@ +export interface Column { + field: string; + header: string; +} diff --git a/frontend/src/app/questions/difficulty.model.ts b/frontend/src/app/questions/difficulty.model.ts new file mode 100644 index 0000000000..0479b381f1 --- /dev/null +++ b/frontend/src/app/questions/difficulty.model.ts @@ -0,0 +1,4 @@ +export interface Difficulty { + label: string; + value: string; +} diff --git a/frontend/src/app/questions/question.model.ts b/frontend/src/app/questions/question.model.ts index 5b339b8860..cb91e80de3 100644 --- a/frontend/src/app/questions/question.model.ts +++ b/frontend/src/app/questions/question.model.ts @@ -1,22 +1,14 @@ -export interface Question { - id?: number; - title?: string; - description?: string; - topics?: string[]; - difficulty?: string; -} - -export interface Column { - field: string; - header: string; +export interface QuestionResponse { + status: string; + message: string; + data?: Question[] | null; } -export interface Topic { - label: string; - value: string; -} - -export interface Difficulty { - label: string; - value: string; +export interface Question { + _id: string; + id: number; + description: string; + difficulty: string; + title: string; + topics?: string[]; } diff --git a/frontend/src/app/questions/question.service.spec.ts b/frontend/src/app/questions/question.service.spec.ts index 54f2238efc..1db8a54876 100644 --- a/frontend/src/app/questions/question.service.spec.ts +++ b/frontend/src/app/questions/question.service.spec.ts @@ -3,14 +3,14 @@ import { TestBed } from '@angular/core/testing'; import { QuestionService } from './question.service'; describe('QuestionService', () => { - let service: QuestionService; + let service: QuestionService; - beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(QuestionService); - }); + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(QuestionService); + }); - it('should be created', () => { - expect(service).toBeTruthy(); - }); + it('should be created', () => { + expect(service).toBeTruthy(); + }); }); diff --git a/frontend/src/app/questions/question.service.ts b/frontend/src/app/questions/question.service.ts index 6b91ac56fe..b59408abd4 100644 --- a/frontend/src/app/questions/question.service.ts +++ b/frontend/src/app/questions/question.service.ts @@ -2,9 +2,8 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class QuestionService { - - constructor(private http: HttpClient) { } + constructor(private http: HttpClient) {} } diff --git a/frontend/src/app/questions/topic.model.ts b/frontend/src/app/questions/topic.model.ts new file mode 100644 index 0000000000..ea27c661d6 --- /dev/null +++ b/frontend/src/app/questions/topic.model.ts @@ -0,0 +1,4 @@ +export interface Topic { + label: string; + value: string; +} From 20205c6a5afc821cccc3d81054a980ad5975d804 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Wed, 25 Sep 2024 22:51:01 +0800 Subject: [PATCH 085/188] Add config file to store base url --- frontend/src/app/api.config.ts | 3 +++ frontend/src/app/questions/question.service.ts | 6 ++++++ 2 files changed, 9 insertions(+) create mode 100644 frontend/src/app/api.config.ts diff --git a/frontend/src/app/api.config.ts b/frontend/src/app/api.config.ts new file mode 100644 index 0000000000..67e2d1a966 --- /dev/null +++ b/frontend/src/app/api.config.ts @@ -0,0 +1,3 @@ +export const API_CONFIG = { + baseUrl: 'http://localhost:8081', +}; diff --git a/frontend/src/app/questions/question.service.ts b/frontend/src/app/questions/question.service.ts index b59408abd4..529bd37813 100644 --- a/frontend/src/app/questions/question.service.ts +++ b/frontend/src/app/questions/question.service.ts @@ -1,9 +1,15 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; +import { Question } from './question.model'; +import { Observable } from 'rxjs'; @Injectable({ providedIn: 'root', }) export class QuestionService { constructor(private http: HttpClient) {} + + getList(): Observable { + return this.http.get('https://lhp-command-center-webapi-dev.azurewebsites.net/api/sites/List'); + } } From f8b1544c5983b212c501f9e6607c3e1567a26ca3 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Wed, 25 Sep 2024 23:41:10 +0800 Subject: [PATCH 086/188] Implement QuestionService with getQuestions method - Added getQuestions method to fetch questions - Updated component to utlise the new service method for fetching all questions - Fixed accessiblity issues with HttpClient --- frontend/src/app/app.config.ts | 3 +- .../src/app/questions/question.service.ts | 39 ++++++++++++--- .../src/app/questions/questions.component.ts | 47 +++++++++++++++---- 3 files changed, 73 insertions(+), 16 deletions(-) diff --git a/frontend/src/app/app.config.ts b/frontend/src/app/app.config.ts index 0e71a07b39..cf2a1d4df5 100644 --- a/frontend/src/app/app.config.ts +++ b/frontend/src/app/app.config.ts @@ -2,7 +2,8 @@ import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; +import { provideHttpClient } from '@angular/common/http'; export const appConfig: ApplicationConfig = { - providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), provideAnimationsAsync()], + providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), provideAnimationsAsync(), provideHttpClient()], }; diff --git a/frontend/src/app/questions/question.service.ts b/frontend/src/app/questions/question.service.ts index 529bd37813..a0ab4ac8f5 100644 --- a/frontend/src/app/questions/question.service.ts +++ b/frontend/src/app/questions/question.service.ts @@ -1,15 +1,42 @@ -import { HttpClient } from '@angular/common/http'; +import { HttpClient, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { Question } from './question.model'; +import { API_CONFIG } from '../api.config'; import { Observable } from 'rxjs'; +import { QuestionResponse } from './question.model'; @Injectable({ - providedIn: 'root', + providedIn: 'root' }) export class QuestionService { - constructor(private http: HttpClient) {} + private baseUrl = API_CONFIG.baseUrl; - getList(): Observable { - return this.http.get('https://lhp-command-center-webapi-dev.azurewebsites.net/api/sites/List'); + constructor(private http: HttpClient) { } + + getQuestions( + title?: string, + description?: string, + topics?: string[], + difficulty?: string + ): Observable { + let params = new HttpParams(); + + if (title) { + params = params.append('title', title); + } + if (description) { + params = params.append('description', description); + } + if (topics && topics.length > 0) { + params = params.append('topics', topics.join(',')); + } + if (difficulty) { + params = params.append('difficulty', difficulty); + } + + // send request + console.log(this.baseUrl + '/questions', { params }); + return this.http.get(this.baseUrl + '/questions', { params }); } + + } diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 162660bdcf..0673723215 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -12,8 +12,12 @@ import { MultiSelectModule } from 'primeng/multiselect'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { DropdownModule } from 'primeng/dropdown'; import questionData from './questions.json'; -import { Question, Column, Topic, Difficulty } from './question.model'; +import { Question, QuestionResponse } from './question.model'; +import { Column } from './column.model'; +import { Topic } from './topic.model'; +import { Difficulty } from './difficulty.model'; import { DifficultyLevels } from './difficulty-levels.enum'; +import { QuestionService } from './question.service'; @Component({ selector: 'app-questions', @@ -33,12 +37,14 @@ import { DifficultyLevels } from './difficulty-levels.enum'; MultiSelectModule, DropdownModule, ], - providers: [ConfirmationService, MessageService], + providers: [QuestionService, ConfirmationService, MessageService], templateUrl: './questions.component.html', styleUrl: './questions.component.css', }) export class QuestionsComponent implements OnInit { - questions: Question[] = questionData; + questionResponse!: QuestionResponse; + + questions: Question[] = []; topics!: Topic[]; @@ -59,6 +65,7 @@ export class QuestionsComponent implements OnInit { cols: Column[] = []; constructor( + private questionService: QuestionService, private messageService: MessageService, private confirmationService: ConfirmationService, ) {} @@ -66,12 +73,27 @@ export class QuestionsComponent implements OnInit { ngOnInit() { // two way binding for forms is not working for some reason unless question is initialised with empty values this.question = { + _id: '', + id: -1, title: '', topics: [], description: '', difficulty: '', }; + this.questionService.getQuestions().subscribe({ + next: (response: QuestionResponse) => { + console.log(response.data!); + this.questions = response.data!; + }, + error: (error: Error) => { + console.log(error) + }, + complete: () => { + console.log('complete') + } + }) + // Dummy data for topics this.topics = [ { label: 'Arrays', value: 'Arrays' }, @@ -124,7 +146,7 @@ export class QuestionsComponent implements OnInit { openNewQuestion() { this.resetFormGroup(); - this.question = {}; + this.question = {} as Question; this.submitted = false; this.isDialogVisible = true; } @@ -135,7 +157,7 @@ export class QuestionsComponent implements OnInit { header: 'Delete Confirmation', icon: 'pi pi-exclamation-triangle', accept: () => { - this.questions = this.questions.filter(val => !this.selectedQuestions?.includes(val)); + this.questions = this.questions?.filter(val => !this.selectedQuestions?.includes(val)); this.selectedQuestions = null; this.messageService.add({ severity: 'success', @@ -161,7 +183,10 @@ export class QuestionsComponent implements OnInit { if (this.question.id) { // update - this.questions[this.questions.findIndex(x => x.id == this.question.id)] = this.question; + if (this.questions) { + this.questions[this.questions.findIndex(x => x.id == this.question.id)] = this.question; + } + this.messageService.add({ severity: 'success', summary: 'Successful', @@ -171,7 +196,11 @@ export class QuestionsComponent implements OnInit { } else { // add this.question.id = this.createId(); - this.questions = [...this.questions, this.question]; + + if (this.questions) { + this.questions = [...this.questions, this.question]; + } + this.messageService.add({ severity: 'success', summary: 'Successful', @@ -181,7 +210,7 @@ export class QuestionsComponent implements OnInit { } this.isDialogVisible = false; - this.question = {}; + this.question = {} as Question; } editQuestion(question: Question) { @@ -197,7 +226,7 @@ export class QuestionsComponent implements OnInit { // assuming newest question is always appended at the back createId() { - return Number(this.questions.at(-1)?.id) + 1; + return this.questions ? Number(this.questions.at(-1)?.id) + 1 : -1; } resetFormGroup() { From ddb9c848c013a34c8e65693e41afca0705604b47 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Wed, 25 Sep 2024 23:42:18 +0800 Subject: [PATCH 087/188] Fix linting --- frontend/src/app/app.config.ts | 7 ++++++- frontend/src/app/questions/question.service.ts | 10 ++++------ frontend/src/app/questions/questions.component.ts | 9 ++++----- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/frontend/src/app/app.config.ts b/frontend/src/app/app.config.ts index cf2a1d4df5..b2971cbc23 100644 --- a/frontend/src/app/app.config.ts +++ b/frontend/src/app/app.config.ts @@ -5,5 +5,10 @@ import { provideAnimationsAsync } from '@angular/platform-browser/animations/asy import { provideHttpClient } from '@angular/common/http'; export const appConfig: ApplicationConfig = { - providers: [provideZoneChangeDetection({ eventCoalescing: true }), provideRouter(routes), provideAnimationsAsync(), provideHttpClient()], + providers: [ + provideZoneChangeDetection({ eventCoalescing: true }), + provideRouter(routes), + provideAnimationsAsync(), + provideHttpClient(), + ], }; diff --git a/frontend/src/app/questions/question.service.ts b/frontend/src/app/questions/question.service.ts index a0ab4ac8f5..650a1105f4 100644 --- a/frontend/src/app/questions/question.service.ts +++ b/frontend/src/app/questions/question.service.ts @@ -5,18 +5,18 @@ import { Observable } from 'rxjs'; import { QuestionResponse } from './question.model'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class QuestionService { private baseUrl = API_CONFIG.baseUrl; - constructor(private http: HttpClient) { } - + constructor(private http: HttpClient) {} + getQuestions( title?: string, description?: string, topics?: string[], - difficulty?: string + difficulty?: string, ): Observable { let params = new HttpParams(); @@ -37,6 +37,4 @@ export class QuestionService { console.log(this.baseUrl + '/questions', { params }); return this.http.get(this.baseUrl + '/questions', { params }); } - - } diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 0673723215..d542fccf18 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -11,7 +11,6 @@ import { DialogModule } from 'primeng/dialog'; import { MultiSelectModule } from 'primeng/multiselect'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { DropdownModule } from 'primeng/dropdown'; -import questionData from './questions.json'; import { Question, QuestionResponse } from './question.model'; import { Column } from './column.model'; import { Topic } from './topic.model'; @@ -87,12 +86,12 @@ export class QuestionsComponent implements OnInit { this.questions = response.data!; }, error: (error: Error) => { - console.log(error) + console.log(error); }, complete: () => { - console.log('complete') - } - }) + console.log('complete'); + }, + }); // Dummy data for topics this.topics = [ From 193e33f78798ded00814abc3191d7734c9f79bc4 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Thu, 26 Sep 2024 12:25:54 +0800 Subject: [PATCH 088/188] Implement getTopics method --- .../src/app/questions/question.service.ts | 6 +++- .../src/app/questions/questions.component.ts | 36 ++++++++++--------- frontend/src/app/questions/topic.model.ts | 7 ++++ 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/frontend/src/app/questions/question.service.ts b/frontend/src/app/questions/question.service.ts index 650a1105f4..f0e55cd749 100644 --- a/frontend/src/app/questions/question.service.ts +++ b/frontend/src/app/questions/question.service.ts @@ -3,6 +3,7 @@ import { Injectable } from '@angular/core'; import { API_CONFIG } from '../api.config'; import { Observable } from 'rxjs'; import { QuestionResponse } from './question.model'; +import { Topic, TopicResponse } from './topic.model'; @Injectable({ providedIn: 'root', @@ -34,7 +35,10 @@ export class QuestionService { } // send request - console.log(this.baseUrl + '/questions', { params }); return this.http.get(this.baseUrl + '/questions', { params }); } + + getTopics(): Observable { + return this.http.get(this.baseUrl + '/questions/topics'); + } } diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index d542fccf18..696bf50307 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -13,7 +13,7 @@ import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { DropdownModule } from 'primeng/dropdown'; import { Question, QuestionResponse } from './question.model'; import { Column } from './column.model'; -import { Topic } from './topic.model'; +import { Topic, TopicResponse } from './topic.model'; import { Difficulty } from './difficulty.model'; import { DifficultyLevels } from './difficulty-levels.enum'; import { QuestionService } from './question.service'; @@ -82,32 +82,34 @@ export class QuestionsComponent implements OnInit { this.questionService.getQuestions().subscribe({ next: (response: QuestionResponse) => { - console.log(response.data!); this.questions = response.data!; }, error: (error: Error) => { + // TODO: prompt an error on unsuccessful fetch console.log(error); }, complete: () => { + // TODO: add loading state for this console.log('complete'); }, }); - // Dummy data for topics - this.topics = [ - { label: 'Arrays', value: 'Arrays' }, - { label: 'Dynamic Programming', value: 'Dynamic Programming' }, - { label: 'Greedy', value: 'Greedy' }, - { label: 'Hashset', value: 'Hashset' }, - { label: 'Sorting', value: 'Sorting' }, - { label: 'Algorithms', value: 'Algorithms' }, - { label: 'Bit Manipulation', value: 'Bit Manipulation' }, - { label: 'Brainteaser', value: 'Brainteaser' }, - { label: 'Data Structures', value: 'Data Structures' }, - { label: 'Databases', value: 'Databases' }, - { label: 'Recursion', value: 'Recursion' }, - { label: 'Strings', value: 'Strings' }, - ]; + this.questionService.getTopics().subscribe({ + next: (response: TopicResponse) => { + this.topics = response.data!.map(topic => ({ + label: topic, + value: topic + })) + }, + error: (error: Error) => { + // TODO: prompt an error on unsuccessful fetch + console.log(error); + }, + complete: () => { + // TODO: add loading state for this + console.log('complete'); + }, + }); this.difficulties = [ { label: DifficultyLevels.EASY, value: DifficultyLevels.EASY }, diff --git a/frontend/src/app/questions/topic.model.ts b/frontend/src/app/questions/topic.model.ts index ea27c661d6..c71ab932b9 100644 --- a/frontend/src/app/questions/topic.model.ts +++ b/frontend/src/app/questions/topic.model.ts @@ -2,3 +2,10 @@ export interface Topic { label: string; value: string; } + +export interface TopicResponse { + status: string; + message: string; + data?: (string)[] | null; + } + \ No newline at end of file From ca6529395e027f71119a875782f3438f4af29d12 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Thu, 26 Sep 2024 12:41:00 +0800 Subject: [PATCH 089/188] Add forkJoin to combine question and topic API calls This ensures that both requests are complete before updating UI --- .../src/app/questions/question.service.ts | 2 +- .../src/app/questions/questions.component.ts | 49 +++++++++---------- frontend/src/app/questions/topic.model.ts | 5 +- 3 files changed, 26 insertions(+), 30 deletions(-) diff --git a/frontend/src/app/questions/question.service.ts b/frontend/src/app/questions/question.service.ts index f0e55cd749..9fad4cf5a9 100644 --- a/frontend/src/app/questions/question.service.ts +++ b/frontend/src/app/questions/question.service.ts @@ -3,7 +3,7 @@ import { Injectable } from '@angular/core'; import { API_CONFIG } from '../api.config'; import { Observable } from 'rxjs'; import { QuestionResponse } from './question.model'; -import { Topic, TopicResponse } from './topic.model'; +import { TopicResponse } from './topic.model'; @Injectable({ providedIn: 'root', diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 696bf50307..04fd4530a9 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -11,12 +11,13 @@ import { DialogModule } from 'primeng/dialog'; import { MultiSelectModule } from 'primeng/multiselect'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { DropdownModule } from 'primeng/dropdown'; -import { Question, QuestionResponse } from './question.model'; +import { Question } from './question.model'; import { Column } from './column.model'; -import { Topic, TopicResponse } from './topic.model'; +import { Topic } from './topic.model'; import { Difficulty } from './difficulty.model'; import { DifficultyLevels } from './difficulty-levels.enum'; import { QuestionService } from './question.service'; +import { forkJoin } from 'rxjs'; @Component({ selector: 'app-questions', @@ -41,8 +42,6 @@ import { QuestionService } from './question.service'; styleUrl: './questions.component.css', }) export class QuestionsComponent implements OnInit { - questionResponse!: QuestionResponse; - questions: Question[] = []; topics!: Topic[]; @@ -80,30 +79,28 @@ export class QuestionsComponent implements OnInit { difficulty: '', }; - this.questionService.getQuestions().subscribe({ - next: (response: QuestionResponse) => { - this.questions = response.data!; + forkJoin({ + questions: this.questionService.getQuestions(), + topics: this.questionService.getTopics(), + }).subscribe({ + next: results => { + this.questions = results.questions.data || []; + this.topics = + results.topics.data?.map(topic => ({ + label: topic, + value: topic, + })) || []; }, error: (error: Error) => { - // TODO: prompt an error on unsuccessful fetch - console.log(error); - }, - complete: () => { - // TODO: add loading state for this - console.log('complete'); - }, - }); - - this.questionService.getTopics().subscribe({ - next: (response: TopicResponse) => { - this.topics = response.data!.map(topic => ({ - label: topic, - value: topic - })) - }, - error: (error: Error) => { - // TODO: prompt an error on unsuccessful fetch - console.log(error); + console.error(error); + this.questions = []; + this.topics = []; + this.messageService.add({ + severity: 'error', + summary: 'Error', + detail: 'Failed to load data. Please try again later.', + life: 3000, + }); }, complete: () => { // TODO: add loading state for this diff --git a/frontend/src/app/questions/topic.model.ts b/frontend/src/app/questions/topic.model.ts index c71ab932b9..2a4849883a 100644 --- a/frontend/src/app/questions/topic.model.ts +++ b/frontend/src/app/questions/topic.model.ts @@ -6,6 +6,5 @@ export interface Topic { export interface TopicResponse { status: string; message: string; - data?: (string)[] | null; - } - \ No newline at end of file + data?: string[] | null; +} From bbbf30835bdb5bae6ceded29a8cb24c541147cc8 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Thu, 26 Sep 2024 15:06:58 +0800 Subject: [PATCH 090/188] Add API calls --- frontend/src/app/questions/question.model.ts | 15 +++++++- .../src/app/questions/question.service.ts | 37 ++++++++++++++++++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/questions/question.model.ts b/frontend/src/app/questions/question.model.ts index cb91e80de3..87e669b356 100644 --- a/frontend/src/app/questions/question.model.ts +++ b/frontend/src/app/questions/question.model.ts @@ -4,11 +4,24 @@ export interface QuestionResponse { data?: Question[] | null; } +export interface SingleQuestionResponse { + status: string; + message: string; + data: Question; +} + export interface Question { - _id: string; + _id?: string; id: number; description: string; difficulty: string; title: string; topics?: string[]; } + +export interface QuestionBody { + description?: string; + difficulty?: string; + title?: string; + topics?: string[]; +} diff --git a/frontend/src/app/questions/question.service.ts b/frontend/src/app/questions/question.service.ts index 9fad4cf5a9..8cb3e665ad 100644 --- a/frontend/src/app/questions/question.service.ts +++ b/frontend/src/app/questions/question.service.ts @@ -1,8 +1,8 @@ -import { HttpClient, HttpParams } from '@angular/common/http'; +import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { API_CONFIG } from '../api.config'; import { Observable } from 'rxjs'; -import { QuestionResponse } from './question.model'; +import { SingleQuestionResponse, QuestionResponse, QuestionBody } from './question.model'; import { TopicResponse } from './topic.model'; @Injectable({ @@ -11,6 +11,12 @@ import { TopicResponse } from './topic.model'; export class QuestionService { private baseUrl = API_CONFIG.baseUrl; + private httpOptions = { + headers: new HttpHeaders({ + 'Content-Type': 'application/json', + }), + }; + constructor(private http: HttpClient) {} getQuestions( @@ -38,7 +44,34 @@ export class QuestionService { return this.http.get(this.baseUrl + '/questions', { params }); } + getQuestionByID(id: number): Observable { + return this.http.get(this.baseUrl + '/questions/' + id); + } + + getQuestionByParam(topics: string[], difficulty: string, limit?: number): Observable { + let params = new HttpParams(); + + if (limit) { + params = params.append('limit', limit); + } + params = params.append('topics', topics.join(',')).append('difficulty', difficulty); + + return this.http.get(this.baseUrl + '/questions/search', { params }); + } + getTopics(): Observable { return this.http.get(this.baseUrl + '/questions/topics'); } + + addQuestion(question: QuestionBody): Observable { + return this.http.post(this.baseUrl + '/questions', question, this.httpOptions); + } + + updateQuestion(id: number, question: QuestionBody): Observable { + return this.http.put(this.baseUrl + '/questions/' + id, question, this.httpOptions); + } + + deleteQuestion(id: number): Observable { + return this.http.delete(this.baseUrl + '/questions/' + id); + } } From abd41173c95827b0fa9cab051ec319d2177080b5 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Thu, 26 Sep 2024 16:33:47 +0800 Subject: [PATCH 091/188] Integrate API calls with UI --- frontend/src/app/questions/question.model.ts | 1 - .../src/app/questions/questions.component.ts | 283 +++++++++++------- 2 files changed, 177 insertions(+), 107 deletions(-) diff --git a/frontend/src/app/questions/question.model.ts b/frontend/src/app/questions/question.model.ts index 87e669b356..828b5ee2bd 100644 --- a/frontend/src/app/questions/question.model.ts +++ b/frontend/src/app/questions/question.model.ts @@ -11,7 +11,6 @@ export interface SingleQuestionResponse { } export interface Question { - _id?: string; id: number; description: string; difficulty: string; diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 04fd4530a9..c4963c91fb 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -11,7 +11,7 @@ import { DialogModule } from 'primeng/dialog'; import { MultiSelectModule } from 'primeng/multiselect'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { DropdownModule } from 'primeng/dropdown'; -import { Question } from './question.model'; +import { Question, SingleQuestionResponse, QuestionBody } from './question.model'; import { Column } from './column.model'; import { Topic } from './topic.model'; import { Difficulty } from './difficulty.model'; @@ -70,76 +70,16 @@ export class QuestionsComponent implements OnInit { ngOnInit() { // two way binding for forms is not working for some reason unless question is initialised with empty values - this.question = { - _id: '', - id: -1, - title: '', - topics: [], - description: '', - difficulty: '', - }; - - forkJoin({ - questions: this.questionService.getQuestions(), - topics: this.questionService.getTopics(), - }).subscribe({ - next: results => { - this.questions = results.questions.data || []; - this.topics = - results.topics.data?.map(topic => ({ - label: topic, - value: topic, - })) || []; - }, - error: (error: Error) => { - console.error(error); - this.questions = []; - this.topics = []; - this.messageService.add({ - severity: 'error', - summary: 'Error', - detail: 'Failed to load data. Please try again later.', - life: 3000, - }); - }, - complete: () => { - // TODO: add loading state for this - console.log('complete'); - }, - }); + this.initQuestion(); - this.difficulties = [ - { label: DifficultyLevels.EASY, value: DifficultyLevels.EASY }, - { label: DifficultyLevels.MEDIUM, value: DifficultyLevels.MEDIUM }, - { label: DifficultyLevels.HARD, value: DifficultyLevels.HARD }, - ]; + // fetch data from API call + this.handleInitData(); - this.questionFormGroup = new FormGroup({ - selectedTopics: new FormControl([]), - selectedDifficulty: new FormControl([]), - textTitle: new FormControl(''), - textDescription: new FormControl(''), - }); - - // Dropdown difficulty listener - this.questionFormGroup.get('selectedDifficulty')?.valueChanges.subscribe(v => { - this.question.difficulty = v; - }); - - // Multiselect topics listener - this.questionFormGroup.get('selectedTopics')?.valueChanges.subscribe(v => { - this.question.topics = v; - }); + this.initDifficulties(); - // text title listener - this.questionFormGroup.get('textTitle')?.valueChanges.subscribe(v => { - this.question.title = v; - }); + this.initFormGroup(); - // text description listener - this.questionFormGroup.get('textDescription')?.valueChanges.subscribe(v => { - this.question.description = v; - }); + this.initListeners(); } openNewQuestion() { @@ -155,14 +95,7 @@ export class QuestionsComponent implements OnInit { header: 'Delete Confirmation', icon: 'pi pi-exclamation-triangle', accept: () => { - this.questions = this.questions?.filter(val => !this.selectedQuestions?.includes(val)); - this.selectedQuestions = null; - this.messageService.add({ - severity: 'success', - summary: 'Successful', - detail: 'Question(s) Deleted', - life: 3000, - }); + this.handleDeleteQuestionResponse(); }, }); } @@ -181,36 +114,26 @@ export class QuestionsComponent implements OnInit { if (this.question.id) { // update - if (this.questions) { - this.questions[this.questions.findIndex(x => x.id == this.question.id)] = this.question; - } - - this.messageService.add({ - severity: 'success', - summary: 'Successful', - detail: 'Question has been updated successfully', - life: 3000, - }); + const { id, ...questionBody } = this.question; + this.handleEditQuestionResponse(id, questionBody); } else { // add - this.question.id = this.createId(); - - if (this.questions) { - this.questions = [...this.questions, this.question]; - } - - this.messageService.add({ - severity: 'success', - summary: 'Successful', - detail: 'New Question Added', - life: 3000, - }); + this.handleAddQuestionResponse(); } this.isDialogVisible = false; this.question = {} as Question; } + resetFormGroup() { + this.questionFormGroup.reset({ + selectedTopics: [], + selectedDifficulty: '', + textTitle: '', + textDescription: '', + }); + } + editQuestion(question: Question) { this.question.id = question.id; this.questionFormGroup.patchValue({ @@ -222,17 +145,165 @@ export class QuestionsComponent implements OnInit { this.isDialogVisible = true; } - // assuming newest question is always appended at the back - createId() { - return this.questions ? Number(this.questions.at(-1)?.id) + 1 : -1; + initListeners() { + // Dropdown difficulty listener + this.questionFormGroup.get('selectedDifficulty')?.valueChanges.subscribe(v => { + this.question.difficulty = v; + }); + + // Multiselect topics listener + this.questionFormGroup.get('selectedTopics')?.valueChanges.subscribe(v => { + this.question.topics = v; + }); + + // text title listener + this.questionFormGroup.get('textTitle')?.valueChanges.subscribe(v => { + this.question.title = v; + }); + + // text description listener + this.questionFormGroup.get('textDescription')?.valueChanges.subscribe(v => { + this.question.description = v; + }); } - resetFormGroup() { - this.questionFormGroup.reset({ - selectedTopics: [], - selectedDifficulty: '', - textTitle: '', - textDescription: '', + initFormGroup() { + this.questionFormGroup = new FormGroup({ + selectedTopics: new FormControl([]), + selectedDifficulty: new FormControl([]), + textTitle: new FormControl(''), + textDescription: new FormControl(''), + }); + } + + initDifficulties() { + this.difficulties = [ + { label: DifficultyLevels.EASY, value: DifficultyLevels.EASY }, + { label: DifficultyLevels.MEDIUM, value: DifficultyLevels.MEDIUM }, + { label: DifficultyLevels.HARD, value: DifficultyLevels.HARD }, + ]; + } + + initQuestion() { + this.question = { + id: -1, + title: '', + topics: [], + description: '', + difficulty: '', + }; + } + + handleAddQuestionResponse() { + this.questionService.addQuestion(this.question).subscribe({ + next: (response: SingleQuestionResponse) => { + if (this.questions) { + this.questions = [...this.questions, response.data]; + } + }, + error: (error: Error) => { + console.log(error); + this.messageService.add({ + severity: 'error', + summary: 'Error', + detail: 'Failed to add new question. Please try again later.', + life: 3000, + }); + }, + complete: () => { + this.messageService.add({ + severity: 'success', + summary: 'Successful', + detail: 'New Question Added', + life: 3000, + }); + }, + }); + } + + handleDeleteQuestionResponse() { + const deleteRequests = this.selectedQuestions?.map(q => this.questionService.deleteQuestion(q.id)); + + forkJoin(deleteRequests!).subscribe({ + next: () => { + // delete locally + this.questions = this.questions?.filter(val => !this.selectedQuestions?.includes(val)); + this.selectedQuestions = null; + }, + error: () => { + // Handle any errors from the forkJoin if necessary + this.messageService.add({ + severity: 'error', + summary: 'Error', + detail: 'Some questions could not be deleted. Please try again later.', + life: 3000, + }); + }, + complete: () => { + this.messageService.add({ + severity: 'success', + summary: 'Successful', + detail: 'Question(s) Deleted', + life: 3000, + }); + }, + }); + } + + handleEditQuestionResponse(id: number, question: QuestionBody) { + this.questionService.updateQuestion(id, question).subscribe({ + next: (response: SingleQuestionResponse) => { + this.questions[this.questions.findIndex(x => x.id == id)] = response.data; + }, + error: (error: Error) => { + console.log(error); + console.log(question); + this.messageService.add({ + severity: 'error', + summary: 'Error', + detail: 'Failed to edit question. Please try again later.', + life: 3000, + }); + }, + complete: () => { + this.messageService.add({ + severity: 'success', + summary: 'Successful', + detail: 'Question has been updated successfully', + life: 3000, + }); + }, + }); + } + + handleInitData() { + forkJoin({ + questions: this.questionService.getQuestions(), + topics: this.questionService.getTopics(), + }).subscribe({ + next: results => { + this.questions = results.questions.data || []; + this.topics = + results.topics.data?.map(topic => ({ + label: topic, + value: topic, + })) || []; + }, + error: (error: Error) => { + console.error(error); + this.questions = []; + this.topics = []; + this.messageService.add({ + severity: 'error', + summary: 'Error', + detail: 'Failed to load data. Please try again later.', + life: 3000, + }); + }, + complete: () => { + // TODO: add loading state for this + console.log('complete'); + }, }); } } From f2df8100fc326c5b1dfd362f573abebced2a9548 Mon Sep 17 00:00:00 2001 From: McNaBry Date: Thu, 26 Sep 2024 23:49:01 +0800 Subject: [PATCH 092/188] Add Login and Registration Pages (#32) * Add basic login page * Add basic registration page * Add loading button for login and registration page * Add error toast message for login and registration pages * Change wording for login and registration pages * Update routing and UI for login and registration pages * Update routing and UI for login and registration pages * Fix linting * Clean up CSS styles for login and registration pages * Redirect account route to login * Adjust body styles * Add default spec file for register component * Register: Ensure strong password * Register: Add email error message * Register: Validate password match * Register: Minor fix * Add validation for username * Clean up code and styles * Add restricted set of characters for password * Shift registration validators into account folder * Fix linting * Add special character requirement for password * Fix styles for password input in login page * Register: Clean error messages * Login: Fix toast sizing --------- Co-authored-by: Samuel Lim --- .../_validators/invalid-password.validator.ts | 12 +++ .../_validators/invalid-username.validator.ts | 12 +++ .../mismatch-password.validator.ts | 11 +++ .../_validators/weak-password.validator.ts | 13 +++ .../src/app/account/account.component.css | 22 +++++ frontend/src/app/account/account.component.ts | 24 +++++ frontend/src/app/account/account.module.ts | 20 ++++ .../src/app/account/layout.component.html | 4 + frontend/src/app/account/layout.component.ts | 11 +++ frontend/src/app/account/login.component.html | 36 +++++++ .../src/app/account/login.component.spec.ts | 22 +++++ frontend/src/app/account/login.component.ts | 46 +++++++++ .../src/app/account/register.component.html | 73 ++++++++++++++ .../app/account/register.component.spec.ts | 22 +++++ .../src/app/account/register.component.ts | 94 +++++++++++++++++++ frontend/src/app/app.routes.ts | 9 +- frontend/src/styles.css | 7 +- 17 files changed, 436 insertions(+), 2 deletions(-) create mode 100644 frontend/src/app/account/_validators/invalid-password.validator.ts create mode 100644 frontend/src/app/account/_validators/invalid-username.validator.ts create mode 100644 frontend/src/app/account/_validators/mismatch-password.validator.ts create mode 100644 frontend/src/app/account/_validators/weak-password.validator.ts create mode 100644 frontend/src/app/account/account.component.css create mode 100644 frontend/src/app/account/account.component.ts create mode 100644 frontend/src/app/account/account.module.ts create mode 100644 frontend/src/app/account/layout.component.html create mode 100644 frontend/src/app/account/layout.component.ts create mode 100644 frontend/src/app/account/login.component.html create mode 100644 frontend/src/app/account/login.component.spec.ts create mode 100644 frontend/src/app/account/login.component.ts create mode 100644 frontend/src/app/account/register.component.html create mode 100644 frontend/src/app/account/register.component.spec.ts create mode 100644 frontend/src/app/account/register.component.ts diff --git a/frontend/src/app/account/_validators/invalid-password.validator.ts b/frontend/src/app/account/_validators/invalid-password.validator.ts new file mode 100644 index 0000000000..dc2a686f6a --- /dev/null +++ b/frontend/src/app/account/_validators/invalid-password.validator.ts @@ -0,0 +1,12 @@ +import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; + +const PASSWORD_REGEX = /^[a-zA-Z0-9!"#$%&'()*+,-.:;<=>?@\\/\\[\]^_`{|}~]+$/; + +export const PASSWORD_INVALID = 'passwordInvalid'; + +export function invalidPasswordValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + const weak = !PASSWORD_REGEX.test(control.value); + return weak ? { [PASSWORD_INVALID]: true } : null; + }; +} diff --git a/frontend/src/app/account/_validators/invalid-username.validator.ts b/frontend/src/app/account/_validators/invalid-username.validator.ts new file mode 100644 index 0000000000..5d6ca4d488 --- /dev/null +++ b/frontend/src/app/account/_validators/invalid-username.validator.ts @@ -0,0 +1,12 @@ +import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; + +const USERNAME_REGEX = /^[a-zA-Z0-9._-]+$/; + +export const USERNAME_INVALID = 'usernameInvalid'; + +export function invalidUsernameValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + const invalid = !USERNAME_REGEX.test(control.value); + return invalid ? { [USERNAME_INVALID]: true } : null; + }; +} diff --git a/frontend/src/app/account/_validators/mismatch-password.validator.ts b/frontend/src/app/account/_validators/mismatch-password.validator.ts new file mode 100644 index 0000000000..95f45b2cb3 --- /dev/null +++ b/frontend/src/app/account/_validators/mismatch-password.validator.ts @@ -0,0 +1,11 @@ +import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; + +export const PASSWORD_MISMATCH = 'passwordMismatch'; + +export function mismatchPasswordValidator(firstPasswordField: string, secondPasswordField: string): ValidatorFn { + return (formGroup: AbstractControl): ValidationErrors | null => { + const password = formGroup.get(firstPasswordField)?.value; + const confirmPassword = formGroup.get(secondPasswordField)?.value; + return password !== confirmPassword ? { [PASSWORD_MISMATCH]: true } : null; + }; +} diff --git a/frontend/src/app/account/_validators/weak-password.validator.ts b/frontend/src/app/account/_validators/weak-password.validator.ts new file mode 100644 index 0000000000..8b5fd0847b --- /dev/null +++ b/frontend/src/app/account/_validators/weak-password.validator.ts @@ -0,0 +1,13 @@ +import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; + +export const STRONG_PASSWORD_REGEX = + /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.{8,})(?=.*[!"#$%&'()*+,-.:;<=>?@\\/\\[\]^_`{|}~])/; + +export const PASSWORD_WEAK = 'passwordWeak'; + +export function weakPasswordValidator(): ValidatorFn { + return (control: AbstractControl): ValidationErrors | null => { + const weak = !STRONG_PASSWORD_REGEX.test(control.value); + return weak ? { [PASSWORD_WEAK]: true } : null; + }; +} diff --git a/frontend/src/app/account/account.component.css b/frontend/src/app/account/account.component.css new file mode 100644 index 0000000000..516b236f7b --- /dev/null +++ b/frontend/src/app/account/account.component.css @@ -0,0 +1,22 @@ +.container { + padding: 2rem; + background-color: var(--surface-section); + border-radius: 0.75rem; + display: flex; + flex-direction: column; + align-items: center; +} + +.form-container { + display: flex; + flex-direction: column; + gap: 1rem; + width: 100%; +} + +.form-field { + display: flex; + flex-direction: column; + gap: 0.5rem; + width: 100%; +} \ No newline at end of file diff --git a/frontend/src/app/account/account.component.ts b/frontend/src/app/account/account.component.ts new file mode 100644 index 0000000000..b5f557f1eb --- /dev/null +++ b/frontend/src/app/account/account.component.ts @@ -0,0 +1,24 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { LoginComponent } from './login.component'; +import { RegisterComponent } from './register.component'; +import { LayoutComponent } from './layout.component'; + +const routes: Routes = [ + { + path: '', + component: LayoutComponent, + children: [ + { path: '', redirectTo: 'login', pathMatch: 'full' }, + { path: 'login', component: LoginComponent }, + { path: 'register', component: RegisterComponent }, + ], + }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class AccountRoutingModule {} diff --git a/frontend/src/app/account/account.module.ts b/frontend/src/app/account/account.module.ts new file mode 100644 index 0000000000..4155de4dfe --- /dev/null +++ b/frontend/src/app/account/account.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { ReactiveFormsModule } from '@angular/forms'; +import { CommonModule } from '@angular/common'; + +import { LoginComponent } from './login.component'; +import { RegisterComponent } from './register.component'; +import { LayoutComponent } from './layout.component'; +import { AccountRoutingModule } from './account.component'; + +@NgModule({ + imports: [ + CommonModule, + ReactiveFormsModule, + AccountRoutingModule, + LayoutComponent, + LoginComponent, + RegisterComponent, + ], +}) +export class AccountModule {} diff --git a/frontend/src/app/account/layout.component.html b/frontend/src/app/account/layout.component.html new file mode 100644 index 0000000000..21e10ec796 --- /dev/null +++ b/frontend/src/app/account/layout.component.html @@ -0,0 +1,4 @@ +
+

Welcome to PeerPrep

+ +
diff --git a/frontend/src/app/account/layout.component.ts b/frontend/src/app/account/layout.component.ts new file mode 100644 index 0000000000..2cf4d587d8 --- /dev/null +++ b/frontend/src/app/account/layout.component.ts @@ -0,0 +1,11 @@ +import { Component } from '@angular/core'; +import { Router, RouterModule } from '@angular/router'; + +@Component({ + standalone: true, + imports: [RouterModule], + templateUrl: './layout.component.html', +}) +export class LayoutComponent { + constructor(private router: Router) {} +} diff --git a/frontend/src/app/account/login.component.html b/frontend/src/app/account/login.component.html new file mode 100644 index 0000000000..dc32bfd2c8 --- /dev/null +++ b/frontend/src/app/account/login.component.html @@ -0,0 +1,36 @@ +
+

Log In

+ +
+
+ + +
+ +
+ + +
+ + + + +

+ Don't have an account? + Register +

+ + +
diff --git a/frontend/src/app/account/login.component.spec.ts b/frontend/src/app/account/login.component.spec.ts new file mode 100644 index 0000000000..6d2f15f702 --- /dev/null +++ b/frontend/src/app/account/login.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { LoginComponent } from './login.component'; + +describe('LoginComponent', () => { + let component: LoginComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [LoginComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(LoginComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/account/login.component.ts b/frontend/src/app/account/login.component.ts new file mode 100644 index 0000000000..41fee5af68 --- /dev/null +++ b/frontend/src/app/account/login.component.ts @@ -0,0 +1,46 @@ +import { Component } from '@angular/core'; +import { FormsModule } from '@angular/forms'; +import { RouterLink } from '@angular/router'; +import { SelectButtonModule } from 'primeng/selectbutton'; +import { InputTextModule } from 'primeng/inputtext'; +import { PasswordModule } from 'primeng/password'; +import { ButtonModule } from 'primeng/button'; +import { ToastModule } from 'primeng/toast'; +import { MessageService } from 'primeng/api'; + +@Component({ + selector: 'app-login', + standalone: true, + imports: [RouterLink, FormsModule, InputTextModule, ButtonModule, SelectButtonModule, PasswordModule, ToastModule], + providers: [MessageService], + templateUrl: './login.component.html', + styleUrl: './account.component.css', +}) +export class LoginComponent { + constructor(private messageService: MessageService) {} + + user = { + username: '', + password: '', + }; + + isProcessingLogin = false; + + showError() { + this.messageService.add({ severity: 'error', summary: 'Log In Error', detail: 'Missing Details' }); + } + + onSubmit() { + if (this.user.username && this.user.password) { + this.isProcessingLogin = true; + this.showError(); + // Simulate API request + setTimeout(() => { + this.isProcessingLogin = false; + console.log('Form Submitted', this.user); + }, 3000); + } else { + console.log('Invalid form'); + } + } +} diff --git a/frontend/src/app/account/register.component.html b/frontend/src/app/account/register.component.html new file mode 100644 index 0000000000..bac0c2e62b --- /dev/null +++ b/frontend/src/app/account/register.component.html @@ -0,0 +1,73 @@ +
+

Register

+ +
+
+ + + @if (isUsernameInvalid) { + + The provided username can only contain alphanumeric characters, dots, dashes, and underscores + + } +
+
+ + + @if (isEmailInvalid) { + The provided email is invalid + } +
+
+ + + + +

Your password must contain:

+
    +
  • At least one lowercase
  • +
  • At least one uppercase
  • +
  • At least one numeric
  • +
  • At least one special character
  • +
  • Minimum 8 characters
  • +
+
+
+ @if (isPasswordWeak) { + The provided password is too weak + } @else if (isPasswordInvalid) { + The provided password contains invalid characters + } +
+
+ + + @if (hasPasswordMismatch) { + The provided passwords do not match! + } +
+ + + +

+ Already have an account? + Log In +

+ + +
diff --git a/frontend/src/app/account/register.component.spec.ts b/frontend/src/app/account/register.component.spec.ts new file mode 100644 index 0000000000..bff2420114 --- /dev/null +++ b/frontend/src/app/account/register.component.spec.ts @@ -0,0 +1,22 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RegisterComponent } from './register.component'; + +describe('RegisterComponent', () => { + let component: RegisterComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [RegisterComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(RegisterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/frontend/src/app/account/register.component.ts b/frontend/src/app/account/register.component.ts new file mode 100644 index 0000000000..79d3496169 --- /dev/null +++ b/frontend/src/app/account/register.component.ts @@ -0,0 +1,94 @@ +import { Component } from '@angular/core'; +import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; +import { RouterLink } from '@angular/router'; +import { SelectButtonModule } from 'primeng/selectbutton'; +import { InputTextModule } from 'primeng/inputtext'; +import { PasswordModule } from 'primeng/password'; +import { ButtonModule } from 'primeng/button'; +import { DividerModule } from 'primeng/divider'; +import { ToastModule } from 'primeng/toast'; +import { MessageService } from 'primeng/api'; +import { PASSWORD_WEAK, STRONG_PASSWORD_REGEX, weakPasswordValidator } from './_validators/weak-password.validator'; +import { mismatchPasswordValidator, PASSWORD_MISMATCH } from './_validators/mismatch-password.validator'; +import { invalidUsernameValidator, USERNAME_INVALID } from './_validators/invalid-username.validator'; +import { invalidPasswordValidator, PASSWORD_INVALID } from './_validators/invalid-password.validator'; + +@Component({ + selector: 'app-register', + standalone: true, + imports: [ + RouterLink, + FormsModule, + InputTextModule, + ButtonModule, + SelectButtonModule, + PasswordModule, + DividerModule, + ToastModule, + ReactiveFormsModule, + ], + providers: [MessageService], + templateUrl: './register.component.html', + styleUrl: './account.component.css', +}) +export class RegisterComponent { + constructor(private messageService: MessageService) {} + + userForm: FormGroup = new FormGroup( + { + username: new FormControl('', [Validators.required, invalidUsernameValidator()]), + email: new FormControl('', [Validators.required, Validators.email]), + password: new FormControl('', [Validators.required, weakPasswordValidator(), invalidPasswordValidator()]), + confirmPassword: new FormControl('', [Validators.required]), + }, + { + validators: mismatchPasswordValidator('password', 'confirmPassword'), + }, + ); + isProcessingRegistration = false; + + strongPasswordRegex = STRONG_PASSWORD_REGEX.source; + + get isUsernameInvalid(): boolean { + const usernameControl = this.userForm.controls['username']; + return usernameControl.dirty && usernameControl.hasError(USERNAME_INVALID); + } + + get isEmailInvalid(): boolean { + const emailControl = this.userForm.controls['email']; + return emailControl.dirty && emailControl.invalid; + } + + get isPasswordWeak(): boolean { + const passwordControl = this.userForm.controls['password']; + return passwordControl.dirty && passwordControl.hasError(PASSWORD_WEAK); + } + + get isPasswordInvalid(): boolean { + const passwordControl = this.userForm.controls['password']; + return passwordControl.dirty && passwordControl.hasError(PASSWORD_INVALID); + } + + get hasPasswordMismatch(): boolean { + const passwordControl = this.userForm.controls['password']; + const confirmPasswordControl = this.userForm.controls['confirmPassword']; + return passwordControl.valid && confirmPasswordControl.dirty && this.userForm.hasError(PASSWORD_MISMATCH); + } + + showError() { + this.messageService.add({ severity: 'error', summary: 'Registration Error', detail: 'Missing Details' }); + } + + onSubmit() { + if (this.userForm.valid) { + this.isProcessingRegistration = true; + this.showError(); + setTimeout(() => { + this.isProcessingRegistration = false; + console.log('Form Submitted', this.userForm.value); + }, 3000); + } else { + console.log('Invalid form'); + } + } +} diff --git a/frontend/src/app/app.routes.ts b/frontend/src/app/app.routes.ts index dc39edb5f2..971b436069 100644 --- a/frontend/src/app/app.routes.ts +++ b/frontend/src/app/app.routes.ts @@ -1,3 +1,10 @@ import { Routes } from '@angular/router'; -export const routes: Routes = []; +const accountModule = () => import('./account/account.module').then(x => x.AccountModule); + +export const routes: Routes = [ + { + path: 'account', + loadChildren: accountModule, + }, +]; diff --git a/frontend/src/styles.css b/frontend/src/styles.css index 41c9cbca25..27aea93c1a 100644 --- a/frontend/src/styles.css +++ b/frontend/src/styles.css @@ -1,4 +1,9 @@ /* You can add global styles to this file, and also import other style files */ @import "primeng/resources/themes/aura-dark-blue/theme.css"; @import "primeng/resources/primeng.css"; -@import "primeflex/primeflex.scss"; \ No newline at end of file +@import "primeflex/primeflex.scss"; + +body { + height: 100vh; + margin: 0px; +} From 752876d3fc80b9e7fa84c7a9235873c11068adf6 Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Fri, 27 Sep 2024 08:15:05 +0800 Subject: [PATCH 093/188] Update README.md and Error Messages: -README: Update details on addQuestions -questionController.ts: Update handling error -helper.ts: Update handling error --- .idea/inspectionProfiles/Project_Default.xml | 6 ------ services/question/README.md | 2 +- .../src/controllers/questionController.ts | 17 ++++++++++------- services/question/src/utils/helpers.ts | 19 +++++-------------- 4 files changed, 16 insertions(+), 28 deletions(-) delete mode 100644 .idea/inspectionProfiles/Project_Default.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml deleted file mode 100644 index 03d9549ea8..0000000000 --- a/.idea/inspectionProfiles/Project_Default.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/services/question/README.md b/services/question/README.md index 4989a60f12..9a07c0da46 100644 --- a/services/question/README.md +++ b/services/question/README.md @@ -286,7 +286,7 @@ uniqueness. - **HTTP Method**: `POST` - **Endpoint**: `/questions` -### Parameters: +### Request Body: - `title` (Required) - The title of the question. - `description` (Required) - A description of the question. diff --git a/services/question/src/controllers/questionController.ts b/services/question/src/controllers/questionController.ts index e658e41c12..dff69e5d96 100644 --- a/services/question/src/controllers/questionController.ts +++ b/services/question/src/controllers/questionController.ts @@ -39,7 +39,7 @@ export const getQuestions = async (req: Request, res: Response) => { handleSuccess(res, 200, 'Questions retrieved successfully', questions); } catch (error) { console.error('Error in getQuestions:', error); - handleError(res, error, 'Failed to retrieve questions'); + handleError(res, 'Failed to retrieve questions'); } }; @@ -66,7 +66,7 @@ export const getQuestionById = async (req: Request, res: Response) => { handleSuccess(res, 200, 'Question with ID retrieved successfully', question); } catch (error) { console.error('Error in getQuestionById:', error); - handleError(res, error, 'Failed to retrieve question'); + handleError(res, 'Failed to retrieve question'); } }; @@ -116,7 +116,7 @@ export const getQuestionByParameters = async (req: Request, res: Response) => { handleSuccess(res, 200, 'Questions with Parameters retrieved successfully', questions); } catch (error) { console.error('Error in getQuestionByParameters:', error); - handleError(res, error, 'Failed to search for questions'); + handleError(res, 'Failed to search for questions'); } }; @@ -136,7 +136,7 @@ export const getTopics = async (req: Request, res: Response) => { handleSuccess(res, 200, 'Topics retrieved successfully', topics); } catch (error) { console.error('Error in getTopics:', error); - handleError(res, error, 'Failed to retrieve topics'); + handleError(res, 'Failed to retrieve topics'); } }; @@ -181,7 +181,8 @@ export const addQuestion = async (req: Request, res: Response) => { const savedQuestion = await newQuestion.save(); handleSuccess(res, 201, 'Question created successfully', savedQuestion); } catch (error) { - handleError(res, error, 'Failed to add question'); + console.log('Error in addQuestion:', error); + handleError(res, 'Failed to add question'); } }; @@ -210,7 +211,8 @@ export const updateQuestion = async (req: Request, res: Response) => { handleSuccess(res, 200, 'Question updated successfully', updatedQuestion); } catch (error) { - handleError(res, error, 'Failed to update question'); + console.log('Error in updateQuestion:', error); + handleError(res, 'Failed to update question'); } }; @@ -232,6 +234,7 @@ export const deleteQuestion = async (req: Request, res: Response) => { handleSuccess(res, 200, 'Question deleted successfully', deletedQuestion); } catch (error) { - handleError(res, error, 'Failed to delete question'); + console.log('Error in deleteQuestion:', error); + handleError(res, 'Failed to delete question'); } }; diff --git a/services/question/src/utils/helpers.ts b/services/question/src/utils/helpers.ts index 91863ea8fe..58b1dfcfce 100644 --- a/services/question/src/utils/helpers.ts +++ b/services/question/src/utils/helpers.ts @@ -1,52 +1,43 @@ import { Response } from 'express'; /** - * Handles errors and sends a 500 response with the error message. + * Handles unsuccessful response and sends a 500 response with the error message. * @param res - * @param error * @param message */ -export const handleError = (res: Response, error: unknown, message = 'An unexpected error occurred') => { - console.error(error); +export const handleError = (res: Response, message = 'An unexpected error occurred') => { res.status(500).json({ status: 'Error', message, - error, }); }; /** * Handles bad requests and sends a 400 response with a custom message. * @param res - * @param error * @param message */ -export const handleBadRequest = (res: Response, error: unknown, message = 'Bad Request') => { - console.error(error); +export const handleBadRequest = (res: Response, message = 'Bad Request') => { res.status(400).json({ status: 'Error', message, - error, }); }; /** * Handles not found errors and sends a 404 response with a custom message. * @param res - * @param error * @param message */ -export const handleNotFound = (res: Response, error: unknown, message = 'Not Found') => { - console.log(error); +export const handleNotFound = (res: Response, message = 'Not Found') => { res.status(404).json({ status: 'Error', message, - error, }); }; /** - * Handles successful responses and sends a 200 response with the provided data. + * Handles successful responses and sends a 200 response message with the provided data. * @param res * @param data * @param message From 5f376cb43f4f58642a84f856221a836a7c58163f Mon Sep 17 00:00:00 2001 From: KhoonSun47 Date: Fri, 27 Sep 2024 08:20:40 +0800 Subject: [PATCH 094/188] Remove .idea from tracking and update .gitignore --- .idea/.gitignore | 8 -------- .idea/cs3219-ay2425s1-project-g03.iml | 9 --------- .idea/misc.xml | 6 ------ .idea/modules.xml | 8 -------- .idea/vcs.xml | 6 ------ 5 files changed, 37 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/cs3219-ay2425s1-project-g03.iml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 13566b81b0..0000000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml -# Editor-based HTTP Client requests -/httpRequests/ -# Datasource local storage ignored files -/dataSources/ -/dataSources.local.xml diff --git a/.idea/cs3219-ay2425s1-project-g03.iml b/.idea/cs3219-ay2425s1-project-g03.iml deleted file mode 100644 index d6ebd48059..0000000000 --- a/.idea/cs3219-ay2425s1-project-g03.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index e0844bc7be..0000000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 09dd47d322..0000000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1ddfbb..0000000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file From ce558d0d2fbc0a13950054d20316cc8d60720ac1 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 27 Sep 2024 09:05:43 +0800 Subject: [PATCH 095/188] Update error message handling --- frontend/src/app/questions/question.service.ts | 14 +++++++++----- frontend/src/app/questions/questions.component.ts | 13 +++++++------ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/frontend/src/app/questions/question.service.ts b/frontend/src/app/questions/question.service.ts index 8cb3e665ad..53d0431502 100644 --- a/frontend/src/app/questions/question.service.ts +++ b/frontend/src/app/questions/question.service.ts @@ -1,7 +1,7 @@ -import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; +import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { API_CONFIG } from '../api.config'; -import { Observable } from 'rxjs'; +import { catchError, Observable, throwError } from 'rxjs'; import { SingleQuestionResponse, QuestionResponse, QuestionBody } from './question.model'; import { TopicResponse } from './topic.model'; @@ -64,14 +64,18 @@ export class QuestionService { } addQuestion(question: QuestionBody): Observable { - return this.http.post(this.baseUrl + '/questions', question, this.httpOptions); + return this.http.post(this.baseUrl + '/questions', question, this.httpOptions).pipe(catchError(this.handleError)); } updateQuestion(id: number, question: QuestionBody): Observable { - return this.http.put(this.baseUrl + '/questions/' + id, question, this.httpOptions); + return this.http.put(this.baseUrl + '/questions/' + id, question, this.httpOptions).pipe(catchError(this.handleError)); } deleteQuestion(id: number): Observable { - return this.http.delete(this.baseUrl + '/questions/' + id); + return this.http.delete(this.baseUrl + '/questions/' + id).pipe(catchError(this.handleError)); + } + + handleError(error: HttpErrorResponse) { + return throwError(error); } } diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index c4963c91fb..6f0d0b2c6a 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -18,6 +18,7 @@ import { Difficulty } from './difficulty.model'; import { DifficultyLevels } from './difficulty-levels.enum'; import { QuestionService } from './question.service'; import { forkJoin } from 'rxjs'; +import { HttpErrorResponse } from '@angular/common/http'; @Component({ selector: 'app-questions', @@ -201,12 +202,12 @@ export class QuestionsComponent implements OnInit { this.questions = [...this.questions, response.data]; } }, - error: (error: Error) => { + error: (error: HttpErrorResponse) => { console.log(error); this.messageService.add({ severity: 'error', summary: 'Error', - detail: 'Failed to add new question. Please try again later.', + detail: 'Failed to add new question. ' + error.error.message, life: 3000, }); }, @@ -230,12 +231,12 @@ export class QuestionsComponent implements OnInit { this.questions = this.questions?.filter(val => !this.selectedQuestions?.includes(val)); this.selectedQuestions = null; }, - error: () => { + error: (error: HttpErrorResponse) => { // Handle any errors from the forkJoin if necessary this.messageService.add({ severity: 'error', summary: 'Error', - detail: 'Some questions could not be deleted. Please try again later.', + detail: 'Some questions could not be deleted. ' + error.error.message, life: 3000, }); }, @@ -255,13 +256,13 @@ export class QuestionsComponent implements OnInit { next: (response: SingleQuestionResponse) => { this.questions[this.questions.findIndex(x => x.id == id)] = response.data; }, - error: (error: Error) => { + error: (error: HttpErrorResponse) => { console.log(error); console.log(question); this.messageService.add({ severity: 'error', summary: 'Error', - detail: 'Failed to edit question. Please try again later.', + detail: error.error.message, life: 3000, }); }, From 7a3313c5ddbdc21c77ce25035f2c5171f50bc02d Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 27 Sep 2024 09:24:22 +0800 Subject: [PATCH 096/188] Add loading spinner when fetching all data --- .../src/app/questions/question.service.ts | 12 +- .../app/questions/questions.component.html | 138 +++++++++--------- .../src/app/questions/questions.component.ts | 7 +- 3 files changed, 87 insertions(+), 70 deletions(-) diff --git a/frontend/src/app/questions/question.service.ts b/frontend/src/app/questions/question.service.ts index 53d0431502..86aaa1e448 100644 --- a/frontend/src/app/questions/question.service.ts +++ b/frontend/src/app/questions/question.service.ts @@ -64,15 +64,21 @@ export class QuestionService { } addQuestion(question: QuestionBody): Observable { - return this.http.post(this.baseUrl + '/questions', question, this.httpOptions).pipe(catchError(this.handleError)); + return this.http + .post(this.baseUrl + '/questions', question, this.httpOptions) + .pipe(catchError(this.handleError)); } updateQuestion(id: number, question: QuestionBody): Observable { - return this.http.put(this.baseUrl + '/questions/' + id, question, this.httpOptions).pipe(catchError(this.handleError)); + return this.http + .put(this.baseUrl + '/questions/' + id, question, this.httpOptions) + .pipe(catchError(this.handleError)); } deleteQuestion(id: number): Observable { - return this.http.delete(this.baseUrl + '/questions/' + id).pipe(catchError(this.handleError)); + return this.http + .delete(this.baseUrl + '/questions/' + id) + .pipe(catchError(this.handleError)); } handleError(error: HttpErrorResponse) { diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index cac263cc3d..933af83629 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -1,71 +1,79 @@
+ - -
- - -
-
- - -
-

Manage Questions

+ + +
+ +
- - - - - Id - Title - Description - Topics - Difficulty - - - - - - - - - {{ question.id }} - {{ question.title }} - {{ question.description }} - {{ question.topics.join(', ') }} - {{ question.difficulty }} - - - - - - - +
+ + +
+

Manage Questions

+
+
+ + + + Id + Title + Description + Topics + Difficulty + + + + + + + + + {{ question.id }} + {{ question.title }} + {{ question.description }} + {{ question.topics.join(', ') }} + {{ question.difficulty }} + + + + + +
+
diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 6f0d0b2c6a..707467ee32 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -11,6 +11,7 @@ import { DialogModule } from 'primeng/dialog'; import { MultiSelectModule } from 'primeng/multiselect'; import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; import { DropdownModule } from 'primeng/dropdown'; +import { ProgressSpinnerModule } from 'primeng/progressspinner'; import { Question, SingleQuestionResponse, QuestionBody } from './question.model'; import { Column } from './column.model'; import { Topic } from './topic.model'; @@ -37,12 +38,15 @@ import { HttpErrorResponse } from '@angular/common/http'; ReactiveFormsModule, MultiSelectModule, DropdownModule, + ProgressSpinnerModule, ], providers: [QuestionService, ConfirmationService, MessageService], templateUrl: './questions.component.html', styleUrl: './questions.component.css', }) export class QuestionsComponent implements OnInit { + loading = true; + questions: Question[] = []; topics!: Topic[]; @@ -302,8 +306,7 @@ export class QuestionsComponent implements OnInit { }); }, complete: () => { - // TODO: add loading state for this - console.log('complete'); + this.loading = false; }, }); } From dc4279bf359d49a7d669b2601c148ed51422994a Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 27 Sep 2024 10:04:16 +0800 Subject: [PATCH 097/188] Update loading spinner style --- frontend/src/app/questions/questions.component.html | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index 933af83629..55ca423dde 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -4,7 +4,6 @@ *ngIf="loading" styleClass="w-4rem h-4rem" strokeWidth="8" - fill="var(--surface-ground)" animationDuration=".5s" /> From 1ddb1f9ec7e9e2dd4fe1ce20c1ead091f5b03dda Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 27 Sep 2024 10:12:28 +0800 Subject: [PATCH 098/188] Remove locally stored questions --- frontend/src/app/questions/questions.json | 142 ---------------------- 1 file changed, 142 deletions(-) delete mode 100644 frontend/src/app/questions/questions.json diff --git a/frontend/src/app/questions/questions.json b/frontend/src/app/questions/questions.json deleted file mode 100644 index 881e421195..0000000000 --- a/frontend/src/app/questions/questions.json +++ /dev/null @@ -1,142 +0,0 @@ -[ - { - "id": 1, - "title": "Reverse a String", - "description": "Write a function that reverses a string. The input string is given as an array of characters s.\n\nYou must do this by modifying the input array in-place with O(1) extra memory.\n\n\nExample 1:\n\nInput: s = [\"h\",\"e\",\"l\",\"l\",\"o\"]\nOutput: [\"o\",\"l\",\"l\",\"e\",\"h\"]\n\nExample 2:\nInput: s = [\"H\",\"a\",\"n\",\"n\",\"a\",\"h\"]\nOutput: [\"h\",\"a\",\"n\",\"n\",\"a\",\"H\"]\n\nConstraints:\n1 <= s.length <= 105 s[i] is a printable ascii character.", - "topics": ["Strings", "Algorithms"], - "difficulty": "Easy" - }, - { - "id": 2, - "title": "Linked List Cycle Detection", - "description": "Implement a function to detect if a linked list contains a cycle.", - "topics": ["Data Structures", "Algorithms"], - "difficulty": "Easy" - }, - { - "id": 3, - "title": "Roman to Integer", - "description": "Given a roman numeral, convert it to an integer.", - "topics": ["Algorithms"], - "difficulty": "Easy" - }, - { - "id": 4, - "title": "Add Binary", - "description": "Given two binary strings a and b, return their sum as a binary string.", - "topics": ["Bit Manipulation", "Algorithms"], - "difficulty": "Easy" - }, - { - "id": 5, - "title": "Fibonacci Number", - "description": "The Fibonacci numbers, commonly denoted F(n) form a sequence, called the Fibonacci sequence, such that each number is the sum of the two preceding ones, starting from 0 and 1. That is,\n\nF(0) = 0, F(1) = 1 F(n) = F(n - 1) + F(n - 2), for n > 1.\n\nGiven n, calculate F(n).", - "topics": ["Recursion", "Algorithms"], - "difficulty": "Easy" - }, - { - "id": 6, - "title": "Implement Stack using Queues", - "description": "Implement a last-in first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (push, top, pop, and empty).", - "topics": ["Data Structures"], - "difficulty": "Easy" - }, - { - "id": 7, - "title": "Combine Two Tables", - "description": "Given table Person with the following columns:\n1. personId (int)\n2. lastName (varchar)\n3. firstName (varchar)\npersonId is the primary key.\n\nAnd table Address with the following columns:\n1. addressId (int)\n2. personId (int)\n3. city (varchar)\n4. state (varchar)\naddressId is the primary key.\n\nWrite a solution to report the first name, last name, city, and state of each person in the Person table. If the address of a personId is not present in the Address table, report null instead. Return the result table in any order.", - "topics": ["Databases"], - "difficulty": "Easy" - }, - { - "id": 8, - "title": "Repeated DNA Sequences", - "description": "The DNA sequence is composed of a series of nucleotides abbreviated as 'A', 'C', 'G', and 'T'.\n\nFor example, \"ACGAATTCCG\" is a DNA sequence. When studying DNA, it is useful to identify repeated sequences within the DNA.\n\nGiven a string s that represents a DNA sequence, return all the 10-letter-long sequences (substrings) that occur more than once in a DNA molecule. You may return the answer in any order.", - "topics": ["Algorithms", "Bit Manipulation"], - "difficulty": "Medium" - }, - { - "id": 9, - "title": "Course Schedule", - "description": "There are a total of numCourses courses you have to take, labeled from 0 to numCourses - 1. You are given an array prerequisites where prerequisites[i] = [ai, bi] indicates that you must take course bi first if you want to take course ai.\n\nFor example, the pair [0, 1], indicates that to take course 0 you have to first take course 1. Return true if you can finish all courses. Otherwise, return false.", - "topics": ["Data Structures", "Algorithms"], - "difficulty": "Medium" - }, - { - "id": 10, - "title": "LRU Cache Design", - "description": "Design and implement an LRU (Least Recently Used) cache.", - "topics": ["Data Structures"], - "difficulty": "Medium" - }, - { - "id": 11, - "title": "Longest Common Subsequence", - "description": "Given two strings text1 and text2, return the length of their longest common subsequence. If there is no common subsequence, return 0.\n\nA subsequence of a string is a new string generated from the original string with some characters (can be none) deleted without changing the relative order of the remaining characters.\n\nFor example, \"ace\" is a subsequence of \"abcde\". A common subsequence of two strings is a subsequence that is common to both strings.", - "topics": ["Strings", "Algorithms"], - "difficulty": "Medium" - }, - { - "id": 12, - "title": "Rotate Image", - "description": "You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).", - "topics": ["Arrays", "Algorithms"], - "difficulty": "Medium" - }, - { - "id": 13, - "title": "Airplane Seat Assignment Probability", - "description": "n passengers board an airplane with exactly n seats. The first passenger has lost the ticket and picks a seat randomly. But after that, the rest of the passengers will:\nTake their own seat if it is still available, and Pick other seats randomly when they find their seat occupied\n\nReturn the probability that the nth person gets his own seat.", - "topics": ["Brainteaser"], - "difficulty": "Medium" - }, - { - "id": 14, - "title": "Validate Binary Search Tree", - "description": "Given the root of a binary tree, determine if it is a valid binary search tree (BST).", - "topics": ["Data Structures", "Algorithms"], - "difficulty": "Medium" - }, - { - "id": 15, - "title": "Sliding Window Maximum", - "description": "You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.\n\nReturn the max sliding window.", - "topics": ["Arrays", "Algorithms"], - "difficulty": "Hard" - }, - { - "id": 16, - "title": "N-Queen Problem", - "description": "The n-queens puzzle is the problem of placing n queens on an n x n chessboard such that no two queens attack each other.\n\nGiven an integer n, return all distinct solutions to the n queens puzzle. You may return the answer in any order.\n\nEach solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space, respectively.", - "topics": ["Algorithms"], - "difficulty": "Hard" - }, - { - "id": 17, - "title": "Serialize and Deserialize a Binary Tree", - "description": "Serialization is the process of converting a data structure or object into a sequence of bits so that it can be stored in a file or memory buffer, or transmitted across a network connection link to be reconstructed later in the same or another computer environment.\n\nDesign an algorithm to serialize and deserialize a binary tree. There is no restriction on how your serialization/deserializ ation algorithm should work. You just need to ensure that a binary tree can be serialized to a string and this string can be deserialized to the original tree structure.", - "topics": ["Data Structures", "Algorithms"], - "difficulty": "Hard" - }, - { - "id": 18, - "title": "Wildcard Matching", - "description": "Given an input string (s) and a pattern (p), implement wildcard pattern matching with support for '?' and '*' where:\n\n'?' Matches any single character. '*' Matches any sequence of characters (including the empty sequence).\nThe matching should cover the entire input string (not partial).", - "topics": ["Strings", "Algorithms"], - "difficulty": "Hard" - }, - { - "id": 19, - "title": "Chalkboard XOR Game", - "description": "You are given an array of integers nums represents the numbers written on a chalkboard.\n\nAlice and Bob take turns erasing exactly one number from the chalkboard, with Alice starting first. If erasing a number causes the bitwise XOR of all the elements of the chalkboard to become 0, then that player loses. The bitwise XOR of one element is that element itself, and the bitwise XOR of no elements is 0.\n\nAlso, if any player starts their turn with the bitwise XOR of all the elements of the chalkboard equal to 0, then that player wins.\n\nReturn true if and only if Alice wins the game, assuming both players play optimally.", - "topics": ["Brainteaser"], - "difficulty": "Hard" - }, - { - "id": 20, - "title": "Trips and Users", - "description": "Given table Trips:\n1. id (int)\n2. client_id (int)\n3. driver_id (int)\n4. city_id (int)\n5. status (enum)\n6. request_at(da te)\nid is the primary key.\nThe table holds all taxi trips. Each trip has a unique id, while client_id and driver_id are foreign keys to the users_id at the Users table. Status is an ENUM (category) type of ('completed', 'cancelled_by_driver', 'cancelled_by_client').\n\nAnd table Users:\n1. users_id (int)\n2. banned (enum)\n3. role (enum)\nusers_id is the primary key (column with unique values) for this table. The table holds all users. Each user has a unique users_id, and role is an ENUM type of ('client', 'driver', 'partner'). banned is an ENUM (category) type of ('Yes', 'No'). The cancellation rate is computed by dividing the number of canceled (by client or driver) requests with unbanned users by the total number of requests with unbanned users on that day.\n\nWrite a solution to find the cancellation rate of requests with unbanned users (both client and driver must not be banned) each day between \"2013-10-01\" and \"2013-10-03\". Round Cancellation Rate to two decimal points.\n\nReturn the result table in any order.", - "topics": ["Databases"], - "difficulty": "Hard" - } -] \ No newline at end of file From b84cb20a3cca6a3c05869f0ff6d2830ef7d467c1 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 27 Sep 2024 10:55:43 +0800 Subject: [PATCH 099/188] Update id column to be sortable --- .../src/app/questions/questions.component.css | 7 +++++++ .../src/app/questions/questions.component.html | 18 ++++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/frontend/src/app/questions/questions.component.css b/frontend/src/app/questions/questions.component.css index e69de29bb2..b6e58b6a47 100644 --- a/frontend/src/app/questions/questions.component.css +++ b/frontend/src/app/questions/questions.component.css @@ -0,0 +1,7 @@ +.p-sortable-column { + background-color: #181818 !important; +} + +.p-sortable-column:not(.p-highlight):hover { + background-color: #181818 !important; +} \ No newline at end of file diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index 55ca423dde..617e7ab6ae 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -25,11 +25,13 @@
Manage Questions
- - Id - Title - Description - Topics - Difficulty - + + Id + Title + Description + Topics + Difficulty + From efc6e147461ba4bb724fa1faa1c6e169b071560a Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 27 Sep 2024 11:00:39 +0800 Subject: [PATCH 100/188] Fix topics field validation --- frontend/src/app/questions/questions.component.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 707467ee32..57f4ac39c7 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -111,6 +111,7 @@ export class QuestionsComponent implements OnInit { if ( !this.question.title?.trim() || !this.question.topics || + this.question.topics?.length == 0 || !this.question.difficulty?.trim() || !this.question.description?.trim() ) { From 9e8fc423b40353f8fe4bba1f2e23d70af9c21358 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 27 Sep 2024 13:48:15 +0800 Subject: [PATCH 101/188] Update form errors to use the new Angular @if syntax --- .../app/questions/questions.component.html | 40 +++++++++---------- .../src/app/questions/questions.component.ts | 30 +++++++++++--- 2 files changed, 44 insertions(+), 26 deletions(-) diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index 617e7ab6ae..751a1f7db9 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -86,15 +86,15 @@

Manage Questions

- - Title is required. - + @if (isTitleInvalid) { + Title is required. + }
@@ -107,11 +107,9 @@

Manage Questions

optionLabel="label" optionValue="value" placeholder="Select Topics" /> - - Topic is required. - + @if (isTopicsInvalid) { + Topic(s) is required. + }
@@ -123,34 +121,34 @@

Manage Questions

optionLabel="label" optionValue="value" placeholder="Select Difficulty" /> - - Difficulty is required. - + @if (isDifficultyInvalid) { + Difficulty is required. + }
- - Description is required. - + @if (isDescriptionInvalid) { + Description is required. + }
- +
diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 57f4ac39c7..4ac750f14a 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit } from '@angular/core'; import { TableModule } from 'primeng/table'; -import { FormsModule } from '@angular/forms'; +import { FormsModule, Validators } from '@angular/forms'; import { ToastModule } from 'primeng/toast'; import { ToolbarModule } from 'primeng/toolbar'; import { ButtonModule } from 'primeng/button'; @@ -87,6 +87,26 @@ export class QuestionsComponent implements OnInit { this.initListeners(); } + get isTitleInvalid(): boolean { + const titleControl = this.questionFormGroup.controls['title']; + return titleControl.dirty && titleControl.invalid; + } + + get isDescriptionInvalid(): boolean { + const descriptionControl = this.questionFormGroup.controls['description']; + return descriptionControl.dirty && descriptionControl.invalid; + } + + get isDifficultyInvalid(): boolean { + const difficultyControl = this.questionFormGroup.controls['selectedDifficulty']; + return difficultyControl.dirty && difficultyControl.invalid; + } + + get isTopicsInvalid(): boolean { + const topicsControl = this.questionFormGroup.controls['selectedTopics']; + return topicsControl.dirty && topicsControl.invalid; + } + openNewQuestion() { this.resetFormGroup(); this.question = {} as Question; @@ -175,10 +195,10 @@ export class QuestionsComponent implements OnInit { initFormGroup() { this.questionFormGroup = new FormGroup({ - selectedTopics: new FormControl([]), - selectedDifficulty: new FormControl([]), - textTitle: new FormControl(''), - textDescription: new FormControl(''), + selectedTopics: new FormControl([], [Validators.required]), + selectedDifficulty: new FormControl([], [Validators.required]), + title: new FormControl('', [Validators.required]), + description: new FormControl('', [Validators.required]), }); } From 60464d3f1fdf237e017e6c7b60e6cedbcfa5eda6 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 27 Sep 2024 14:37:57 +0800 Subject: [PATCH 102/188] Update to use formGroup.value instead of field listeners --- .../app/questions/questions.component.html | 4 +- .../src/app/questions/questions.component.ts | 70 +++++-------------- 2 files changed, 21 insertions(+), 53 deletions(-) diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index 751a1f7db9..b385ad02f5 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -103,7 +103,7 @@

Manage Questions

required="true" [style]="{ width: '100%' }" [options]="topics" - formControlName="selectedTopics" + formControlName="topics" optionLabel="label" optionValue="value" placeholder="Select Topics" /> @@ -117,7 +117,7 @@

Manage Questions

[required]="true" [style]="{ width: '100%' }" [options]="difficulties" - formControlName="selectedDifficulty" + formControlName="difficulty" optionLabel="label" optionValue="value" placeholder="Select Difficulty" /> diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 4ac750f14a..28fd1a5932 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -55,7 +55,7 @@ export class QuestionsComponent implements OnInit { questionFormGroup!: FormGroup; - selectedDifficulty!: string; + difficulty!: string; question!: Question; @@ -84,7 +84,7 @@ export class QuestionsComponent implements OnInit { this.initFormGroup(); - this.initListeners(); + // this.initListeners(); } get isTitleInvalid(): boolean { @@ -98,12 +98,12 @@ export class QuestionsComponent implements OnInit { } get isDifficultyInvalid(): boolean { - const difficultyControl = this.questionFormGroup.controls['selectedDifficulty']; + const difficultyControl = this.questionFormGroup.controls['difficulty']; return difficultyControl.dirty && difficultyControl.invalid; } get isTopicsInvalid(): boolean { - const topicsControl = this.questionFormGroup.controls['selectedTopics']; + const topicsControl = this.questionFormGroup.controls['topics']; return topicsControl.dirty && topicsControl.invalid; } @@ -128,20 +128,13 @@ export class QuestionsComponent implements OnInit { saveQuestion() { this.submitted = true; - if ( - !this.question.title?.trim() || - !this.question.topics || - this.question.topics?.length == 0 || - !this.question.difficulty?.trim() || - !this.question.description?.trim() - ) { + if (!this.questionFormGroup.valid) { return; } if (this.question.id) { // update - const { id, ...questionBody } = this.question; - this.handleEditQuestionResponse(id, questionBody); + this.handleEditQuestionResponse(this.question.id, this.questionFormGroup.value); } else { // add this.handleAddQuestionResponse(); @@ -153,50 +146,28 @@ export class QuestionsComponent implements OnInit { resetFormGroup() { this.questionFormGroup.reset({ - selectedTopics: [], - selectedDifficulty: '', - textTitle: '', - textDescription: '', + topics: [], + difficulty: '', + title: '', + description: '', }); } editQuestion(question: Question) { this.question.id = question.id; this.questionFormGroup.patchValue({ - textTitle: question.title, - textDescription: question.description, - selectedTopics: question.topics, - selectedDifficulty: question.difficulty, + title: question.title, + description: question.description, + topics: question.topics, + difficulty: question.difficulty, }); this.isDialogVisible = true; } - initListeners() { - // Dropdown difficulty listener - this.questionFormGroup.get('selectedDifficulty')?.valueChanges.subscribe(v => { - this.question.difficulty = v; - }); - - // Multiselect topics listener - this.questionFormGroup.get('selectedTopics')?.valueChanges.subscribe(v => { - this.question.topics = v; - }); - - // text title listener - this.questionFormGroup.get('textTitle')?.valueChanges.subscribe(v => { - this.question.title = v; - }); - - // text description listener - this.questionFormGroup.get('textDescription')?.valueChanges.subscribe(v => { - this.question.description = v; - }); - } - initFormGroup() { this.questionFormGroup = new FormGroup({ - selectedTopics: new FormControl([], [Validators.required]), - selectedDifficulty: new FormControl([], [Validators.required]), + topics: new FormControl([], [Validators.required]), + difficulty: new FormControl([], [Validators.required]), title: new FormControl('', [Validators.required]), description: new FormControl('', [Validators.required]), }); @@ -221,14 +192,13 @@ export class QuestionsComponent implements OnInit { } handleAddQuestionResponse() { - this.questionService.addQuestion(this.question).subscribe({ + this.questionService.addQuestion(this.questionFormGroup.value).subscribe({ next: (response: SingleQuestionResponse) => { if (this.questions) { this.questions = [...this.questions, response.data]; } }, error: (error: HttpErrorResponse) => { - console.log(error); this.messageService.add({ severity: 'error', summary: 'Error', @@ -280,10 +250,9 @@ export class QuestionsComponent implements OnInit { this.questionService.updateQuestion(id, question).subscribe({ next: (response: SingleQuestionResponse) => { this.questions[this.questions.findIndex(x => x.id == id)] = response.data; + this.questions = [...this.questions]; }, error: (error: HttpErrorResponse) => { - console.log(error); - console.log(question); this.messageService.add({ severity: 'error', summary: 'Error', @@ -315,8 +284,7 @@ export class QuestionsComponent implements OnInit { value: topic, })) || []; }, - error: (error: Error) => { - console.error(error); + error: () => { this.questions = []; this.topics = []; this.messageService.add({ From 129e4b0fc6f25768ffd4be3489c1556d2db995ae Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 27 Sep 2024 14:40:51 +0800 Subject: [PATCH 103/188] Fix dialog header text --- frontend/src/app/questions/questions.component.html | 2 +- frontend/src/app/questions/questions.component.ts | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/questions/questions.component.html b/frontend/src/app/questions/questions.component.html index b385ad02f5..6c9ab4761a 100644 --- a/frontend/src/app/questions/questions.component.html +++ b/frontend/src/app/questions/questions.component.html @@ -78,7 +78,7 @@

Manage Questions

- Create new question + {{ dialogHeader }}
diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 28fd1a5932..427dae1863 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -67,6 +67,8 @@ export class QuestionsComponent implements OnInit { cols: Column[] = []; + dialogHeader = ''; + constructor( private questionService: QuestionService, private messageService: MessageService, @@ -83,8 +85,6 @@ export class QuestionsComponent implements OnInit { this.initDifficulties(); this.initFormGroup(); - - // this.initListeners(); } get isTitleInvalid(): boolean { @@ -108,6 +108,7 @@ export class QuestionsComponent implements OnInit { } openNewQuestion() { + this.dialogHeader = 'Create new question'; this.resetFormGroup(); this.question = {} as Question; this.submitted = false; @@ -154,6 +155,7 @@ export class QuestionsComponent implements OnInit { } editQuestion(question: Question) { + this.dialogHeader = 'Edit Question'; this.question.id = question.id; this.questionFormGroup.patchValue({ title: question.title, From 8ce20c236955360030cf237e021a90d68d32ea5b Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 27 Sep 2024 14:50:29 +0800 Subject: [PATCH 104/188] Move question.service.ts to shared services folder --- .../{app/questions => _services}/question.service.spec.ts | 0 .../src/{app/questions => _services}/question.service.ts | 6 +++--- frontend/src/app/questions/questions.component.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename frontend/src/{app/questions => _services}/question.service.spec.ts (100%) rename frontend/src/{app/questions => _services}/question.service.ts (94%) diff --git a/frontend/src/app/questions/question.service.spec.ts b/frontend/src/_services/question.service.spec.ts similarity index 100% rename from frontend/src/app/questions/question.service.spec.ts rename to frontend/src/_services/question.service.spec.ts diff --git a/frontend/src/app/questions/question.service.ts b/frontend/src/_services/question.service.ts similarity index 94% rename from frontend/src/app/questions/question.service.ts rename to frontend/src/_services/question.service.ts index 86aaa1e448..5760b77987 100644 --- a/frontend/src/app/questions/question.service.ts +++ b/frontend/src/_services/question.service.ts @@ -1,9 +1,9 @@ import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { API_CONFIG } from '../api.config'; +import { API_CONFIG } from '../app/api.config'; import { catchError, Observable, throwError } from 'rxjs'; -import { SingleQuestionResponse, QuestionResponse, QuestionBody } from './question.model'; -import { TopicResponse } from './topic.model'; +import { SingleQuestionResponse, QuestionResponse, QuestionBody } from '../app/questions/question.model'; +import { TopicResponse } from '../app/questions/topic.model'; @Injectable({ providedIn: 'root', diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 427dae1863..113f9770fb 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -17,7 +17,7 @@ import { Column } from './column.model'; import { Topic } from './topic.model'; import { Difficulty } from './difficulty.model'; import { DifficultyLevels } from './difficulty-levels.enum'; -import { QuestionService } from './question.service'; +import { QuestionService } from '../../_services/question.service'; import { forkJoin } from 'rxjs'; import { HttpErrorResponse } from '@angular/common/http'; From b33dc0edda11a03fd278514b3da0473801b02fec Mon Sep 17 00:00:00 2001 From: samuelim01 Date: Fri, 27 Sep 2024 20:23:30 +0800 Subject: [PATCH 105/188] Copy user service https://github.com/CS3219-AY2425S1/PeerPrep-UserService --- user-service/.env.sample | 9 + user-service/GuideAssets/AddIPAddress.png | Bin 0 -> 138008 bytes user-service/GuideAssets/ConnectCluster.png | Bin 0 -> 54835 bytes user-service/GuideAssets/ConnectionString.png | Bin 0 -> 122214 bytes user-service/GuideAssets/Creation.png | Bin 0 -> 52188 bytes user-service/GuideAssets/DriverSelection.png | Bin 0 -> 106224 bytes user-service/GuideAssets/IPWhitelisting.png | Bin 0 -> 59576 bytes user-service/GuideAssets/Network.png | Bin 0 -> 411358 bytes user-service/GuideAssets/Security.png | Bin 0 -> 252188 bytes user-service/GuideAssets/Selection.png | Bin 0 -> 282069 bytes user-service/GuideAssets/Selection1.png | Bin 0 -> 107399 bytes user-service/GuideAssets/Selection2.png | Bin 0 -> 111062 bytes user-service/GuideAssets/Selection3.png | Bin 0 -> 75719 bytes user-service/GuideAssets/Selection4.png | Bin 0 -> 64364 bytes user-service/GuideAssets/SidePane.png | Bin 0 -> 45881 bytes user-service/MongoDBSetup.md | 60 + user-service/README.md | 272 +++ user-service/controller/auth-controller.js | 41 + user-service/controller/user-controller.js | 167 ++ user-service/index.js | 59 + .../middleware/basic-access-control.js | 48 + user-service/model/repository.js | 71 + user-service/model/user-model.js | 31 + user-service/package-lock.json | 1896 +++++++++++++++++ user-service/package.json | 26 + user-service/routes/auth-routes.js | 12 + user-service/routes/user-routes.js | 27 + user-service/server.js | 19 + 28 files changed, 2738 insertions(+) create mode 100644 user-service/.env.sample create mode 100644 user-service/GuideAssets/AddIPAddress.png create mode 100644 user-service/GuideAssets/ConnectCluster.png create mode 100644 user-service/GuideAssets/ConnectionString.png create mode 100644 user-service/GuideAssets/Creation.png create mode 100644 user-service/GuideAssets/DriverSelection.png create mode 100644 user-service/GuideAssets/IPWhitelisting.png create mode 100644 user-service/GuideAssets/Network.png create mode 100644 user-service/GuideAssets/Security.png create mode 100644 user-service/GuideAssets/Selection.png create mode 100644 user-service/GuideAssets/Selection1.png create mode 100644 user-service/GuideAssets/Selection2.png create mode 100644 user-service/GuideAssets/Selection3.png create mode 100644 user-service/GuideAssets/Selection4.png create mode 100644 user-service/GuideAssets/SidePane.png create mode 100644 user-service/MongoDBSetup.md create mode 100644 user-service/README.md create mode 100644 user-service/controller/auth-controller.js create mode 100644 user-service/controller/user-controller.js create mode 100644 user-service/index.js create mode 100644 user-service/middleware/basic-access-control.js create mode 100644 user-service/model/repository.js create mode 100644 user-service/model/user-model.js create mode 100644 user-service/package-lock.json create mode 100644 user-service/package.json create mode 100644 user-service/routes/auth-routes.js create mode 100644 user-service/routes/user-routes.js create mode 100644 user-service/server.js diff --git a/user-service/.env.sample b/user-service/.env.sample new file mode 100644 index 0000000000..b3518e0224 --- /dev/null +++ b/user-service/.env.sample @@ -0,0 +1,9 @@ +DB_CLOUD_URI= +DB_LOCAL_URI=mongodb://127.0.0.1:27017/peerprepUserServiceDB +PORT=3001 + +# Will use cloud MongoDB Atlas database +ENV=PROD + +# Secret for creating JWT signature +JWT_SECRET=you-can-replace-this-with-your-own-secret diff --git a/user-service/GuideAssets/AddIPAddress.png b/user-service/GuideAssets/AddIPAddress.png new file mode 100644 index 0000000000000000000000000000000000000000..9d79550ca40a036fef6c699db5abe41a604da000 GIT binary patch literal 138008 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

t!rLoj->p=`!I=jSNLuk@z(`^jNm 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 literal 0 HcmV?d00001 diff --git a/user-service/GuideAssets/ConnectionString.png b/user-service/GuideAssets/ConnectionString.png new file mode 100644 index 0000000000000000000000000000000000000000..073d3ed6a976a3bf3b0968a07342589fa22924f0 GIT binary patch literal 122214 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 literal 0 HcmV?d00001 diff --git a/user-service/GuideAssets/Creation.png b/user-service/GuideAssets/Creation.png new file mode 100644 index 0000000000000000000000000000000000000000..055ed783af0c1091d786f4742346b6009932f252 GIT binary patch literal 52188 zcmdqJWmH_vw)cx`&;)l#Ab4nH16(Bu;A_%+}(n^OXKd)xV-Em`@H9QviG?6 z+a34A8e{cZ)m^J*)tpuJpTE^%ax!8_2)GDfU|>iR;=&4GV6a|bVBk=25bsy=0-B}3 zz&`Mq3kk_d2ni9(+1r|!TN#6aiH9Ys!m23_VP`;t-T^!dk+Ax* z%l*VdE8Li2g7UKp-9!*5f=5^cpdJghg=P_WNPKiB z9ttz1y3sYgTte`Ys{cw&hh~7#w-@9e2p6hM;{1Ce3`u!0l6u%cYLm_HUy4x~a*0%(_;RNxlR*U9bo>TmHKb-OEk*>d$s`i^d(XIDGlN6S4?+ zsfaP>M8sKK^SxLDgH(>Zp$N|gJBEPpuWaA-W74i10`l7^`^F!Fs>7>Y1;Mpq?Y+2# zlu$7!Vm{Ij?*$4EZFeUJeCvXE^+o>tt1w`Q7!Qu~5%+N;qm2U9&KKJVg7=r|Hz6`~ zV;(`*C}@!l+0c7pAJ_D(@?;bQk~gQHiMpo(!R3u|tfa8qLF_1j{#vf|aZ%{V9+F_P z#ANp&F39Ct*tT@#)2}`gDAhn5a-*J4kw(ACw5@;tz~;Z9fcXd+#@fVt7Ui*}e{qCZ z_Hn#xEoARcZN#=lbHS_aV%(qX*><9jje&JgAZ$A-N(JfjwyqmC;LWY}= zD^X4WrUxNmPy7>fvBs2JNhU$B@wY&ei{2Tz#W;eYuWnFF$yP7d;>w!J$@&=Pl|G{} z-19e^p0&Xq-nSEvBv0In!LL?fv^~fMrq%I_ZYN*o!4A|A=R@la2lHKBop|CZDoJb^ zYFzEJqc@0NgEPyS;~%0~qT8c&cf6pV&8J_8- z_ZPSo%t{yCFD!g8q>Zoa@Z-J_8;niJXFYQ>NIJgW7s#HXsDXiUXt=o{*kqWY1Y3dM zP;Ebh!3!D08hu6@5)KT7N(mbk8;(u<4P!*D5OpG!8XN!HE&pS46t}Q@+`?~)PeRIa zw6m!7!eV(J62gLW0S8dbA2a+ha}XyB4mj%&)&l19D5fF~oazw0{E+p)6bBr?eH+4d2 zTY^)9#<2M?&oG{`v9Y4D%dVNR-<8&`)9_Qm1SOx+YjJLgL0ON2gmPRljq*~7z2I)c zFdkK+g#@UeP!6$JvSe;naTazKrIcA2R=I&n)+yQ|$fErSV=mdkhy{_Qa9OyXwBEix zz#@6}adzk^>4?TD`q2u603rva9YNwUM={{W;kw~UGCNzQFC0vLHrKF#F}q^MGP9ZC zE_nDEJT+=YgPY8n)sW$wI$t3&TQhB7X>6HjemZwFd9*M;>pU+rnOUfv<0aK92|H6g ztAD(6L^H#Y?I5&21J{c-iuQ~aAvPP`#JJUdCa$fk-CChP9l4%Uv}j^U2v zeg^`0X}*}flsu;0$R6KC&Eg(%{NSo_-0_QZ`5*_W8Gs#t1GDmB842b?)Q5l%BEiQ< zvN*Rmhu9Ce#&{L1oHnzTQcSn3nAlaUHVob}3x!OF%{NXrtnQs*eiFaJ`i#mXLWWEg zsb^eg3}!fIo=iS51*-=yS=6f3dOH|i+g+#ZvFy3f{KotcK@(ArX-d1Usi97;L04z> z>!f-OxN&jQeco|G-olVdvn+9dWtenHIkR>F)c5`uyWgZu+@-x zFffvmaE5!YKEC4PLP^izvf9yNSGB_cYqZy{)&8i<`i|#F&>s3(&1AvcZdqAc*<$^C z{leHP?O4V1DY;MtTEAKk`@W3bokP~P_v}kvNST=5Ab3nC_bHD9w~NPZWG(I>QKQ$Y zA-y7f^nywioo$Ot>K*1e9nnXkXxYRGGF>L!%yVR*sT7_Gs{_h)K~`SY;`uM2M-r?h z=5Zk39?_2O5fCjK2bJg-$%a6-xt@uhw4P6_U>(IFU+itLI-)@R=xq$9N2LQ(L1P~bpk~KzvYsk3)hgTimb=fgr}lAeNM$Dz|cl} zVK$K(9sOBbUAHJv-D(Kzf9R);XvMQ7pbxW^mXj2hE|zi4I>>5btfn@1oG#Cg7I%@Lg~?I>GM}e0w4CT*gU)R-&Du+oGoqexKqc{fu@%#Yuz`DM=HFI6| zxOA#C!6DE(K8jp6ZI!a-V`6Aap{tZSQ-Ll%)p}ga zj_hw+nn{1Yt5bB#A^IO7LF+*nK}3b*QatR^hN*TMPmU{x5k-8|2sDq@FuVa=c}|5x zqi#$@;|Al)oOmf2ysb{rOX<)KE&DKIYb-I0^rq|Q{n7o@5x{ZTbYNSTUH2+v9tVY&NI-9EUs^)UdO;<0X>jTtjo@{eAtgBiL4>OqENt&7g4fCq%Dv7paHq@)P zjvhU?wVe#!W$QVec~*l989f==tp?8Z%B{+(=d6qE^E;eMyiej433I%X}$b~WJHwD-MBG7!b3$$3`SzIE1h>BZh*ziE71)w43a z?Z^i-%5qyDu|QVovL4zAI5s&NtJG}MAi?rHvVHL2U-Q-4PRa_L0x#Pw|7iCRy~u+0EAAPXaLyC&bAT|Z5uxDz>h8F_L) zQC`l}PAGQ9c9cI^T-QHn9yEFcxCI1|M*k#x!syZyVPXVxZT|>n!3f6e%9|INob_e| z9haqU4EIby!$&q8P7PLn@y64F^18MPr3Z9&efEE}C;=0e2M=|CJy@*nbvh^~=TiNS zh?WW2AnYYQAqo3d_irD-{lI-cz`!7~A^!UctXDSVf1iW@qZHWCtgI>+7(bYVuz->)_{kcymf|rU ztQ{-scX%|bsx?~jaKG@iH3OHs`d3zGEv{d!7_F`S{QaT~s7m>kCvRzDF%Gk4fj~N< zv(~#drw+V}OOEqQGI^>*PER>sh)>yI&|mq%5&nLPF3z9Izio&8hg<*rg70@5VzPVTj073r% z{{TUZ@QaHJc9fpzp)c7K$w7g^{XWiN!lVm{IJnr@2Zw_`%+Y_gaI7%zKf3;$@(Nd@9>?7xqn8tsgm znyX7vswoBA?NewD1IE>8$@^#3z>@s>^(54=lZtl3gsm{|UdDfTBatD8q?VEG6_yB3 ztakuGM(!Ut#U4%WHK{&Ybk@3dbmx$O`}yHWN%iAm{&U3q@7lBJHt;rxaB(ft>3ASI zjzE<8__&yR$LAEuBT-S){rVDs)pPu@4ikoL2Yi)lHfMQjE>riY&dWr}Q5G^3nPO6K zbWw^uTn^Shx-5SUyyxAuhy|jNg>;I5X_KD58X;y_!GIqn9bi8chjo@hv?0opp0I2o z|IB`x;z4FDvt;`u){cxfWkwMeV#5EA{0YF1CN9iKp(-a7PKgx|AuI3JJq<2B9>mZ(&F?p~=JvCtHG`neGC>NLA?soq*~ z)R^{K$Pe66VGQq%Cb8_&XHw_??=Jf`I_MMy=> zP$stzC98?wUpq;`AMAB=Z}YIA<45RQp&}nu!h1N#(9Xo?^t#PCW(pD{Vg1=`1qwq< z?k}RrclYz%ASUzb?Yv~JwxZE_N*v@o^E_J$2+dodS70?LNMhNNhRa)$h!Qej0;rwD zL{GGBu~W9$-Q`fJ1XZcpoEtcy^u`coO-YW__MW#E(d%qBe)iWo>U^p@sWfK7TG)q` z&2YPzRUWye%*SEnA{)jBFckOYgo484A?tj*y85uypBT_Myk6#c3_PBj``_=B%VXKC zws(FHIU@*(DFe25s^g@Axb6_d#-yYoKOo6@pKoqnop2y{gTEG4mhgTinM+JfOWi^! zp8Nr%{7X+qs|LV-Q)3Y{0eN@dk@rAIUQsSVKQ zbDi78%~HrjChlpT&(Z4;B+1Fa%I7EfzU0hyZ-@JvW=ofh?T<73qniaQnxL6W&|S>y zP5%hkQM-aT2m5E?$})H1PQr!csvuWlL5AvZSW!MJ?ihn5HEtP!5r9F4DVf39o_Ihf zTAD~bF~F3WbXop=gxDN#NVgU&8sW-k;2sTrIH4vKiA2{l4k}vS2Yv@#oEELXS!PB9-5Ek$hmPjK^HCgH$MH_){chEI7 zL;DzIrdB3u5)ru#a}!?2Km`KbTo|Iy$)D4(#V7fX+B)r&itKOgMfB5nICR)-<(g%CQ{|}DhsSqkD;lcPW&w76Gw$qEWw4aOKSt$XG)y=yD7r zPlHURtm>mJJZX;!UNtGb!vsukqJCPF8AP!M={!2V;jMRC$Gcapx3HZtedb*V?PKVN z@J3UzS%MbWr=!Iqs|h=w(Cw(UnPYiG6f+jQc(%W8EN z8tE8XloGEZp#vi^$=@HqLNG8!|GcW!0MNY5h2F1Rd!I1_lor)&X()SR@gzkIkfqI5U#MV9u{exn`*{Syp;NzUP;@ z838)BmPU*Da^OYZh%73#8VzAlwsG=5`r2NLHch{lsX@|^jH!XiQ1N;fi|!~b741_) zX4SAmIBf2851~aJAE#@o9L}K&R9ukNlv$V=i@UzvNxsc5BZD#jFa5N0*jlR=QLH^l z7MEuEWE83eDS#FUp+`e!vH%|f7lO98#krNi{i#~4v7>oT`#r683swRfM9oa^vOEX}#q6;BU!?%ga2Ea?YdM(^3pV#f`sUt+zDy41>`#Oi9;q%$g#hHQp@R%0}wxt&ohY zZX2Cux%ii|>A`WGleKE3Xj1Rxa+}llnA!ex;O7$U)XXS|g;GTyn(OWbYN)Li6%4Cd z2OiJ;>Lv+nXe8ncXA4ul%*7Z^;PyJSh;gn6q`Oyi-yP?1V4B%;uD^bchfKUzeC+OJ ziVu1il2oPm@c04`nbUs3Qw=0Mau89zy?AuronQ0K&PMV;R;s7cCXPYy9NgS?DpRIZ z&X>z?AE4DjMs;9fVs1UYnjI*0>~3og8UOh<@Y4I!n`g@ScR~sUo$fiX8nj=fi+6kA z14?q(-;0{TGf&&#o0d?Q`0Kt#9-cTdf~UQ`aOj;H%bM>YQm9-oT~{ts9r;zWFJjMB@UoGzc0 z{F;bryuM!A+KK$6lD*j&VzS|NJY2~E1yD>3*B`hJ12}F6*4;16h6=6UMWGhfL^9+b zlzGhqC-C=5?^R)sI_q%a759dOB~0M7Lmc`r{f@xJ*MgRxwYQWhYXn2eQ|oazz8AppyIfYbVv< zbP&PK`ZD^_0z+8`uq-ASQiX{OsunSGhilQ4y_mPR*@jnQ2+j12j6xBG%NkE#Y>z7& zZO+{0cla}tsZLKjedJFg`V9N$wTl|cOB5r%<)Zr{xwy`jbUQ7+c%GRkO;ldbTYuUfr=Zs{XL20fh_*)4&3xCs z<{@QPl1G)d#HuWH3!-a+GERjS_JfXD`P%hGc54dIy6O)n+ilY@n;neO>h0HF<4sxV z(+MuCWYpA(2Z)%WI)&~PtDUNas@-YJRH5sVA z)2%k~I4xNay@8ROMcyB#YCmZ%&mkZpmaUg8JdBlXsIaV&WNESxoq|TO-LADwdpGMemgD!a8j z4isv&aN1OBjcOuG0ez2K&{vgdTm&FDdy}j>Gw7}H-;eD!K(t0gF(#95LhaVO;mR7$ z(Ti~`e-%bzu z0iKBREuJYf=Yt#OQ1yjOMaPtZg%jx0|_OeKbLiy zy|&etDsj7?O+SOus?Jx!i?MPM%!1EzNK&(IUoVySMlXu+u=7?6cmSRp`jP;Z0zaa}pG1|3%nfC$ z=vkJRTH8ENK}#boo`+k|*N9``yCdx$L+NeJ_6=uzTdj>T@!O1+WsEa#nk+t`0cA}W zM3QfBZ%f#fz_p#1?g)$%I%$` zxka;PyHio941xh9yy^C9Q0rYBvTi%pusDX#?k!JFjY9;vxNh0{#t7Rv?{?7%kNa|A zt}+3ha;YDb=fUA2OR1veNajn=Ic20)hvQI9!S~M_pCtG`p<9k>HoA>GK14B4kC}rf54pknl(vt>rE(5v<>~vP9@WYD`U;NAf+mZDSKLVdbID|J(XPOL&>!cB zQjGPS=j%*j#$w&~pKJR4%eyOgp=38UGX}9<6x{v6Ky8^pG?#(W$3|OF=O(25Qjy`x z&vYeM*p`6q>*l{`ObV-f-kh~rzbw~Tg!)7+tL z=6Rek#lXa%JY&gEPH*KcwpRfZl`O-_nEvCg;cUUHzrUrTxrY9Ai@HVTE1P1=<5(`d z39(;Ub_VnI*gL2hlZkvf1zo*i7EGH!5p#UZ<|iN!35v5iIni?vj9!D6T_BDup z9oP#IP-8s)`GeETdH_6PGQ#eltS&E)2X?bSjY&})6GH)?e?5XW{B=;%}N%!jN8QB+;4 zY#nj=Q)K(ks8_BI7NqHVgb&AI4~T)1!DouW}wrFeYf+m!vTd=eHe7t%M>} zh7v@~(z7av)H8#|RmvtaP{XJMxV+WQA3vC>p6h0j?0JgoykSm`SBAaD8k*?024B=+K?LVZv4|^|7p_1!4 z_CQi8w22!kw^U?}7#LRFdpDj(QH)~+gzvT%(eRu$FHvei)+#qk>5c@;*hkg zl8X@NmY&ZW48~IkTCQe`?VU=b>TUXngL-ud`bVOwBCMPTowm?=mhQ?ot zYuey3tudL*HT7t=Tw%WFK7l__P-nr*wF^b3K z>G_ss$v@wPkhkMBA z<4Gc34_Rw6yA=MaEc<5|ej6TFwX)nqRL21lt=QigEZ2Fa6LVsrb@&q>`?mU<6!W*s zRA1L0OLg$1)fY4Ir6D)vlyY>c^M0|Z^C&X4=#A8(B1TuYvPZjvdtEY5V<0@_&EX-k z^pGEyK1AfG<`c}d_T}I!^F|dPk!6r7&Px$4y!~dTXCBE^#t=vvF~S*RdT$f*lV=>v zCP-7cGM&Z(FAB}C-9wM7Ve6dF2}U#L(k-Z8aR8AlpNY{*yYu#pjN&b$)peklBoulZ zi)ff$x4GUz4OT43WJ@{Q$NMv4htpe*bdY^hSW0c#UTd@ENTET3oEKjG6GcqvsmHy~ zojR+vXXp57e=I5Q7c^|_NOp2T6R`;$Gp!;MQ6{FH-R^gnlWiiSq1kfrG|Fp`#@H8& z!JDnbxiqt~oDCTHUFw%UE=XlM8zI4Jz-3atOjbRRPvRBFC~~k%guQ6r6{>D?PQz#- z7Z^x9#>V)D5Msj)e50^bc|NnpV*N7JO4C-|X)Sht(uEpi5xI z%E_6{@k&6F?8&L;}u6FioIz%c{AAhsj8Ko z2Avk(*a*z$fqM6&MXZldG1hBB=6ajx2`T36TS9mu8Y2ADZ793<4a;J9^eF51f^n~8 ziU?L4OW-e^n^Qw>3&m>u9}O{?EJUgcFVD|nW0^#TSge2ZiYEB`$0z#bw(G5=`bE%} z=x>EFFKzW{7vRR#Fc1w~BSw}V5L^1%t|VZkbc zpsO+MPPb>xJDMcST9rx+s+g?KI@jKL$g<=*b0wdd*WMVdtZkxmaU8(PZb?j*E~k)C zpxG*)G|=P3sAx|b0wSO#CNq{J@8QSWOIgPcaaeiV*k8MJQOB~{HAg!p)C{iym#S7v zOMR8(&f_G`Q?1fWAg?jNdfNMh!Oxu+quYUi#xzTuu=#q(~hMzo+st$3@ z*?LN?Z7H!yh5^jL+~)PH_dMd`ecv-|RaIzd7;PS9-#%2eYq}tFKpD|=LxwvM=;qTA z$UuFunT9v2j(AmGZabEhfThKZI|^WJ;1SpmbcpIMT4@T{u3aP+K=@rm;%&X+B8RV7 zE-cWlV})AQb74ae_X<(s1juR>^$ONQbZAr=>q85c&d4aT&|Y;eS8Yuy77onKsIzf~iiFcEY^ z2_nQ6&Q~L{Yv1LrkZ~=3&LDT~r}DK9*o6*@`tzmYCooSMgN^*dH8E*iCWlv$#~t1> z%CFN&#h2ks_GnhCU;WqYeRsUX}5&M^VN-lB`34x3^szU zn}hpa7nfNkUNGl;09?tVrNW1sT}#iG=l7(QEj!wOKz6T4T=y+3XCYw$3^ z*gQ>2WzJpt=X|M6MV!|O3vS;n<@ycrCd_Sa6N1EL1C=Ct`jslxlEzkdIi+JJl#x1|j|GvCcYDs;7%(3Ne>B zri@6^U)Z<=jU-twrF10J10*aVdD>G9gUxBkrv;doKW`{nsdyZ|b^s>8?+AHB{n4I# zeMZY4sGZN!m~5a-%vYLt(Zx1oltSe<<_%P&mkBsamaWZA4A4)G-+qHq9z(A3bQ4+q zAR@z-sxdx8zGL!@B{l#R%HI&5#DG4ByflcU zNUV?UC$w%T`}SAz{$$s*?$9Vj`?2DVwaZdj-9y)R?PWZDDPx`v;~YQKcmkW}CZK4) z(;+EatC)Wshb*Kx3z2n)kGBDZ&u=9rYu)7}GOh#=(=cWlgGYGSPXv`fe`=TB;E2(X zjcf*VpXny^_7gbD6H#_{dqocse14Wq?^);zwiO&cudu_b78TUaM^L=@{J@mB6C{v9@3|Jn>S^Jho1WM@~9d>GW^ zy>jMCLtLeBYB&4Z?L%qX=u(Z*y2H)qSI5H<<3-dcKJ7h|LR^+=&U*A9gflJn+PRIX zrVKq9$%xks4f@qzJgI0cjn~ZNMk!MBRF~=bfIC`88(n|foX*aU)9>Pa4l!%5;{82OQ#eGWm2Q)_$F{$^cuzo4Ojdi>L{)!`#|MP=`;5PC zIMBam+ZH+BPh%s!ncQ`F;3O^v;9mkAkD?HF#)CXwNOF%Jb}h*xB9BrK`g|_+SE{z# zQWi_CjP!gNdE+9{E*S3W9SUiYJ|KKRM(4YUd{LudtrDeCUUUjc!`A^eBE5+#0l$#H zGBK43%qA!QGVXIeCs=0ztZ(6FcszN6l5lW0qQzojPBD0ebxOra2AAUTZgF>rK1Ghs zD#G5P`yYl1zi<_+4#8AVCsP89Corv(@};x8RvEYXmTGs34faouO|?t!bCe~s^T#&A zW<_PmQ9d9uGu}VsT(D307r%rdQ9njzaXNP#5&jsnR9<-ia)a)a)5W4Y48_etb2=I# zl8MbQUhLusManVdH8x|LEY&=54QHFWe}tLgoAVl5@eGheQX-R%7U+;k1)gKW`t7}^ zwh<^91B>DYqJxBv0*G%bGS!3(zXHOs5eaqM8Pm$pUBw=|oK13c#LG#zML0?y#bKvv z&^z1SC4H94#4xWH$k<6zxTn)OzHMSc5%6=Ud}Dsh%wpW^u|!RmyA1ZV(hhCovgszs z662uM28>}sVAFT6bhX54lhsV*PN6ADsp=R+7V&=6eH8UR3vj{h16|=dfnX#M&$u9c zpbc7Lv_%W{U}ULb`H_AQ6yopWiYY{Ox#=QVia@e{p~-;|_r6XAL9dN0pB6csYEgWF z5s3AW`;Ew?sA{TJ^GSAX&gz$IHk+myx&~K77R!cHUN6w&_?tIH+~mC?m9vy3v?p(| zVC}7O1m@XPCG;6PgTY?g<6LPdW!7{m%tZ2EN0~x481HZ-l0qDeTZg;HcA+tD$QI_O za4I?9wHX#J(7;(`Xm^NF-PO&jg^g7yU<;sw0^tqECibl4o(>yXNQT|{=-tT76jK=W zNTS?EkBkBpR4t~qsulVCyNCG5Z_O-N83oglxfiZy-jLy}e2O@=s7aDUR5V>9ud1nC zqn#dN)u0O()I)wYLa#L&Fm-gQ=#6u}Q0zah#!UylNu65D-^5X?p>iOuX)^J{?P1*O z-a?^$*gBb_DNG$0T|s7DV*F*ke7X2xn`C`KnM~vH*wy}3cQl{mlU=7kzAGkmJiz!@ zIJV<}J81<}!@GV%3$Ru(lyvG#UChkB6)=sAR4#$dkPj%Ur-g}5<*kdUa4KLsJ0GOi zYOo9oc*G6VY${#IA7gy2Okb_D*ldx`Go@u_WIkB0N%2bCGmrN-mHw-;O{qwns;1b7 z4J|`rBanj)35^zjGW6Rx-xd`W-^?n3S76>ZY66}ynl(UgNv(~QHi#7v$(6@s1ON2| z4KrZ;cSSkcMU*2!C}JLO=>?rAsm=4%&=XX6En;(i|5uKq zAc5Ju(XV+r+*sAN+=xeaD1CBUiq*uCRhP_}@#H#ps~ok!wMGm;WypkX0@Y8S!#)Ni zt1^mpM@my8lFi^ILhg!Z>Zu=ULxO_v8@x%4ch>4nHrp~q@f?h%%gwINt2T@&a>o)w z+Z!=Ab!Y*KR|w6lf0@KTW%Jv^>*Z<2<0{8n-WKnP{6MNY2Y$He34{WZXOT1qH96_a ziH8Q6e{eBY(sjnawh9#@zKPTxa1C$zMmlBSr36i)6qN_3ke4T#j=QNxG7&tfy~lgZme%KYnZVm+(VKR!JhH0H3=9`p5dPqpB-`s2`A!RIAScitFia|dqMh_{-z&Q!1lPZu5YYQ8QXX+1F3=8cKPaw zWR=+9y85OJ$mS>CMWY_&bE>d^4&0gsHlUSadcZ#w2ALQXTqt3SnZ@AhqgJ;+{$wv@ zDF5bv3&hcxU8m}Akcz}&U>K09_SM4vBNO6#3(*1o+GHDV?rwb^Q}FUTZ0f2ti@wGS z7w@HmE19+Sv(zdMlX>ludK&bLlXWbj)|2D1&)QN!95jV%BsQCQA0C-vaHKg@Y|-CR zEB_(;qEdrHIZW~HhGcHH$(Wb3=UUL@FNYqP9aSbDA8if9l|13QIag!A!6POf5Ae9T zTNN4pb#3;a^08m1Bp8~h6{+YeLcWYl3iV*mFK!w}o9;`fP_ClgY^L>(Fpn^PB;AYH zS&Tp;E#+y%jj;_PRNn+P2|gCnKcgu3nozOL5NMxm`G|mEd_jV7_U|mpf51vuD>t}X z>Yw>DkpSh)n)iE8+BlWWlQV3L%u=;*KAEe$KVyc>^ai&HH828o$b~gM zoG3%uZyt! zgHXiPRnGkQN7wleoNDKz-YUn#2?x`^F7p35<1ofl>6Bcyx&E8Z`Wnj(fnK1H!p-EM z^0y%Szbrjk8~6W16a7CKKSo1rET)D0-?89Sf}a9I^b@-|H+wWdPWg}Mb91;KDSez3 z9!Ca2e;&%8lYNCtl*kuW(~}`6Rro{MBR2QM7tBfH7#{IUK2ZOa#rjVcXu9d$Kg^$z zx@Ka8yA;vTz53Ko0!}C3co4a=`@jDyQZjbnAK37=Em-C&5yax&2@c_vSR$q@O@aFd z9?Q)>@_+io{{oK8MSSltq^PTyClvAg*r75QXxvHkD#q@ug#PR>es#p}F+jsL(Jfj7 zp13_&<&@O&^Q!l^8nW`d{~0jqp zz5I_6TY}u~U>iZWfP@8Jq}biN}-j6KHLn&^!i19G?#9x)BaYJCaFz* z_%3yFBYIZNJ63!VJTSBsLUaxiZYln8^D|Ue^XTZyOIv!}9|J%C>S4Kz-$DHG2%AK@ zoe)_=SqEWGc_%T@QfG5$;hb`Ep-L3BzT_BpVyWWU@Nn`dAu{!zS{5Jb}q8Tq$>?ckix;<2hS~_K7DJywh%zqh?4oJmL{jiUPmDPrXfc$77 z`rN18dhB_B!@+iUcS+>%&P;9Z(}cgVQ`!Y)Z|IpOQ-sK5c^y1TyEGs(|!(@!@;?$;-ElsI}BM^g=(tQGx+ zYn{6UtKDI|f3bn8pYG}AaH_T=SE+Ov+ACWA&TGH#Yfx@MS&UZvw=^m5Y+B*oSnJ&c zuqlyJr;k(!24sTmusFLEv0#fqb-bdo)?t)c0&oYh(uh&{N^%PJafH#cnbQ-wcC&B$5Gnuog9I_in*Kipo*x~8ozPf?o>`T zi41*TagUly9%6YMI4YUROT(Td*R5u3M(8UwykZ?dkuPbX#gfA1C>LwIuY#(ceO!Cg ze$UJ^yU^`ZRE`uzo-Qn$dG zMw<(J0Yww>~Snt^+{mNAUOH1OEk8I+QZZg$E()O1Aj=dlw)Vehjhp zvz3N_{`z@&fl{A%ox523&EYFso6ib4NT=P&cGWaAX@%ko`VdGPuj*tCePQH9{i_-9DuH60PWY=6$#jI{~rWoqtm^c*(ClC65;qK+t z>yzeqq*)6nbR=g&u_f4P`u0ev{49r@#RxR9j*QX6sc-Vt9{s;4Wq@E|rO2p@KIee|f%Bsq0_Apv_O+7s0zf$$$wjSlt_W4kdpG`eMaWrr1Sq6e2dk|N}mw`{rNKUSeyVEpAW;l zT`lDo+Vu|boF?<0_h0N@vdtnLMTHqr()F=f5+` z*d4Fu;xQ<0moOWt5_lHwz}|QkCfpxgR}yJ_?%P|1ON2jZCOmBIN7!>w<9VdDAbnS1 zf7~z`kK}Xt>3#89b36}yXRGtYVaHmvIykfPXdf{5K!#2rkqFU$3v5^57R%fxJWork zrn@k-WvTH`ciYn9u+?WG+s4Y``!t%~u6Db6VE=YnMut-P1OuxwqTA*@gwWLIKioAL zORzA(^SF^jooD!b%(pKr!#M|mJ| z+C4LSQw6!9q;qFbn95XD=}u_3rp!&({3CBXDg}VUapHA#-Fu-J>{i^j6CFD?2=F8X z72v+VUUD!rgM*t}W1gWwRF&1eu9?$a?SNIa+H7iLvbT4Hp&$hIXZ`-E<|XYQ3X3GL$!uaOmqT0hiPMlp*5v2Wz~Ai4>NIN$f+%=*)I( zbX*HlL+z!~I=QfCjAWbDp``xl4rRpm^mY#87tg^GP&&I;Z~4&H(9zH?na7F`=+*mT zc4_Lt8)_+W_#JJ1Pd+L&xW=(Y9UX-85}nY+uk#AvgFF((EaSg>j?0^dX8v} z(dE~BPm^Bl4<{NBDD+r%v;6f{7JhWNjcrh9I;nE?qgLo!DWCKsqcaZKLHdR|4f?h) z^T8HJzb=jo<~WB`j_cDDq%j#;FOtV?)q2BSXGQCJOY^>ZJfymASzY7XYrm#hv%ztt zqUQX;@nOYs$NttB7hLQ8{eybr(aF`0TMmRV zLYPdG{b3;imNREAmj8Ebi_>VY`{?)oqj2%w+^e)rM;0)hHGIZZDTv8x#m7hYulWYj zeQeiT=We7S^t^q{?Rce9fp>!y-+Y8$AA@i8)Aj1Ero}tLiL{vQ=+6z?Cj<(uy7h7t zg?TI>1{@57Fmk$6q{o1+-i~da_=yWT+ykl&A28J!jq1{P9(z^iGyzK~0q7+*D%&59 z0Q)A!6(MK3Y(~HqYWl1?I?Z~?M9vn4x&066YdT8m%)H;2i(^F^9`=#xIyW5kXYqG{ zKLPgV$^1UrC4FpNwz4tR?{AE_K0Is>(*;Z!KffYTXl0zo=ss?&NzU$n8wqW?-m@%f zwbIGYQ~FZm%-&ulyW3)R@)28)$24%Hs4<9f*Y$RHCSkkPCNec-!|9Dyl695aG?D4; zMfN;Nhx3fnO~f5id6gBOFxumGp-Kb3dRv~SbzHMiK9cL4-Sc^~c39J6y zAHOs$$jHzTML zWepp1!UMqV#GHg#%6+GI&XXRspGbi&h+Hcnl@o{y*52;D;lsv~=bZLdi=z+Q?ki-| z%k~?g=0cAkvjv3idGL7CF&v(ozWxzucchjk%eI(K4+jFz-Psq1tG(f+mbcLJbzYh1k@AXRsW;oX=Q%u8>otzW zj@sWLF(G6JkuV@jmDan1YUR9!rmV%YUBnQXjP3n>7w;m&2Zer9dR;EB{^fU$9v}Gb zBf%Ahru3XmHWKfQY0yhzk6ieLUCNCMou0O~GB*Rpswn6L!<%vFJ8 z60NczRHP619mc2iV~KQqipNA#wuwL(8=Wjqh!+Z?)gRr9R)$qmnB*p8jWn%~JAcK5LlCnd~Ubb;5?>S~yHu2YklAGwWN^ zt2W9`hIm%oBdHR;?8j=CDLF`Mr;!Eh`j{dkueX}4^&7rer)4t||MtnZu8qd9jxc&E za-G+*w9QDHn_ize=kgzS4*H%rnsPT)_4JXnW7TjloO>^20x8WrzX&)7cs)uh@>rbZ zxxIMjwPd^~^q;QV8|lkUPzXAK02d&<%NkJJ(YTEB!@IEMv3I%7$IfoPH7;JxV7sJ%lyr3Iuhrt;?;H;iW>Q4ZIkpHc}_Y=3guEKUgcJlkG(2sODodWYoQ z3}W~r6iC`|Z7Ag^h3R}WO?T8%sdl8S>p9!NgcNf!TmC(`K(9NFA9XxyHTUZ*V6ZeT z0-=2tR;se5b+D*ysYbXn^S`)I>d|IM%uE(DGqhweGee7+nPK|Qd2c4>UY+wb5%V(< z`)fya*RIN}tgOtHs~S#`WU~ZgAAU`2n&IMDEGyJ`4r~Z$9H)*VD3tm&y8g#WmcR+_ zhYPU`VwMTvEKM$x2x+#gI6fdE1pBcT6_W`omLNgq{2%! zo258vMWBM)v@9+Iw5|XI1YqXHh!_B|>A2rbM}fIFgp?^Dst51&;yX`48~Yqze6Sl( zZ6tEp>tu1tWB=L6(!0LQyljFXLsqdL0Le1CF`+qgEL|0RcOT@ku18olI7=DZfN0)4 zXG+kW4i3W!0wAV;N6F}-Apjpmt{31xrZZuuvX;mJ_6MH5zJD*2_nt?izpWI*I*Qcs zy!o^8X)ZC1w=oycE@@pZ5wMZztxU+hZnt#2+sAKc|6DZEj6JA)+8kY%;<8k2x^!J* z)9$vuf2L6!N3gMZ{;6R+>bEtTIZ<=?V2)n_Ob{9FVwgZzykbuRhAyA5Tas1m$0+(Yr;-K~PfsB>p+(GK zEtXe?=G-&`rm!|ZEK^g;IqQdp8tZZ_1KmH4tMU{pJze4 zB`&AuQ?#?T?KfuFQ2MPGE%XP)PlV#bOx#xa3hD?+^QUxb1<>hX;6YwGwIY z19oK=4#K(tR(-rOrO_FMW_IDD$&ANQ;APj2lSK&mWPg3L`*M?WyaZp0g_q>OmlTU_ zhkrl7gF}k~GOFjpQOnB9E1}OllqA#Cr61qh9R;IrZf>NY)FEz4Lk28N&}5aq3__db zmnL(UmmpJHa95is2dr!{s*7BHrU!dzI@%;mfae=rFt+U}x(^+HWo{yVg|`yaO~Mn= z_PXa=Huwuy(~#MF`vouB;`2r4$Z>!2WnKtsFP=$}P+jyw-x&Vt41UkWF3|0E9bDRC zSw`*V_3V5;tL>?U3z%7Y0vdV7wf!#`R5GSXw4BX`zs3@Ejgj&CG)*Q&B`#51W9o}ZVhF6LuBs26Wb z)Egax)7)+%EM2Y!fJUx0SjmPmHq{kl?WS1B=m-0U=?p-s3I@D|uo3^?OoLWbO8E8O z&p$7Nc%A@J%sDdW_IxQ%PYDb_^BYy2O#j{8Oir$LkC{qC;ar>E;AK4EpKdv)ysc+8 zS?%C*g(6FxdWrq7Ze!d|&aGa?e@>LurI>0ftM55f^j{EyS;*k`HMd30orX967m(|0 z|0DPF-o1L-Q*42W%1|a>*$H0zA)kj=bpJM4Z@U%JvG9sBZ!W9Ae{%sCF8#Un1#yUf?aB`OL<}kXbGJw_lIiSyI7Acn8zI0 z&~0@V{|`aF7E3;<{-w)+yHykU}l*B6ZW2>j6S)aBh1_k1eqlZ zm5VxyicT3?HAP)+BgN!7oo{}EaZCi=%Vo+;*HcH+tyK|3p8d58CUm-~_p8Mz$IYia z&am)-&SsGj;U1rps%?|4`c}H~N2Xq@c5C@FwAeYVS7PkGz_q)-O5ud3=p1WqdK}X| zYg}QaRTvW+CFv&tM5l98f|QGpc{uB(!yIS8=SyzW+OBG`4L|YHU9>fec70>Ppa~Y^ z&knB}=Qf)WdG;9n=^UxbCqFT?PF=vbzpEXinuudm)%Yo*8X+o>^W)?+=kS3G!y4zaPU`htfLNA-JMJ3bC6GQRG8SqvK$3s#I$CSlJNGFuWYEY?TYEB1l zLoQgAUn0D~W+nW1ZmL`ZZN0<|w5XlJs@7%{^lkqNEn+lMd8tZU7noe@ng=M!7kG|V z#Bj#r4H-sTSp@{jxa=*JH$4dBE`O*!uB>V};S(abUc}uks94<@jRxflaNNpfctoam zf6>ittp~%R+CLKU)SW-Oe@WrR*mqxKG5bC7Td}6M5ppBout6@;BbN1$$@MjOYMvUD z|2@4ZG=W$wT!@*v;iPmvn^@rfRkPN!v$cn#+7NHN3E0-QGQ?)XA|lyapmxy9F-1*H+Q}P1* z?x#k%phN;vE}=TF|15hfM*2ln7@|Ga34jbJbW|FN>3tvCA+*tE5YF$GT~4U4#ap~z zNhNfg&52#|FpcHXyLuYn7Cor5tQTAd zXcIkQ`FdVM7*eTj5C|J>TJ;`I9;R?r^;&9d+v@Y-b?8f5L3WY+1LW~z)<_DRj13P@F&Z@!&?wR;Dr#moa;raT zf*EMm7$H-Myz0e^omk#lb@`3B$#du!t^uT5PpNHWotnYUTCVrVP^W3x=8^Y$5+BLE zQenpSyGeOQH~r<#TQ>DUY|v8QaJgI{obSut57`<+i^vHpNzIBjJ6JYynq-c?g^sC_ zu*o?p4P(VbJy~wPtED>o&2&k@5;kYk8Hn)PYdp<)BF)gc8Z!JPop!MWJl1PwD55ZZiOCr=$IE_U|T-2bHS*Ic=)ey>QrYp;Qs6gkyEMm_VT=mqtX2S}K9=;ptg16q+b}P(MAUn{QbY@fT)K zNmezxYV?1jumVY`W{$>l6q!aETj$$cf@Tv>R_5ppopuJVQBMfUlOg|O`&ay60Cgo$ zs=jJFzKJq?u)~Ta#rP_ zW{2}Ya}2$!NOQCyRk~NMNesYdVT3*$Ube=;I$C$&G7q<4X7SBA41(uRUcaK?2QrE2 zoXxpYUUaNs#Dd2exodCBgRbyVB9S87{=+3U2Sr5&;$nCD1Y)#52=TVcBLLZkPr@?*2*S*dOdM{r4kJa8= z$P=cSSF%g+*y;@$Xe4qs=a*e0?|Sfwmf@}zwM}xZ`Q7!EMC$hOe844i1cDL0vJ4`E zDY#o5zs9iiGMyf-_M`d)0f@PdeTm`^e1#JVWQj0rOiDIs_JckbPZun)!XonQy>;ui z1Q6X4}Dk#k_&o+wz*{;da9mYFp%n6 zv3JG%+G;M?F{lfiY%0mrQ%Lw10wGI}XQ}RP_3XVk2mNk{2tig%oG6npBOdH5OdqQ` zO7O5yii+3ZM!t5rP*s|`lFP>#*QZ!oiyyXekK-)Zmz4i56tI(Grv9#o5K%Wm>0OqI zCrnEi(vmR8q;arDFaf3jaAVYh@QD^Gy{FJIyZk%Awp26?_qtys+lx7CP#jG6kTpAE zM*&WiO>8avdZqcy)3^FI^^NZxG;|Yvw;{$kmPBeBHcm*upYkL<2w!8vbacjXvV|Dt z1lrPX@(|}?Toy@}W*Vqs(~ULniYthPn@tEeYeZIdYbiz@-ek5Br}h!EsP?|o0l-5C zkeko5nK=0tZsw&Je<4lQJon~Ed_YYzV) z8b96s40)1TDJ8JEkx!=rx z^83aSfiuMtZlsN0U`YafOkBnEKMyhdyF&k0G8!=)obsMnJ41w2@Z+y!{|4b;hXDp{oH!r7jad2%vVsIonn##+V#DTAy4&trkGTp~*JQufF^+; zIWI~6M$S?1J}|<37~?FS1~!)b_z>1ds8Hl{VAc8e<9Sc}(NLfnz7`cu<4Ql4nVcZL zn6>Bf``=DDfr#&_-7aQo^>+>QHKX9#r-RGozxfz2X3bhZ91R2KEtJ52b-@1_3^M9_ z*WLB@a`>Nb!T-~nZqU=y`%i8BzzWXr?)=-|2>`4tV1sYBt7ccl@K0_21;6;r&;9p! zCZ7*g$Y8x!(X#xfHVk0v^A!RS;h%eYm@b};>yjWAk0*Nz_(DpOayBs?Ow$)xSpFtf$zGY} zFEBK8#q`3$cjQ-+!?RK{wRLo>B$GI&W{D1x6<&5mhE##6N;+rHSywT! zioXA^+yd>+3ZMd%KULXFG&5}u_1v=oUX~3|KW4HicQ-Ro*Ew8=5OxiGmg|5`<$8UU#UM{8N#4E+#<{} z;33gu*jqCV#7Ens2nM_7DHS`kR_6n^hps#|rybsbEye)>RHg4r%?YfkDf1HjD zZjFW5`(ZH~3;O0;~K{Q{ckMnzc%-7-L=TdIMy!0bKz5QCKXv+ z^1rB_GTC!=xww|9YS0PpdplWhfNh>AL7Xnvy;YYO=cqyTM_kM+dg~9kkKocfe<*Nz z4)}Vv|6))8W^@Rv@QB0<#m#K@s&PN0<9@d3nzdPN4S4t@tF>FI#s(M|Jajq95y_IH z(P+3&y>(fq5IH-0B8t0Z$L;GENM2P;;Sb%IbeXzNsEY!gtI%z>oI9wsp z3g5ZjyD5{_Lo_TPCg{*{%!=Mvm9LCM+m~3zWPR#H{QWc`cn$yf6HF_Z|I8AlmbE_gQvG&>@r@D5h>tWWN7_`EwN8FH|-M z+jf>xSjAvq>2)83Ln~_Pdh3NRAtDSuN zl}C=CxaGSQsgBnmM<1#M9Ytj%*W{*C+o@E9=utVrVIxSs{b-F)got~RBB zkkUpCycEZ5frOoSBb(FjnwFG!Jj)KL1U*~*4EAd12WPAdUFBC~=LF?mwl2@?9y{IV z#U`LCcmuJO1u?b(0B>C~JNA73@r9y>qfkE`Rcg?61KRC!b~;N6J-E`g8phpGrJ zKCc^Yf^Ut&0Iu-!7I1}`Bbd@|oDH8_tHmMGmYJEkbSX*PKAHO)MWK7DwMqFhKV8I> zYK5}d%uJsun)`~=me4IjEbc9ykfbi(E5n!29z7Ep?dSDN6Ylgz!}!Dos*^A|`&eGV z$pWUyxhV@S$J)(NKy!1mN%;!9`^|?4B36*W(W^5Tt|->jLS&}3>2K|}caCesW{{t^ zImMzU>Wb;=Sz7?l#MzYG13wBEp$=V1xe0_!1WnXI$j$kIG4@S)9*=|DjOoHAO6Sr{ z#OaRiF^&(MkhCOV$rhSx3e9zWw=u6-g+Zrl3|w`uNK@0CEeI?Zb{EH!95^UvEIEo% z-|a+M9O% z=Oj(B5Arn0!@Cw%JdLVxOonY$NA>3xACY25Vh7}@t(-L%rx9{675aCfa*m!9_gqy_ z_LN^{%s6!%h5^Ug@%V?#^QTN?=cA7GqBGi(vt(AJinj>&)?cno*s|KiLY_C_=qb&& z;_1vPh(;`lurx$nTv_Jl^Cg_1Fa`62R;+mWHObYu%KRHJ`z3IvO=r zE(uatxVvNg6*9CbN;XR)cDFBtAg)cbo8g3@*_WW7U_j|z0QCv4Bc*0G7?p<5B9jJi zJE>$3C6b!33F(?(2^~tL3m%;8fo;HLEVqhV*W!TN8KHGHAryvbJyYP+QTggt*i4uw-Ij^LSJ~xqYpOh(sAU}ETVFibaj4n~y{kV)u&CT@B7*E-k5y#_(Ko(sb<6MkDK+Ch06Vee0;VEAc4gu)bqDaXx8F>j;@R4nI!JTYZoF^h!rc9aQ%!G+eN zF_#w%zP!`OBYZ|}T!tKGdl!P*@T@dYXNygbyJHmX$D$B$lyi<2n+OH(`ckn7w^u}n|7XjY1RA~bxb zPzekzxyDvil|k}ZGjwyB=VVAy+vt}~gkojFK^oRh(~TiQ6%m>{s6*7jtD407NY(G` z+rMbl-$ssu$)Lctia6=gNiy#}uTR+Q$V3G56pDnB9{qwu{jgbqWW#@qchhCaaeF@t`++%GqkNmezyy6= zbcK|6$Xv_wSs?~Qd=Sn=K~KLbh{!84%C|OB&md_Xhn^bAbyy8xK1?+pvbH`y=dRsh1Xz2PaYS zA>`LQ&JCW&DG%8V@=_@6O;We1K3f82IL{5XhfS4>FcJ+kv_$+$B4E}2yqQioMd9gW zY1Q~-I60Z=RsHN7RAa)6s9+~YNR_oD5G$<54K0%28`)5Ss?B1w?GiTu-B zK5Ae)+cA_G12{{ja~XeImd~5xH+@?6^?;-MaFQ&>2?I@n?#npW4Zq5&IPfY>>E2_E z-;4}`h@$Z}FqduOA}>9UmYT}{2+sm_Gv`~qFBDN@^tQoreXbLmkunV_SCH6w7fBeD znPwJUK_mIoFG}kb?dL=DwO>8)s)ltE;sk>2B`QxYT~-T$OXj~~M95Im3@LK?<-eO} zRKu~)$~F<($E?jx%QeZ=g|&WV&p@h!US*}uH-!&-_<=a{WgoOD4#6wj8J~t+Q%2)m zFz4q)!vEpTr-?Mm3bfGVNa>G8ui5T);L_DS5N+aiGFbP_l`8>62?AU`FALw)&-&`w zwA5O^2cso(IzU`c-|P$Lg(38^DODMOanQqY7nN;1k}PI?FXypnOSdb_EyBzq9l1hw z!AhI+y~+>Gr^il?wKFp_OU%VJUbio))+f>j)7axp$Mt@q&KcY;-dDEUCo~uoAFR@5 zypMC`CxwXo7hs!fa*7P~5X{n7Q9fBq78~a1^a@Tr!@1 zyGIyVk<4UgMMVDA`6Igdee`I4?B*>fHn^DyRnzflJLxkenM7`3uS;tz+e-Ah9G4+b zF73G>(8nTIH;VOzxN5GsyXJMOnkkw+S!`A-7TzLv-I6kSMTeM9-m1$9D|hBX<n_9udw3f@n;X;s+{LWZvJstfVl%2mQFd0@E#$EWdtx|!o#BDl zV(*;zzF*200I9IN98=az)fMasuxKZzXC5)7J3bEiNOsUHvDgBuu=UJOhice{H^~p` z(OAdK?%B|dP^nU%Z9vX@{u$S{U{<_`k!=5b>{cS zg>+>pswHYGePivdl&Z9y*j*k!(`7JSzoOWU^g46;4BZ&O4a{$G z+$+yz_yzf*(p+9qI}p-c+)jE`lAT4Wyma}EgI$BSBtWU3fQDVGq}IJ`aXIVtw8ZGK>-`Tb7=9kXxkfilB z8uJ%FL`s}jv#C(qT>1jXbALJtdYg4^2hU)T+*B05|8%n~+bbW=PKbEE=B+E)c9P1y zpZC-VzQV-xd1I~SB_8XLl4?j@;$=<&f}BWTs)CWNN>SK}1bM+z6pF>oDHEYy;fNaj zp|KeMR?51bJuAZRAuu&02V*^Te((cK)VsHyKLrG5NCRXb$}C(y?rMw93OK5|!(>z( z6GQVS>0Rd*Rk~>pjHWQmEy}J>5zlUVujRP@NK`HC73o|#m;J9j;A^W$Nk;KlD9ZL| z)FNK;PX}qaqDeT9r@e=hS-nO*73YjEwzjahhfdU9TB3}bl{W*;%?Ch>tfGk$+k**C z6bl7{hqWMeMG9!8I>psR-9-n3$u((lt{{sOysTj84dvGX^t41mhn}-VY=;(eOo}|$ z4kR~G5s4rhNe##ES(o)rDw%WFz{wEoy?Ezd^O}hM1nn5Y{+E);14(y@AxdF7I5jA? z$;MN1T|0G^1r^5nrrxsP6qK7mR!}sdK$D@}Kqe@U-QhInU1r<&510WnJ4>)8wpfRf zTuRDZ-vk`Sce>G34dtqkN_nb_^a~#;cj4VX4)FX`2;X&z)#vEU%ZLesxX~{^n1*6u z!5wjg>TaFWr6gHo8jBg@R-9*blnXkcxe-{Gmk8OK|Hwk4SQxbT6d(G~_I*;m#Sm_6 zNa~t&sV$*7!JU2xN^}4psG_+n&e@zCXirjoQHcdcxIB9y#Mo1GpGzdf)B$pjiz${h zL83Xgs~7hsMws5tl4i$~rzWe1`D#dXmeeRI|D87${T)PM^qY`iXAb&Lzj(_L0o84Tah4D{4ZXvus7`^XG zuZekcrT_JkU!Ig7)KqvvGbj8{J>CoYG&{W5?w0=3$IB_f$hpuJa}7B~|5K0uf4cs1 zF#jJ;mqslN$*K>hZ{E-`9z%}YT^a=Ws)#6_n=KD0!d+vL zRm6CfH0->bE;`pDRySU^|6~h8XH@cSts?@fE)gs`FN!ZmP(!-MPQrj8veR`rngu|! zLAXSsJOvv&Sq;55e^#;}^Q@8F)kyD$()jX_pf_II#e@50%5gGW zhoP~lhwY=$-Sq+WH|?4j0m=t#CXp8-F{bARgLqEeIr9g`y^*Q4IZQ2W zDjs&n#V0z5KGyyD68ElrnfQ&3%@=^9!{c$NDBiNELVdPb)kc63hGU)vqk4?TA8PjH z<)%SZx*6Ee-G%F^*?CJ_V1m=}&`FcG^4?O7`7^L9U)p>EAO=jprJA*8tZLmjwwpih zy?_h4W@bK&a~`;z-=#NkscuQFeN#FFzTD&l!Lm~Qm)|*lOc4Jjof%#d*1mDHs5FG_ zJ<V!%R(f&zeb{@>5h+v}}JCvGOR&COK zwbA@A2$k9Xly^K@K>QW)#d*h9`p!QU8#Sd*ATt6=l1q&&tG2dQhQk*$D4<O2bd_8RL4<_jfT9<*yRHOQNdJgiaS#@nFzx$=3S zpr>3Xt)`9OBqpt$_s$*944uuJ8hv7<3hEK!IRmVpFOrk-(h;X>&B~sR&vmHT)vnd% zED`G)Fk(y7B@%mdX`dEEu~bQ8CFf}(JYx7(Ot5MCPvOGGS8r|2=@DWctNZ9$3V4bb zyJ<#Z=>p*;T%_6?I_@lqZN!_)%%~k|3g!t6o7|30aZ~MJ^P5ELH_hZ0-KNSqeC~XB zAP2%eNi`5tzd3kVmiJ~^HyNWCZXdKu*f3iS;%O-Ldc6DcYxhZK?$%rdDeO{TxSFn> zvifX1739T8(y1F?=GPCYob%)zw)b-e9@)|`Z<&y3T!TJd={#y0dLCW=@Mae76`4za z1wz}pA7&hv%p%#y_s^~k;>Hg}`Cw!&yS&^JkMZ+mt<3gYs)5iAQe5bwzgKU59fLb| zUG$ZH#M2SwHPS1`CLIbhpU?LO?ufZ%9ia`%CBHT~J9i{Q$oeVZ3L521Zj;yVEw)ME zif81*b{zQ~GN-yZY6=J}XJ}%4VzDgS_)Ic4v-^eq`P9@(MlSz5^#tMO*Za40a@>lnoIV})+vvb>=7^L$b!Qf`ITf;Y%!%nzbFMVAY~RHK~A z8mYDYU^#0F?^Y(_6^-0^^xoyt_Y+&x$X97Jn&bT1qZ=pC4h1pJbu9n~fv0&J?EX^CxKs-`*nO~n)`NG`s>H0{+TIHk8YvWv+Bg%p>ei;TTr8;8*UN$k!l+6 z*>e_cFigmvedhQd$UYZc&vo8PXC})j+S39_dOW;JqoOLEDkvjrC#~}w&EKo@P*!Qf zWx5~RlRa+!RKo?)wcEBc8ddECA^iBJRDXl|{TA?&(s1~KwvHqmBUOLXIU(;cJ6-FP zwyO7T_Ktb{b&Q&Pj2ED`KR1EVH)64;C9YP~^xdu$nBr8_;zciKP;B#~FqWzg=U@+p zwezuei2Reawz0X~2MFh46*eMP=a=*JM|>T=HD_Y|b38O(ohIVH(NRC}kw*J~Ea9PHw(W^{%TV(K`*x39G2nGsoqAtx7XdISKh37)*oIj`Lf6Wgkm>Rt7?duj6 zr1R!B$P>0BwmVrK)_hK6i2Bf8Hsjd!CwRlhkCkT8cJru>P!XwwT18;7oY_UnRO#+k znv?c`MXFTv{h|>lAXYc%lb}0#c5uAr6s?Oo$0rG*l#DTT)x~8hZ5$y2`rY^@BbSEIG)!PKW1{HY?z{{rxrSd3z(-sZPV?3R>p)yWqg9 zo+FkBKKN6O4yVWQqCx-YuQ`)X=g?|_d;6@o{%8_at}rc3b;7s0EniTn<&ywEE@jD` z1qd?c+FrLemnGNJhrEnai^&9 zo}U>XD)VjlevME=rAka&zP+7M6mWEiWkkDXu5*UZ%x6FQw*7GU6ur)+YG%H#^sOdD zQiAif-ED(>YdO|qBtbf8Cgh~6?Xfua2YsuFi)^%*;drmGXy!7U3tE4 z#l_okmxAYhZnoSkx2~ZeQ(%Wm|9roq8$dOgVcldeQMh2c|IwZd`iB1Jlf2vRwqjL_ znosWaP?mT8@sf|j);F?)ta=(QryuL*p!4A1p9@24Y2P^9SB z=r>dKs-3_#19{B4UHUBmdh^qYLI1UQ$VUu&^~u6xYU%6GlgM-idNoxIKfejhRN*6| zLy13n4IbAEII1XW&hKkNcMoPWQE5wZ=qBIc@LGx`FkWQxb)P^S)cGKXFV)a5pAYkw zs?r?+9k68C+bkY*$X;}Z${Pyk=VS+}?K_45%Iy=`dtnjjirp?kg2X&MAsJoq*9%ZG z@wJLu`>#6ODj7tdJVHtdQlX?d&q0x$?5mcV69w*qMiW@qtRndiixjo?TX}AGgOZiQ z8;@2tvfxpjr~tF(A(g<(9J65}lP0#29Ru#oUG`pvAgI}4C!0y-THf!Y`bKHa(s_!V zp=SGtSyO2{W}Tbj#CB`Kz*;^78253B{1sA^nOgZyj`_(rFHyDqwU zG_nQ`2R(ppEA%-#2-q%(V1mCv#|Ti!&eeLdd@M1iCUp_f56L-kL7Zu6+_gn>Qr_FM zG@9$r`Z@?Fd#sE{b!((4XrLE0r&qK>)MqERwPenk7sPCxdUD5O&gu`1hl>N;AEcc4 zQ!RAB-nV>edBP{d5u;tZuiPSjdJuwWlN-Z-RHl|GuQ$8yJ#J`i%3N#~P;|BEQ{=v7ut=$8|Ct`^9&6%S<+z4-8zWg;ONnfwSG6ExafSX z(qW13%NriNV{yliv*xfJxXW?W>Te#uC}KX^-`%!H^>LsO;jntfw7x>iyInw!c+Bkgl56+w-E~Vl;)0m-G zpo?=8f`)UNhd2j3hoh8dn8m1H`B8L)h6X7I^mJITV% zcF3jEQO?l(SMz+FTUIeJ=f}83mq6MvCAMm%-7k$+IK69q__qy#aJ&z*2^@;-mo#_N z&_U?3LFLp8WQanA%#*T&z223RJB3_Y)^k_tNwjI7$w9Vm*&*TE54Z3{fJB%V0YEsi1p`yKPma*2u zE#o|(D2Meb-$0=l&c42v*hii+T~3yAbt5WnF8QK?4J+wSCfsA1fO~fPfH_^pJlQ%Z z6b;9+_1~`ke?s4i-mk$CMhSw{J)}$svpHTOAqWBtpdfYRoO*~q1?1D%3;ozsHKKZP zc+^*us?84+IAXuro6W-VlS=|M&(%5u{OxSV(W|-n&Mw=oF2sW_SSE3w1}yOXqw9<0 z1n(_2X@^w(PL6hV;Sov}Ib^J7?{DM4C9hDjlvxE8+@mQv#E;hMi^e1L(G2pd&8)&| z6pT(3IJIgFijCoFt(vIab2qrp$FoKNHhLhBn{PG4P!qY22~;P6bMKD8x{*Yi4HHC; zRJLN(W1W>`Cg9;)%NOukXR(wtVXUjkqm9vC^P?)KOS~ki@vmz84rZMBK)gca-Y}J- zn>J!)Qh&10;;bkSkck<1>O$K%E%!(~AMEDI+L!L`V^Z>TMC>47Wq3b8A=hgb(o9J{ zO$Zl0&is5f8;L-aXrSHCUTUchn*DySl6PdO&KPg&dax_n!{2%huiU@d$QaoLDT2Xt z2o79uE9Tl}!L76xt?D04SglVWwSQfGc1o{cW=54AvV8{Zy9($(B^jstFUekIkb9Uv z(>aObaW-YInvy%DiU-vbOkCb@C7zjYYdIM&@m>$940nO=X?`|4u1PB&Hy1cf1U6$zFDz)6o$5*)_M{0E`uLhaK=I6nWQ`KE8P8r zs~lmbpfjkyq{As!BUy@eCW2?dRB8rXOrRsI3 zC$%DTfzgz)8p#jj;l7UQnD#K$ z6pe7c+L|(rt}c1++Pln&6h=x)C3zdau4#-MNh#nb6n>6ZZMbhNNTz?EwamVxoZ$EF z9q*I4(08TpRW`@QC8N(RXPxUwje96~w`VEyrI)Sceo9}KhCM0j-^{t7ihSUhPDeT_ zP17STTTbhF8YQaUv~C#X@t7|$2ME{x2!U0aS@bdvddc>c8=shH`L<)y-$xZ4IcWTa z3_VY}^aadqAm^8`tyqoaFCsk5)1+Elq`f3>_XC?wOn5w339JlctqtXB4*E4Rpb|Fb z@fj5Ap3Z)@2yFw&CUs;!jqOUB}V~RR&a0tt0Q>kNK!J05Y>SRb}GQkV+|4 z#ff7rR?MM&;KL)n$qcxrp7hW0aa%EJr`CcE>mBg(#UE%UUW6;Zy|8NS!Q=#rt$|i( zQoQ9t_-dZ7jUGnB8BYE7wv(GLbBEr1tk!gn{At!f%;V?hRp4+{oI^@MK-4Y^myI@R z@7KxS@p6@}F2g@uwWLPVns#p)QTQ@H-3=&yfku;oAL*VPRTB%$*}=t@>!GWmxEB5X zf>}@+oHuCNm0Ft$uxI=8;_0c%mKHz}ebi{j%g$&iFl0@Y;O3PY>5&p&r-n+;P;lu3 zQ`TJ3WNUa3ZS@PF<9g#0t;29mO{0$G&-$jX91!i}KAI-tWkNBuA2Rd{(8lhi1L(W` zKA0?JH+9?7t!=?oo;I~#(Ii&)HUc zHaMVOcFIRaN!j7FzNMF%7_szXlBe58gleZ=U_<*k+~1D(fwy6Zf3JT(WrVj@Imu#R z06+!xeBi~Btz!`{v9c5RX9J}us$G#YZRAC}6FzdTf)SgWf{}*e!b+qpd3twdt>H;` zrYDubvcltM9|T>#T&Q**lh~jMGPoS`V!{%dcl%hcgah zHzAK<6(BbHR+ynwZX8*Nr}`D;-0Q+0W~zMK;{tJ#sp^E;78&~ho zD}^T59Xe%&I(I@09vGVjfgTy>8`|Z^j^XF&!TxcW$5fP`s)6`OXw ziA>-}BL0`TyHAHi6x#^H@Hbu$VElrX=HaQDlc!iCa3I`ok@o)AaJ>Oey$Aa>!gj^v zCUZMH+bC>BRN>jMXv@haB{n%3DUs*JqCcdQm84A@;Czg_Z{+&(4SYIlu3hTzrvd%L zc5AkPrcrlZu_ee!4tt;6G85@9&|iVxfRP!Lz4;1}oY9$sU}DEYElmntuN$#aB}y%~ z1bg-j2`hB#OLJR)=apMP#)SXRU1a$1(HX_L_#wA;4ess8sZVhQewduMAU3FsPx%=- z^J8_vog#F)ZZ}cYRTB5Jl9B6NuQd5NB?_5-nj{2xm3l~~{0_^UwnX~A0pAe|mza$3 zPalBnw_7@7#1)(lXY-p&`l1tzlngK5d;RJ2JXsZ>=P+7wH46`wvTBRaQf75|Vh3`5 z;tCU92^m{9esX;F(MTgrtnM7vO6{jw&%HjX&N<${I;> zGd`7<6D{Ii@I>e-S?edi3W>B?LD;@VjV3` z5C8Tbk4tr{ijvfkHDBbQ9Q#>)H{zpUTvSBp-pra|=g6hNKg`)YA}4C26-q~?ZF_if z3c9Yi-^8gK0-k)u!r?N!L{4+~rN?%I>z669y&q-Zz6+#A?9eQK*nir~oaC`P`IAm< zfMEGQ8hh)gIG<%*7zpkO1cE!k3BlbhxC9>v?(Xh{-~y)eJN{=oboDu1-)k^T1wJ)F7lLG`n;>uF$fvQ`tm|#^=ZkcnoE8SHk1Ns{yZBATk zZJtdI>7E4E0fn@ZwQ|#^{-wj_e2oCNj3PZVyGH5nc8v@f$af*|b9Q%YWN9&zuME3vlAneNSI0b)3)nO#lYm{bKYki9}htrNACJhq^oWA)?wIV zRTwsJErUeFtYkBMw;i|E;A4D+ID(DyjI;Wmo!k{R;=| zU=6pPxZG~Pq=VW(&ZnOzD^Cfz_759JzV>$9zN6+;K?KeBnb4bVign-Rh)wkJQhtLV zT!7h8BBgxyDTl8;9upKMrMSEb!t4A*RqiJ22 zu0jP1^Qw^z62ony+)MD3JHZ8sEbZJ{^#DU&>IwnG zB^-s_VR9H*_2)dXINuX^|Fyp5ZWt}tIVn0ED59_ZCFS&H^ebCDy7AYFb;egWl@p|- zKhy_1f2~k43N+vXy5GPDe=wyPh2Y(lyx7MmT+l!^vRrN#H*if=op;8Q`>_+7SbKc2 zcW_Fni#+D$W2eaS8(n~~TZxVh1OUl*E?bvdG^M-*w%9q{mCkVSmZr$+9TPs_rfqhx1RJS>cjOZko=)fRz?_i%P`-N2Lw2f@U1fQ&AZH7o3DLqc zTmRU^^ut-fFZ0Wn9jjGP^l{3?DYfiMdG%1(YBt?MVpwQ6_sv>wOnNc&{g$g>O@W4} zM$=go)cc4oBCVQyY*wyW1Gu6x!&lky$t?L&m^}FIb{`trO4Hw^EY_=@ z0;^$QAES0Qs{<`n$NIH$b&i<%)JW^5uxrPWSdcLn&pzj2Gguj3Cu{cG`%>MxU*}%$x&uIH1(PhXJRg?+eSU}_+0v>@Bj#gc6 z1rcuz=)F>x@^1U{h@4cEV?(daQKXENY$tN6uL~w7CuuDWlm_RU^?xBNs>-zT!hQxA zW?hW86hpvFENuM=)XB$ArZ>D_i|J2N<|+3^rJ~MdlKc;uiS(Rq);2i>4CvKZ@^p*$ zkHOe4pMHGV#|vx`Sq(LzDLG&-DI0%x9V-p*Z3tqe@ zcM-oh@!5QsHm9y8FZG)8{pic&=JPN;&6;>jTcWB~?=pOYE9>0J z8;Z`1R`+c%2jY;VSZ!4$teZ*POL?iEMZQNev z<9Q)LxQ4z+O=$?04E>Fc#0=4**mN-F&bt9?K43u;B6lxO@3xA5902BH7RIZGCCZp+ zSO>S#Zvq~}g@0Kezkk0K@-Pk^mHM)p?=lszL-0iQ8uy3Pe@wxz@p9L66c6%N7&dfH z?S~35GlRL-r40{>Oe7#jZM5fgda@8aWXz^eAv2Ki!2J{oV30neXJV=F%sFdT&^VK5@hr0`&+!w=B=JW2!A~VX*g^tzbnZ7GT>YD_DxU9jeKM}y>`N<0fSow zeV3Dg7GNDVlbp>Y^e(1P7%dm|YYQe65;hM^ge#Miw#0YowIQl;`;p~bTy&&Ej0m?S z(@hbjkWpqDt%I<9*Ay)tid2_=W)d#u|IiQ{%+I^-pnx5$Ct5!UZ8imNoWAiY_pRH- z;zv3GHTM~ajwK%82iY^*P|KWhw9riwGkq;arC#UH!NoziMga}XaHI4Gqi{Addzi2H z3Xu}FD$H<|lA>#f&#PAQKP1<6N>a4=e&qb!tB0z0(7GKvYP}0j%i8I=o*@JJV!YD1#DZdKL5^eh}nXRPTP; z3ZB~a?;!j9t7H#Y+Fv3iD%!O?-Q6=VQDc#y!(=hD;QLbVHcip5kdc-)lr{e}^){xU zm^XDH!hG6AwJOT}bGVqbjIaK0?imksx;b(M_-#`0Xg^?x{Dd~Py4Y*lKI29T5*K^) z+;IA_5t0B%V;mm&ZRIn%z^z`3xK=16^lki&YjpWpXcRCd=@Z+qnrp{AFXiuRk}B^` zQG*Qwhw*fPfFLwK5r5MLbzk3b1!qP7_R;AjudSO0S(0G|?|;;ckr>pUD#u@wz*P3y z+RB{0w70o1%F$?@9Qsw|#`E=Q?r;3R}yTRvP- zue$7ieP|B390r~|z4&WUOzjVLxL;7Us081Shf3q5%KW8vk8b{W3zPaqcHL}GVo^Jd zQVF??A^Cq)$Xs#uJR-r2iSHJZ=Z5YVfQ$1}Ez-BvR{|Q`JIEU&=Y78l`={nJ$Tmy(9W#<(ZaNjwCTiU%s(AeDZ# zRUCh$P?iZj?)topO(96u?y0uv*kC2@Cdd$e97EEn_ZV54Yx4o(-%wfS%5KH)dU1by zek=8JpxIjw&}z?1%2jW_!gIfiX!_6ioPU566ao@?zN7F}gn)Mh6r}rG7Wx?%LdpWI z9&o29>FrVy)=I<5PxFf$O8=j=QL8~XfDn$;_y)fZcm$5O!3bgplQ)Y4Y9t$Zm8C zGMdGfa<0FOMQ3Eh(HLK|`^aUis_0^?L<=&N3<^d4J)hv^nVOY>2p~T!l3o>y?p_xY zku;z6k1$HW$18tW0U~Ixehfmv`~BYC{?~tuVms27qAQMiZgDPap?7AfjA@3a7jENa zucM^N34poU!pvgm-6mrgK^v+^%X-^pLG!~Ai|(vMUZMmwP}`CYS0MSYSie$290;3qmvIVf7egADe(8<7*Pc)9hrvBI{5T!ME%4g37ZRq9 z>Ea_8l&NIl=mWZ*rH0P$L4v^ec=30)V7;=(`l4EIybdd;)DzF%QDJwZswf2c`nG6t#a~T_H>2(1_!BBrogC17L92kcXw z;`56*aMz}R5{1qif*M+L3xDa}*7K1wK zM|E_{G$d|v8LgufQhW!VR?iVQpLu+_q!X{Kr(E_X>qgZflTLz+jsrr5?Cn_o@*(CF z?pJ&9oGlZm^-Yha-8;Burj_QE@f!G<-GFBMtH^(P*S}+Z11)Tivu$GE+g5iffpu2m~k1^XcnQgn3-U#?GFbax#{YNN1j3mhZ-MF@Zwi)^_1+KR6?(?%&aIj&x21 zv=-n2?7&yp+v^IfZV%D5N}Mf}A}A~mar0Q1TNt}aaAHJ%Mn~saTwFMo@_fZY`h%c4 z)26~k2X8(l3p!RhL~8gD;GA63u`4PUIMJ#|sP6^}0zSSpmgm%LC)f;?|m6F zp8^wt$!n~rlVqtqPmaOULrb00IRRC1gMPo9WS6eST18WDNa(CBTa0d|$>L0XmRcOc zC9Wq^DyS6@r|ldD5>FT=#tTfg6?+y}nfbPwlO$o{Wpy=4{|1&b;+-BQtaBV}lv)?h z%6MiSiu@X;XDI0ryajDGKTEYQ@_1Me&Oz?vXi9iYd}e&@QKF#6wS2B|Ni5fe{WzAWk}pkdW?7~8n*G;>*dw4&N!1o%BV+YsBg z2mH{+?Q^fCxTn20+Uirr-=ga?^SiV%SFzO@WIZ0gK&+sLSZ9)GGL)}yv{-AbH55I& z?C40sX0CSY!f2sZib+J|y>W5f$X=xA`b<+dW;j0CFsS#`w~(rZI29}=KFn8ce!acf zkl9kwAjeMdJ>8Xg*QX$WTSVT;G&7f%RVyO0Vj<(yw*xxxfyZM!JYl49&UzMTGnIVj z_7tx(24b^bYLh-_4PrpVw^J5 z*sLkIoX?)!(_FAhAG?#rIWZATvq-UoEC3?neI1>6#26op{3O3I`WQSXnJ1EGZnQheYw>=uADb1NGdN5mpM9xpLzANcCb8} zKa+j$-a6Mo{`+hh&FR)1HO*Ze`yn_2tY4Q`Z5VDs*Gtmke5pzpbTjuz5^QUZu*@~Y zRTM1(=7V=WN{^1ZzZXAC^*Quu+P`d$uh_5VXi>W%NT-p}ay@op^4?RbIZ;S&Tj4J9 zX6mCYUvd1y>+8fas9age;-oL^ghR(pd4Q)WQl*BI&RRD&HQ6BpVRt#R)to68ZdpUZ z{-u=>Zl)9ZVnU|$Ga>Uz40jJ;?UYo@FS){GWIQ~J{W)*(-dq1Jv(-1Do+tgnNlHUQ z&4goMEMZPAvf7Fk9x7BETv+HUrGa@KUrQ?h3wZctan(k^%T(28ezDc%J_VMqz$ZhtFZ8t z)C00#;xQvBva=zRByM{^qJUL(OGCXO{=2fxmn9{;-sNdFKvH+BA0ak=z%?E|elkAZ z(6$4KuOPi6ijlxutJRQTDypI32)T0Jyxv|iThaG4vLn?s)yg;Iqr>y_<8e^wde{B4|@w;r8Ij586>&2S}y!BzvsPwSN@Z<63!g*Z$p4IG+2-gQL zN6W#RNu_JxE64$%8#D)^kz+Z@2U(R2k6CMfgymb%(muH})CX0>aU2Pd?v3^zRUDq# z+qTWUPakr!o%?bp>ekmLd3MVcA9OiqlUPxAIG6k8UEm3y)79AmO0xHeU{eGt8p6#% zqt(-F*}+VaatB<3fX}mMR7S*)$iw+R`xImOy*)D37L!6w>?<(u^rKVnWft?MnmF@; z3>WO|=|dF7A?3q^ry}o^gi1~Ak1f$p-w)9RfAy9i54NoVJ>#Z3SgcHuwy7wPWDs3m z);Vhnxt=I?)D+1TLTHh#g)>)4DxMJ53O>B?^tmPfpy;nKZ`vRTY9fuP0sMq@WX2 zrFRx(Sw1WPKss)#fc?3Be5b6Jn$X_BG|aCig@3yZj3Fe)mF zg_T8VHa+(1=IW;89Vf&-TBF;1y}X*U{5RT%oer~jhqeb|47ME}u@V{7RaDM9=Ef8t zrm{DxXt=VxA{P;vqg>b*zN==kb3-L#uoa=>vG+Vb-j0dldvWy3@z>{Ml+UF}WzlFb z#l{v28T>U>6-qx4)bYNcq37!Cy9C{VC+9wXqM-rG6s}B92Y^C61bl7uO-gfVuW!!L z(9vmkw}Q%0?ptn{jZHCFOO~e&gR@)S49=%>`uoQu#~D|CS6E(mcc|3S)<#JyRxc{a zFGfKkATZLmfS(`{-XP1$VlsZeP&dIsN`uK8KCzs^SGcExp2F_d`GQ>!1-79o-}(0p zUPUt`wo?|NP&1q>m4f01WCJ&xB^BH9$CW_^+>7vkGqWLn|k67#L{e2=Y zMu+N7@pwD)^3l0qn9%T`ZAOHn00B54XF-B75$l4>sfs-xVCK< z$eVUY6T)GWblt!lNBmNMmn5ANXG!MfY=dmeMlR+%$IVDj z47Dd7f-1f;6?67bob$7vVggcuEs%EG9x*y7dje(9#YOV>KZSJf3B z6Y-o*Q&IpQmB~%_Y8BV#)_YO>D-8gixk7+qMN?b5E)4K1xX%^kPt`YO1$moBt42ke zZDnhrmP9Nq*XXctfakXAY0)+AHKEJY5Cs#hzFBsyjKXQA+qXAjrgeowB{IpsTfGx_ zQj{Zux*?!>4dEb9ina{pPZOrEkZd?L-WJ>2-?Ya?(*iGBK17m96(hX20A62Epyi*q z;EFR{SK__t`cF)L0=QH#{TC%A?1tuuj`Ez?581`&=x9hN>RV{cQHo2GB$QSnROI1V z{(pXF0|S2>?v2_8z`PaI&h>I93&Z)2+=_&(oB@ZF4Y~i+QVmGW_lH5L`7W?8Isr{F zq}>>c+3?!3=tO;b{s1My6?MiDs(5o#(=34#PZc3rpCgHp{lw?D9 zLG@#jRm?PvCKP`=h(Ob6V0BiFDnq>?JK4CiT!Uq+TS&#oD88a1mXv367P9#fca4e& z>*RJe2teF&jIn6;wW2^Jh9vh{=3)v3qlj3jR&UsKMjU|f@}4=dNUCdU#F5^A$K22p z+iDeh4vWyC+gv+4%1x>(D+_Mm-cs*&qNqX$`lj!X2rd7Uip(0W_wCN8nKPcVSeX;x zo%3#eJy*9`IIY0%&jh&4=(+P*M$(VjC<&n6$-%J~_IKLh!{UZ~?=hz>hX3RjC&kBC z3Qs77Doc)6uYK|mrpI+M-ChZ*X8drL{%^bJ-=S~)+=|llMK#smt36D_tTy$z@aAkS zv~wCyY(I{8vPz(1KeI_ZN8&i^R7nkw_I?qS1ZV9|omc?lo5aK=DVm3;yYHrFv{@z5 zaDKA$&M#KmYTRC=dj=REhB%Y*Wb2ek%=B1tZqm?l002rX)~<_99Y#a;S|Q zHjhctE#_zo^*Ha(LrBM9YxcQ_u!4-Xx(tDqi?RWq4az>%^>I~gOrv~V_&eyF z3BP*O6-_s?V|cZsDyiL)Z?Q$bG4XhSm?#P|;VfHZT($+*p6M40I@DEl5!D2$AyupD z9A!!Y9D1yG%D(JIs?1u*!LnX{77=#_WC|>*hF%n+Dn&oOtw-ntY(*~PufKhZSd&Oa zy|6e>deGo-kBtB2SJVvqswqE2_bDk_kVSDPwNz#!>=P+r2-+hy-6j^+wTe8lc>kpe zGqX2^sI(@FPxo-cZ;QUF9h_gQ%>~*+c8iv5~5a}pe*mjT8(D&r8xjk zJZl1NXc}`m-qz*icyZVwpvJs$2F*&zo=JT+X79E+YEiBQ&9$t2j8j zII{Um@mF&4)!wh9+`=DWauRhh8ChH)-z_GGq5evwLOzkh0+TDo>^&%&^LdRG9t~DnFSdz->obhrvrV(v;8MLt^1f6qB-=eF=k^OW z9m+~Be!1ozj?njTROle?r0U8G?f+NZ+tJIgZn^5#7;6Wn%oKlRV4i)s z>3WgZZBc5GX_I~f{z|7l%S`(1K95LPe;uqwugvE=*S1@qi5qWUUaVQznPK?xw7!8k zgGK2m^}6%U_5nSGt+-y81@W*cI^*i%LaA7V^>8JN%Xj^c{PZW zSBrM%bG(h^ER%GoQfzJ)CK7p4wi+Vz`!3fSG^KEI>|@9sH8Bg@MY+<+Gl%dni57O#bVe=Ys-KiR(KUX!}s^qom_CRmz)41Yvl>SJuBaB z?j#V12O8s*_*8=D5AHYaXSC}unIbg|Wf4A#kFjb3B#2lYqzSPsg-fF?>uj^(VeESx zn6y&DPFdC~E6al_Go{I~J7n*Pdiz5iE}!`kuMY6>jb(UE$a%6U99#@rn49%xf&0kD zB=~Gb9!4+imr#7>Y8bK2qJ-fQppi#Q(fWC^qhTXyL8NxI6qg$Yg9wyv$Tf{;M~ztI32xqt@y& zs=plZhiZ#=l>`EHggtFGmw|;DhPKjGWyNxXf$$3cOn0j$^VQ)ZG_+}P z?Fok5x=2@7&nbebH>TE32-HvW_?P=8_7;h&vL&yaQYMj~%!1CT)wWM)nbT}U zgMqg~e|F3Ij!D>2&I2H&CY*Fwc*&_R?&6v@T_3sgr{=s5*c@+f1rB}cDuElK0hX8P zGTu4_FXOeY(J7IG&s-&!MVZeBf;SiO;)p{m&_7&gM+(1;V(qU`Xx|A{8(Atrx zZ)8|c3nm|y!UXdph_jS`C1?wKNWfm@$7R5A#@umPZw0>04TXlp`6W8Y|1&gQ*AV#*`DqfbWAu*#>_|8k^>T zN~{z~-Oy9)Zb$q6vg5fb=-;pztCZW#?r?F#2Y<4(cKl>ekdr4*LLvOQJ`2283toWN2b)3ws`4WF= zo5LOw+1NQ?x3e8mmp0YFOdOw zM$>3wo`+PQU$+lpK$+)9-lm^XMn+8vTe71ez#Dk(}TndE!% z5c0x3gllt~n0QS+8D2h~jX<0qIrSO-7RF)0jjCbM$PONeHz6MI71D^7vT~sF4${mg ziPi@xn;q4s*!~fXBN>>?D8CQaUe}|5^R*5I762su(?s?*6VF)Tw{4zfoD%;-QBG=q z|Mv)qels2x!^*vkK{10C4Jp@xYT~dPyoUH6!d6yRdrP0@EV$h#!}lv`c)FnZ2x8Wt zg$IM9M1(QZm2gl*_(6YpAOHIwnG4!%FyGa7we=M95nF{1g=JLlb}tPQFwkJW+Nl0n zfgC1_dUl%^togv5G!aiQfhRzkVsVzUpnkgS3e>R&4X|>73uT6O=vvP?4q@|896C?QnAS!n!h*(b7cF+NT=t?Z#yO}{Xm`30a{av zwfLSiXCvl+`U?mGbvKC!!ET_+n5}1YY$r&6_d5=T!wL{UZ?#GKtd4OIeI)nyB7=nA zqCNU?FVf=wDb>G1{_O{;G^QiOu_0sMwba*T zEsXG%KKvUj_T87ezL%LlXSRsEliCc7{I58!uaf1i!9VR`EgKe6Mcin(L6JtAciqM#}FT`F-)4o{dZ1ai_=X zW~Y+XDjTKzEF z|1t#*MjK%JPq@jTzD9NG$hTKu{1Ytx%QVq~VUmx+SmuW?NqW(`d-cJUhxf@6)*p!$ z-(lg#twdFixx#qxc+9uzGcAMezAkZ6|7a{bpcWMa-^NLoBnfA(xG=dNW7oeL zoGvgSIu0}C{le2!HU6xE*$(;CfxD7YfQ2kcv>coyBqURGPsI>tN%=q2mj4&PymNx> zBqx97w{H})?;2zp#o008mco17_uA~IgN>QO+h@nzN1bReEZ(6)Mf-|c>2OH&Zu}v7 zL13LM!ebPm?7XQ@SlO{oL;tzzK zhVX(c`#NaR`7r(a5m)%!p-yVQ-2PuyOUY#SQh?~cC=9HVmRkaoni|*;E>cwk+#*B; za2}p}gs%wxzi39-lrY=_r$^_@hofDRZY}7Dk7AawL)#w&IhdH}H`~0n1;0IFXjbH) z{l^ymwgU-c$6&3v4cIV_Y zrh`4f_oh7pJP_{K_0s>(*6{=wQ$C+;_iV;ulo4q(xILW&iuxu$DM^CmlSA6KqEjaR zw^RIwkCghYh!wNb>nSH^&Oc`%$yrh~U%NEnh`YpL9W+5KaL(to(_EXV)`ufU(&)*< zn>aZ&wd8taB&Ir?$BzJH9F{=a%gzQ8eIRT+JgbPQ(;p$2o|&CQMMANisqc_XmzI)U zcHWzh+tr;JOezMn44yl_pzSXK8s;GPE0cJ*p&!hkwYDIku6iDA9k%~YNuYDGT95_s zeKIk>FKkVBb** zkZHAk%6@PD-q%|7qy~Ie(TbHf3sidlhxMo8+}RfFW@Pd_HY6TpxS0VS+p0MwDbJm84zUzZ9 zIWy`H*iRB2F;YTr5kFufeuAbVrNM^{#GoV(f|A%44u<rJ`0=nq#&N%UWfiB^Cl1Jcd$sI1c7Jp;Qf9hKJYTHFboy9s z0b1vIDhYd&c_jFFf6M-r;sl>ALEA;Wwf1PghCWfsee|kNLe}RoH!h##1Fx2?0yH!% zrV!LC4^je{*{#vGG;Us#Eq-4et9?Y+j|v~k;18II*q%U@`g?+GX&Nm~6-CtxR*rcB zlk<0CT7 z7eM{#W$L-`uk`+RMCEGj0m}`A_rraXtpYciGi$O7*8bYlp0 z)%rmjmsxLi=tYT!K*yu-T5Bkge$IpD5?t(RrTKUevIsaWSo7SAAtRXM6EuJ1Y7wnl z%1xpr^@D;zeC=T*-M;ladYqoV%cT3zus@AJ@>M~n+5mi5d`iM!)UB=~VEM2JTxt>_ zTX4)Ssy)enknmo1y@T9Cp7!%0BO_z`a@WeucII&U#uw z+tc&D1kcm*(5J*UhT~%Pf#`i8dlw(YLV~p1ia=&4JC>ARqxll4X3$WY;|8Q^6G3! zZVSrho9ue4X|X=;Z7x-tY_lG602iBqHP3sKa8=q%OA=!`YYtq!(G9NKj|=N|8n%VF zCJgRM%z|}xCmD4dK8=otDwZI`5b~~&_?B`r-JUG17JqD`4R#}1+a2T{#GG~eMDWy$jqgyOYlv{sgC$)GIkYgX%Th4>-Bc<3^>XuB8p%EhuKMvAy% z!i*(XQE-h^Y~LXxO}sB`Kd#=+kJl!$P$Hbs+v*_OEU9_zz1TCk(!7A3>3Z&(v;n*R zbk>QXY)9Zo`t>+>4e8LcXl!WLI?avSHhZ+)FS^&I`%a4T9U!*68ONQkvI0oVrl;3$ zB(^pBYj1m^0cU5lP_qiLNOYl(`vXz}_IuCg`#h>>qyNwrH*Tm{jZneRF6~e6%L=)j>OukroRYS2&ugD`wPC8%rNk zI;oX8xVL=spgGF4Oo_q*GmLBR5k@+Ly{Upmz2UcEUu|X>S&HyuR+^Y&C7tSn;zBxE z2kX+U_10+KK39b;Oo+A`(cle!@^I1KJC!QI{6f)DP&g9Ueo;2MH^a1HMEPj>I#ca!`5 z(DO{w-RGRDI^|VOgo2y|3gT--2nYxiproi01O&7c_+tVO3%()@KtP3nfYi4T5m5k& zhyWBE?MyAKO&}m>;$7mZrG*u-``;gjpbMkK+MBzJuv>f``6QkMFC<$2No&KS-t5#{ zFPk~9BG)xHbg}34J#=1js5x>Tz&t#>zaez6aLe_JntbH=_VUTV0C!j~zu<@A51EJb?(Zs~o$=uGlPiI^P0s@NPLPf(_Lso{z$j*kzz}U{vgvs5;{?`x) zK6f7Qsf~%V0l?kH+SZB3ouBNlCwRc;zb-SA0seZ#*@~Y`LskJGV&`ZA;9z25Vj&Yi z1ONbhj>e`uN}}Tb84mu7pUm9Z*`9})+0D(3$?YwZoue5uD>pYcGYcCt8yh3|2}UOm zTW14zMq4NHzbE-;9#In~BS#B+XA3)9z^{1?4DDQ;`N_zBE%e`?zu`1-xA?!6Y@Pmt z78pV1Uw4>UnOKneCV1rYg||H~Qzh~bmhF%S@f5I|8O z6?e#^tXKZnGb96kL=tP?RwzMJl0h^yx`>#8!8C}Ug8`2Sir8_m`=Dgo0%;h8eesqb zdoi0Y9d>rf3+*fID~GoNx~4m0Wp|@Ts}JKR?Q4-UMOG8)J%Ugae;gku*G*P7Q4!)G zen0%F1arT_1;9x9|8^X~E6^-J{viGRVF&~Tnll0bB?G}MVSAIYBH_Q8Vw4Vb?)RLuQlyeyxXW$qUIC+Q77 z;O~>8QzCF3JV+F{e@qk}!l01<$sw`fAslG|{5Ki^YXlg#f~;I5GGP`mx?E#_`x_1q zig2dXu| z{Xy4miuEEW$Jq(DE|ZD;7HDGgMIo2KEA@*A%iB0`2IqAa-%rZf7rH?XB8M!xNa5y&M? z?$M#)#sbE`V8W8mx;N%cd%o}^7Nnk|th@XMqdyYVq`0(tWy1C$XZst!-Ovw+B^rp| zbKPtsDJbLE%p{p*4`;W~dGXK?ne0tS%0lJUXx{Svx@Lu4UahqGgpnji{;Z`jFy@?{@_AbldUrjG6H z3Mf+ji`F#8rKq4iMY26zlOe4PgH((tW@0vKf8S?#QB_)f@z>LzU)zHS{}3oldl?9& zyqN)#kCpOd>~0nrCM|OQ!fcnJ?H>@om<)|LU|Z2Ub%0*B1E1NQPIXEf#+pl)cw}Wy1*)MLKw(T8iu$)m|0Q>U(h%uTi%{Kk z!8+lT@&^d)xyClBKF716S`0w@)k#s0Mx^it`7xvaK{pcO-K)A+?_dK}6Sy!4XD@i_ z5B-E?X%^J;mktCe46+K2(%vpm@3Q`>j@)G+7NK7E#%t8X*k3fM#4BJ(T@Q~g0}i=y z(iki-OP++bKfFuO{7urqkan>`nj@P>3mO6`Ijyj^8V;}q#59dW#Ar07zvI9Wb*CHG zN!fh+ghrRV8OQsU;b+3X#TNo0I2ED*t}YZ;hzi9p9F2T9;iE7^A`x8;M0|k+qA*1X z?j3~;P111Ud4Y|L^zV905Xu(Af7XA8#R}b~DS)FI36(ucHys^;@&R#FYOEoEtS}Of z6(&m;>wmQ=DLDi`%ot>$alRPTM|LY5(FLnCf8$x%@L*6q_Jy23`_OBg$-IqMNE-P~ zB7d%$E8A7dJz5I?fLbmkG(&7DJXFN^SyjxOvRErgN47k#xb>6mtBF7H42F0IR|l6E z&#OkM?(#~ThWnlBs~RfJ(s8hID&sgM`g1#i5h2U2t2AsFOn9p4xToJiR=_7K)G#Y( zCqRvAUJs*K)S8Ur)8UN?|IdctK$@e8RL)yrA$NaY>{IcNpT#b83!+RsLaKg~VWnCj zTzJbYl0H34u}u1h^$DmVgE-Drg|CZHlY(SVtN%!t6jrK$STGOuI*!c)ku$xA;t!oo zfzAeXz1W*3j!>G6jzq~g3N>nY#=AeQPc=A|Ltuy5dEDvfzf zjNIv@Vi6t!^2x0T@Nls0$Md)1VI$S0t%bs?JvCjd>RX9@rpw5no-2onZ?T zx@NEzzMK4;CI!#alkG2t*A0S^g%ZM?cg9MTLx@+HN(txDofR&`zK(^m`rUM6y32Nj zzy`P?lxOIfq0C=M(r~i@HKkQ>7CEQ|+ZV*O5}d;RXNh3{DFE*AxmMI3KOXEGuZqoh z1xHtm*#l@g4r!{3j@rj4>OW~PN%mnDFzZvM=1`do7Sf$kWJ=SscaR9%p}HeF5I28l zA4z~H%;h7%M772oLnPl_$+#*6glpX5TgDHZA=JRu#L1+tFx2`}i@;Ms4!r(apb9XZ zHt>%hGGJUqH44J8NR}>@(k)T5ZJ-WRWUKuj{|62x5w<#bh$SuzWT!JeM%0yKi2i*-zz)V_ zI)!@=g@*9Z@ek*2E9KGFfHuS5Aq<$LTra|PD6$EpOccIB)Oh{7cnGSHp5C4r70dc; zZDf9ziN6#b3z*bQ%Tpw$q;w5rt(InK z+%n?|SdzQ|)-`m)qsh^w#80oUadSi?qI%&M`eX6* z+W?7mH0MeWlfqo$!D7fl<9jetwfHSVn1vIcr;-0hS-}L%R~tzeMG;W=wzoLmU{Nc0t3<;aqkEhW~>4>$eGBDwJ4%Ol)f4`6z_PUy%|jQa~;xey&gPny;&aWc?Sm1KxREd z;E4jbnm2W|tKZvHbjtXqle3zwz2v>Y{uWi+0fN3~`QPjbs6qFaWNUrtw{LYn)0>b8 z41$yR(n~J=z;6-ONF9+cvPeH?Cm9PVVsbdXa=zAlv8bHmplhLAn3zoBN3&LM!wB^D zi8lY`C-=m6O|cW!HICvOa*p`_)a|J@RTKNiI<9|&5RGe>?8&4+?rXI_o3gTVA9mpi zT`!c0?@@J#f7Xerp^?q#)HqiyrBdEuic>b5u!v7&R2Cn~=1%D7R<~PD%#nymA~IP` z;FeYwz0bf~c-?d}iILW7okYa#F}zt+v2dO;?)5!@U~aP~l~f7~|4Ny;L88r5}8^_7-`X??@Ea zcS-D}mU|6s`i(mS@MR$kX>HQqq3Ze%sFk%8NoT0VPJcv=%WGHgeB6qtJGyMozEG%j zq~za)%p24UFUB26=X4F;8cGw%=J#U?8qkDEuDzVIyB`Y3A8^q!v&igQQ{CjdA>pPn z&!;Bky3=cOFA-bYwwmKFk;?9LCxwg6igUtaUK-s!{~X66Nrd?`_gf}7f*S6GL-YE& z{cUrg=Hyhd+t^DU`sba`Hn9J@KMxx5d)fiHtl68XtjBI2H3e7urG2^9qwg>`3&=x0 zRdzuR$fo$?kq?B)Zyv@=&(;QBc(E+k`X-qs*3S-R==tF;w+Kei&B#|*7(?&7TcYsP z{!szwiZEbIwdx%r*JJC!fdIjU6G6or;?+FJqdOO5q3dZV** zP?5a_twv$;ZHK1D>X*Ct@)xUC?h=oi~U!$DpMO~Ep8#8x@ADgz@2bf6dv9gEl4RJ9j?skdhT5W4aoZvmt3>F9JGt)NPUE& zEHJP4Oh-zUdo~J?<+N9b8wOUr|q4%rRvfM-Y@`EtyW@`Byp3$HCwHu{bO{RR%`;o~mcbEp> za;#ihw(cUeUxha7NT9gfEYwXL?)y|toE$a1*lkj}vR{#~4{4JeyDxd@3qw?VnVRg7zCR+wMl0>u=LwI5QArOg+Q0D!%A#-nZcDdJv>E!iNEb%d6LZqua)()^%$v(d z!OSH%XLEYr%ZLU+N(H1Q4=YgMRoY;dE)N}63o62Vog1KNZd3> zB8}#tl!+7M{p7zpYVxu5%;(u`f$z!3K5;IbkjJ3Z`M$c-_vh{-hl)VyS%8C7r@O`E zwN=0?tWN!;krZ4$=_S`Edg;4+TeO!xkyAdLbfdyF;X12MQn>i0 zvvYRn2MWFMQ|8)s|1&Y0#pFb3FSdTDd^%NCG8f`ro9R%hP>hWhr8e$pqU=S{$j>As z%Ib5nz+5VHvY5c)yUFgo`wPHK31%9*WfhS|t4t9JA|t&#no;mCmDs2EO!L2qQYT- zv(nX>o9Byf{Y}L_%QOaL!fo_<5$b;Brf^Uz6HV}o_2UD{%GpE#73)vUdIj;zr=0RE z_P&Fj`+*+~SSu2;StVka_)o2t@f~x@p^tfuyeShY*h8R$UE{^TK2+_{#zUZLu|qG( z_pR=;_VYQifr(Hb({h9c!zZd0pzd3%8egU#pN&_JO0?$lbi&!mVQw^8&v`AWzdmzT zWE@glt8tT)=%GKhdsTjo#gp&UVcE#C;rHQ)b`ei9WgOdNX_%>FFv#Uv`yy zHS%f#zGLD-{du1zBPOUS6bnmZ^7LuoW|RR0;1W2Vmqkjnd;g%qo0Z0E+VsfknVNZT zRpGsQY1EBAy|d;#!%UE=hHX#Awf)rY9`h{lnyk<|B5(GDx}(?~GRVIWSIhO_iS@}3!N+8pJ~_BK(cE+;ue zgVyUr&b^QceXV#_jN-2z^th&9;9v`4v|fP`Nk!0Yd);dS2(-qaPbfhN25+8soe)~ z7zm`%DO5PpNi2AbRSn&qn$0={1XG7z8D^*(=bTsC&}B^JOUk>9bwh`HfVz>lbKg34 zV}~v8G+t%}8G3q5Vd`*jT{UnF((VuZ-s2ZrH{9xWk5Fwc^bN@$%q2(dPgz&L5s7DprAtDsj3NK>zR<8niTg3o+mR8c*Ofrdv-zbT5%Lq1eUf6bpx`-h<%RY$} zFt-=#+b+!q4P*vFcV(SQOB@NHFhA3~rZDk*do%#sH`YF#(!R2}ea=06fe2K3fq4o4 zAT%z0|IfZ}B{&GL`+aCs>#E+^hI$ZFPh`&AjlO)~QauZNHLAF101>*m;Ah!z+mp_u z*aM?<(e74f?$v1E#E*w~gF~u*UEY!<4)?xk;$uBq{pRN^u2|Akn+*0TAY62PIGN9< zXGjr^@UAlD3|#TL?>6>1V{yx2uXB9gguiXdKNdGvX>C~zQP>ms5PtQ5bQZMRya4=o&k@Tw@9;^`>{Lim`dK>iUY&C@BKploVh@&u<$dr~2>~_OMXVvC+g`ug8ci3I z;Lb2V0Sbf*_bNgYvBKbd(P_<1z{jdJcND_e@r=2X3Q>`jsUtK``3Aw|cCL&;BQHO>vuxtMM&*!MHQIjP_=XNs zg?az*FcLPihPS!EdCs*6`|8KdJl-&U$#Ri8 z5;B~+DDNAo+lF^iM3xTl;gOI1rU);0N|EzTO#@fJ?%W}624~!kmw{mrnH2z8E)WAH z`mNh##H6RZna%EwZac~#r>l13V9c*X&W?Wn#m6jbtO>3PU&X69Fh9?FV-#yE8moku zkA8v8EU_;^oDf*9{b1mMPEuwj2TCI382P$z0drBtQqr+%c3kJK&+GLO*F&6FUz2+I39B70Efp!+Sy_ zU^YAI83VzW^>kvjU8>%`??R1@P?gwyAL^K;nY8|fC`(A69g_H>tcNEU*6o3#Kh`YG z$oYQx&_HG9-GF=!E6L)KNTT;bdG)iPf&r_M2G$44{cBZ1e&zvpfe(uK%Vim|zHVql zE856uWxCtCZjo`8NpyQ?+506r)#X>-`dh)?T zgm;}7!>RHp3^)BE?I!5KI&@1w1r2}J)HbZv=dr)*4j~YC>^;h4GL;S|5&wMHcuu3r zY?AT$f*XH57EJg+Oiq0jFtnj}NxOnB2`2JG*t=j?4{K zY{^6Cnrnn#Z@*spl+8>|-1rZL7h&?Ah$x*^epn!nqfZ8O>p-a^wHXRK+SKpBiDFXW zWbiUqQ2{OqS^F&rG|FCikjj1BauX0`uCps>=4%sUE^brK4Py14I@wX4^+6^H#Qz%X zXoNx@{ze0W#jJm!MQ{%}sbWb|YVJ;>Rj>i~vul)r_>N2R=&tT@>o6hia&)tm^h}k^ zgFmTD%#O&YPMwVJ8}3g^2dCJR&(~3qCm?nP@q5dU4uy!<*B+O? z$jx!oOl*#`F2=g{_|#!ca)<1N6~7C zx7Cw&Tli1NW4aB)gFDWIpmQCc_h(C%TzOTUuuevv&pbLL$?8r|M~t6#oR|NTjS3hP z1}q{``iC}F{yY|#8wERexp*FZJk&d={8XzVL?0mM-*ei`_zmtx6Mv!JAml`1^89wz zqx~H%y1VI;L7BA@1){X?wq{m7~Mr5k$|rh$?J)ryG#!fC`{Y#GwpyAx*ZU~ znrf5!0J;=%hV@Kyn4bK|AQBv6(*Qb^M(3b!M{N9f8w${){|4&~TXkrH5B{BzyiH$d z5TXvW9v1=R8V*R*VH|9Jn7|a8I7xA2EuaOCi@J9s@WTf%D{1u}vg^X8b4zl>q^;#}Jk9K8eN_BuOCG`O;IyACBra;W< za>pt?Gg?xxt#ooK!dS*)OvCfS?F;sUKStzxce9!yp5D}*M z2Z-3V2PNfPoS$^1L%FoTRT@PCHKcTUcARh$V_>79b>@Z`7rA!ic3przyACTd*6^71 zRL~y_T3!U~&Q!IarRD_ZRf_+cUHI>3p}I zFuN#1THf$I6m2@suw`*p4N1pHZmvhws$ft1j-o-`dZF4a=eiU=5->~H>x84?FNt95 zak^!(+*xz=T9eow9ASKR)Ju@}y3gdhHG9fn6|Z>3sj4|k8v0FOG`jZ&=3>2Sy`0wu zM!uwfY^}vdLRMjo=*?A_74d16i~AGeU8x7wlf?28 zZ-Y*&hjJvvqmYEzr!}{=gFd3HF$8}xgvdr=WP{Y#<;eJ2E+@~>HqAXy1sZQD*n*j- zdtx=_>vSRv7kh%ltlWO`e&S_Dr+WFKWv$CHwX8Qv-Ywjuk$64c?&Ud1hD+18TdWVT(0kPf}UT7Y&@u#E64iNNE~X=z5dry?{;kT4Pdo}r03?Op!?Eb+#! z9VNwN^U`OY3U}Ni=(aSQOkUa7v*lE~Ggb5&)COWOgc=fnH`TUr7=ZL2Z4gMo!k68= z_&Og&C=9AK!`-Gs`ou-vt~cwk_!i)j-`Z}<3WSCUQ5e7z&Q1o}vxb3pc84u+k+WP1 zJ&|Ot^o@#R*ly5;b?COwUP{W8Fo!S~kb7*A`XB>+Wv#6T31AY)ueyjp8 z1#>Xu;d|mUfA~UzIB)|MBgYbkYVn~WgzH94fH7*crMe~!^UV^j^*(d4`#R~iESG$~5uU~GMSYR( z6G*HD0&j6|bU=*^L9cogiMVA+L&N+-w6L!;Dw&o0*+${d&(t#L`Zb?p=yq_LuvjW# zoGd2OCNfF0t~}uBm_wI7aFK`Z5lkp3ctl;Go57oYGst|~kUK;?0r?fFEv=bei=_<( zYX9y6uf^#wrWe`SRz6c8pCPWKZf2?}xoUZ%Bd60_(58l7T zrwQ%$xc3Bt2zNbgB9SR8x{#yp3-JWeA{sSOF00O4u5E+)wXvl}a8k8EZufNnTqw=v z4T;UwB`2WHy_)E+f>=PRG{i;M*%Yx~kYOLVfD^~8m)r@I8rXAR513Wtp%Oed|Iok2 zSfdXM+{$m(tD2^(+0e>B>1EUTfkxRi3S`lknArV)qzuw`G#sG95_~1|lrNv>) z4=4d{)o5jY0NO;szyXGEYS`baagdnd7BFq=1_-_6QD<8n5tzVke_)f_bb;aj^T8ib zEsl3=!y*fWP|TY4>W@bYPD6?)~p<&v^_({AC<*>%qkwI@Q##0dh*|EP5{UW zaCezUe`LvTB{Y8+LkLL3LVWuKkBI+xP5&&Fjqyq0JPJ?wkN$+O5a7l$)^(~2%s(dL zBNxowB4951qZA(w2}6@;*d@C|`3KhS;{L)zZ}ntkf5#CW8VqNjf5xaZ#qSuLMnQyt z%-T}Z|3DcQ{gc8+NY1pBKU(3|2_O+EC)`=t|0tXy0|axip>5fin#|u>@!2l z-*-L$U(jEe7IxWKkL>q}{LNt6Ncep>)MC^t_1fi%UG@8v!XO>E!gSklj>=*?@7Leg zoBUCo1_Ydvoo)>&M{MIrU;54WBhC+~?c)<2`Wp=<`HOrd*lmk`$CFF_0)uU;{__ws z>Y_+WKWFRB?+b%_VK5*Ih3WuGeTR%OvJYHc)gF-|Fd`(hxdjOthWvM&pREtta216L zFAC&}eyi?)DH;HPH;>MDj(JAY&hSanB*|#3M0$4_-oy^P5g7QD>XZpXkDHg-5i@^nUV@l~&uUJNS#9;1_Tlj=DOAbaeipC3Et6zYo zJMf-`GQEUHE5una{+t9xs7u-+Q=_^~6p5-{^@aXNL4y`o$*2~WX2T?d))GwO-C|zw zvMmfeDfymHuVDe119C4$L!}B<+_XLd1v8FNuCc=AAFUVwK6rNvI8<~&sRTi6i(KPs zCfa603>kBHY|OeSAf{#rsCv^ONH%0)M^zXhDgPCn;Jd#HuK#W|5^Tco=R&*{d?f@g zlw*DzSis94Z4JR_kRsRwhO}J55lG{q6YYkK ze@K*KI7EmNc8jJp-S4yzyalr`BFT7p$nP8pKm?26M`6xL**`WBo&;+3hcb#4X}~1; z`ps6yC||wUPWH2Q%yI|7Er)+9ggPQa;hbuO0;MJ;nTmTv`r~a!t~#wW86+mW6I8#O z*I3_E&BRH$j*qkUTpEXg5^W+`hRTpe+}bfqCsMgTjBrlZ6C9e!NQ`dH%cLT=*N?pA z4lj9i&^w^vP%>>k_Gpg8a0&xchd_jIr(?1t6zMOSf^r{y{S4D`oJrdGQ=b8$eRC*i zSKj)y{lmVMb6mYyejnbp0fM={?$!%+T;iATCO(>1WEMU4qOY`+yrAa~#90htjjA8x$;&(>4 z)yhk{+T@}GUH6y%z#7l|=f0QwdHu(y>XXXYrzia(usck4{#w)R9l(C;TCAk~90Q;U}czh z0&$22f?xpRtKlvCx6uTFdlCVT82*$c+POSaO#1AxgrWahQUi3LQbsnjTCwiX8wcm1 z2n&rM`VMS#!aJbL*C-)Jfj#!Eaj=O2HGhE!_xFYMaEeXDI6RY23}6ErFevn4Hn7mM zN!MN!AQ&35{aV`;m~}{`7{a40j;7H9IW?Ia`Fm`e&yC_*;8_)@ zpb_E(zhZXXpvMrhP!DNpIGHzk-#xJGv-lJoaeMV>vgyJOZ@4Ydl4Sz|?8zZcTqD&g zW}HAos`r=sZ#7#y+oRIo>2kYkkjIiN@tCmfcDGS+1qh}gQ-F)bG>K#%`3_M)5IX+7 zty$ENWEMuz9aF95(CzHIVwyAwzer<?|%Y_NA4`mODdg2;G#M$P3r{sx3MCC^lhH^t9FdeubCPZGp$t+PJ zNYte_OrIzM}e0ewQSIo#xP)#r((?Sx`|gNY?TL&t%MCV z;SyIAZ+^X2v(?RdY3@mv*7%hCH+3=s2mb?267n~6h^?CF4o1HM`zkjfsP%}I`QU}RA93NzFHUrY2E(00b@GL@;FhH z(+<~BFSK6y+0}8rhYS=2dJIgJKuC3JdA_Ccy%vw0ygpyb1T|Xxh}+{<0$UO><%|Q( z;YY2+hB^Okx$mdHpr6NT^4b03!m9bOxZ&<4O{7m^qk6Dv7uTi|Y1?4CDA=ajR_h;P zVYk-4d-QG-2<{%_^5f}kvs4p=A|;<}l@w9!A_>?b1NTyY9+P&N)br(dZ;bPn6FhS` zyu17@&EO;T7rjK-eBU@E-#L?o#wQ9lo&md(=s-Znz3Z_tkt5hwMTdkDuv`%s)T%X> zVeWjajI>sDiZvb8CZj~eOT?B!XN?myrdao85HYr9T*A(Wr-;a4nY^-XaU6WTYu!X# zE;AmO&z4na0&cAooJW_;U`f+a!UdT9m`}P;IuEO)a0m=`T;Bzr+jfwRgAUvilQ>9u zwU|iHC=i071B`)~BNa}11@_ng@T z2~Q=fIs)9!aEctRvsYm0`Nj4DbOcDl=T5DKz6~H$!t)6~iS2K-#h!av@t@S`xeoeDWUJU~?IVYF{tUuTLBl_OPOjix22+{ zI%#!mtaN;E8%@6L%y1wZfg~Ug?6Qktd(0l<20T-yOD)2X<`hJ;Dd7H6yjy_DN_Qh} z_lLG9o;J356k)ypYWjfwE6brf=@gUg`>}3Y^z*!^{^1|cVCz8fi)aNCEh}VITTdsH znr-Wyir{fz`$K`=3@=kQFLZyRO~gOQiW!vUsDMh;#syDKfP4JY+EYn?qGcCRa>SYed`gy!=dR^9;ef zdhglkTTj81&E^)GTe{rY+3et)@ab@Wr|3I_uP5u;j*a>5%fGeDD+nTRK%c~ zOtJMVWC+iMIeoHDD6VnETm7&C;C6axY4hH$)c?5NTK=3j*cawo^K%OF&gI3>qW+Gv zB)vKO@yu4jw~>68(WFdL5KHptkUWV#F-h5MeCQKv!qz>?`!jXoueWC#QjfQ1Dlex= zw<|4-a4~OE`pRa9?UYTW;v3JU2AH)F&cRki5`jUdUVI`X=sWs|gy^y6&HycO{-y%Z zUm2s;4x{&*WI2bfmln1xdPO(14NN;yZh&iR9s-6O={{N1)kE z`HOkH9Q94J7s;IDUl=89_2a-wd!Ma3m0=bbh-B|Rv$6FPJ>L|P0{sh2)X8;v!vy|X?mX@{Xzb%-5$8zDc5>sz3_V}m7*L_#pduwC(q$6FdghiO2j%dmdK(JEzh>0J2UPXFHh3BNZ$+w~YU6%r|VP62!u=`#>B ztpD;8BYXiYB4SzsWiN|#3vW$8oHfQXHf=sPUwn(+yhq5wBXtLcnbkQ&r^hEl65>9? zaJ;lDQ%z(S)5TC)C>6$)f%{`?3V?++7yY1z=%XKN05q#*x4qA8@%&{JQmI|NnKE)v z4KU`4HQN}Z5=d@#Nm%MkgMB}owkMerO#1Ow3YV78z&SR#p!Dd65H%XSPfW`#Oeo?{ z9}+f-(X^%74Y#c~@B`EuFtHo_WqX-vsS{+dd~7bE!M}Cfh%nO}WNl zN6Nc1nvg&8l4!8vIk=pIqBo z?i(>!2}VzOZ@6)ywH(p}z(wCg_{yZ!Ae{3-F?^e0j-EXca+jf(ph~|}3&$*ipb|c_ z!&mc}uS&XQ#+*V=PY?9oh{HlPH@)B#m{$&k%ZS9v?z`!@;Ih+HAe}CpCCxxxsh1dU zg*UWg^sv1UiB}_m(i~_)D|a*(+T#*-LxVK)%7ffSeC&R<_kqoQhL1Mqfzju2q(&3O zsH(-kWp^+;<9HX7)0RZrY8#fH;j}fyO;Br4GP+i;`IFz5#zVE3Ppy0ot#?tx%eb7U zb9)~0EFwpcjY8Uj5!U60`^HYv`9MrGCbOK5svD1w??VZBjfju!YA1cKI&)n6t{gCz zftw=RjmYX*w>Wkr^-3D2ENi3U3&t@=k2E{Qhx-P0Hegcw;U()3h%LII^bo9|Dev|7s$@LQ6y=iA;Q{4cmx zq%mQ#8FWaq<;lD^CuL6D6%&->(aLu_6?&9&Pqx5k9lLOKhJlm*hT|u7?fz>b0gAM# zqNMn@Mbeo1`oN6ytG9;l_SPe?TKJ_o%2VKC-vG0Z8rEKE2vUt^(9>X<_@h9DQa*E7 zg)%ukw!MFspEv~4oUog()=j3fMc5dao4afrj;+C>lrdLfY*l@*m&Kee=HCuHD%#hiAU-Djt>q_VejG zr;l?oHpd=k=Y^T=&cK{jupc+7*Q_J(_^H&>HW_9koK2ViEtg%#8o~Dh#T(z`>Cd+@ z*y9O!#RP^d0mbq;z+aKNY67fMhl&F|!ll^xwyy}-BvQ}W-U6SOn=hLqQz{1!qP0zS zI}c7i){L9VyxgCh_u!QM%9GUi9JeR?Gs)6P=RhQXW6yX76+~c-OwAm=!Ubr2 z@y2X_KIV1V$$TssUiCT+|EkvMQKDQ_)d0u)fJUNhVm-6eO_(a9+ z{aDbZvX=2Oo|U4rP`m%gk>-I;4*$!cc&X@GLmGkOP#Wo2)YuS&@*~o-gSuvPsPrpw zdG`_l4@J_ZDvSnAzg!zVy4ayN!6-B^R|Q{}ep~j~3dKZh-Q8`2aezDy%Pc>qKVUDDBi9>a`a%4^nWLkH+~4 z2knD0T=T$_LB?%S8n zdtM4vNFLj9NhGVDrVaMFtm>R|I2ETTfJ{!V)|0!@qsooXwDn<6^4>|eJ(D&4`F<|mpsZ^KiRQ$F7) zLXBYim)wUxRNX8CU3{3ghO@NU?E8pxndd)2hgWYmxjHwoV4oclkY9Oh=5$0BTLhRB zIUS~V73sc6>Rb`|E_?=l3RWFajWa3@@{cLT@Wp3W@=arro3&k{Lg{$YqGC*~lsE8| z>@$@G2SX1-KN6@-wnq1rKHD-b_&ufy_&tsi(CRccAZPPv#$@tPuA#gJ6cTbyL%mvi zkYY?93al@?dU`5XMqZbp+VY zmNcuGWN?6T`eSAddnJvmcguB1Dc?UU;8tkUx1tdz7U}Xz=Z~*x?cRAWy_l6;&EVDe ztm!40MkiW4R^$2)#>TuKuDIN%X4BV{1fY(Tv>?+@@K7dt#uDXD*eQ!_z{;fqd@v9U z{`p@3+ZpV*EW-W}Q1tMh^QD}p)vhjy`K5Ba9xo#jUka)_#uKDcqtu}C1&wlzV^E{9NrUC+(yw*RT z)tGO;e$o!U-qhu9xcxkLGwTh0KU5x}jf3AkJz-xYTF~1>ll%69V!zS3=%6bGbh0ZK zr#RM;oE{=gOaBeQCX0*HIfg>+gGX(;f+n&jQ!2w@3o0n*y=6rOjefhj_D2)1w;DE< zs=1}krIu-EGr3ay9%T~rX=gWD7JAn{RvzdkIr0Q#-vv&n*b$Sa&W=?VW5ut(K|x>m z^xJ4KNx;d}Ygq^|=m{Z}h1zwJ)A}%8KnXD31TaK64*$&!L6A6ieXMCM0tMah%ma$a8v$M2*2pxYV^pQ^1Y8Hgx^RQo6tIm)j-`e?e zkT8Ojis$k{v9N;C=;3n4!k|J}cPR-Fkc4zmZ~sMX<(@~omBcSDMv8C7r?N&d%3Gzr z^i7`o@s8|})*W%$%`V;kld6}`o8z>%?x}KU^qQMY#P#z5GsPp7&~+@t^LM;ixVZe` zC2CjiL7Mc*7Txt$KcR+_*fVg|**hO~w4D|7N_s-r8!`Ajr54D0tBpTv{187*LHa&2&SFLMNc z9Lv~y@D+3+!Eg4Cio(q47h7gKeFK7Icoo1U;@9^MzD0M3zMQ(pF%gByL8}aPh z+Tz~kO?dNQy??6tmR4`@+^yMj`{PuHm;M4c%Z5#FPLQQgVht=IWGUU-uidS=%2`nY zR2Ei3nf-r^y=7QcUDq}Y2+}E`bayBy-5t{1xkW&_yOEAfcZ<}fyFo;{LApByHXZNs zd7k^eE<2=VXu&o6x=$jnOCe`a6AjyZSGx_Yc1n~?tJ8}&e zhSJM=JkTa$?HZ(z$u><$?P|luXq2v*c!vR4uMRKweOTVv-D2>WNa5K;fe(vyZ^^9< zLVw)58o^OtY4S$+#XBal#fj8WYq*!J!R{Pw2b}Q~mLK(&)&#cBLT{?2v^|WF>8G!l zth9G`Ma|&pgin8dZk8C-&Nu1}n0%(CIV6hQ^X%j+^7u4LQtg*uXOMS8*X>KOw%3QF z{8JF=8LrwNU9X!5ZdfwoUEh=V7CfD=DpAJS3 zu&X_|>4G=d0sp+9oV*e;&8qU95gfZ-dbO{G)BNjXWgu<3f5iUzHe1v}<51c{`_ji` zZ{g2Q;**zfF&^IdkF42Ao`&r{9qk$I_B3h>C%dHGjC(eIUlFoJEJMkIa6))z7<4qq zVO}j##nMS(q;_m8HhG_9QLBnc4Z)Ix5|z~WQPBAHF}9VmC`oHd^5Fg~*nUIt zX{AGR*{3uIUxr(uU^&`Hue{j>2iCvMbVcyy%T19E^%{T3c_N#JsP3or;#}INyLGue z0m~rLaP{*{*$FyfyF=v}QY{>gVue7SLm`*_a^tPPsMHuG)S!az8X(kp1G3^ z%E3AsXxSeNHnPbleC@7@_N$IOlYF23CD^EDzM{jEW#60r#rA08vpyEvxVW7jMlvHR z3zaWZvyS><0#wv$J;x=96*-vbB96nOiV7J5r3*JLgjq<+L8qenWDsn82CYh2TsOH0 z>Wo0gkh=IUCbQ*OQ{Jyp?5AC*(CZsx5@mG^=M) zYfY-Vkc!ExfLGm9iSfwh*7ndLH;0bl*`9|KF>=#eCx?wM+4yJIQB{~PM?zK_54ddm zH|P`-$Qg~~19s|^+W8&UJ0>-9&Ctfh^7ICp;6lbQ*v6KiXtB35;AWXcjYRcUTwf*vK!oigNl0 zO=+uq=Ob6j@8+9OM5j97b<4T5Gv_ar<~7^L-FxE|%1k7nFo4JO#j!{|uM?@NjpaPT zE`!${MPvt$1k-e6fae`N>UpM7Zdb}3swU*6HuSQ4n#toB1B2IRUWHJjoOO`XdJM{W zcpY_r-sdHgyWP~PSzYV&v}h76tmDKFroQZjyeoL0_WmUQJ(X~y(Z@7zVO{JYi-+UI zxUFe~&5_bipo#{Gq@{>6^0;mt~WGkI1BvCN;QKrO)DRLw=RaN%g zD6H}Bl|aG7LQ?WOHp5%1H*p%n{sGXvpQ)4cc^?)dqMi=NMC%Qb-KMrxcTlVrq)S@tckjuU9;oJINJXvmXJ$Jryc7KCfS}Ey{6@1yHt*a-% zk+o=hck4#Xfn+uis{pWz7*La#B5c~yI0>RwinAU*TiTx+50~8D`6wb2ou3S_K+|Js z0M54{Q5D%~-XwR}N%JpniHxf3pR-a=q?b34z^s~&1%3GLtcEQVDH~=O*U`k>9(rfR zO)0;olmwsSAhEz@{c87qy{tdL)5q^tUJNc zja*U*4{wxQn^ip8aqXMd(&0@Ck7%3>*v@b@=q#jpneiq<`?Hg=0a}^x(HHb&{=FLd z9W0(t17{a75Qy>CzMw7mnBOFNVr=@nQ0s)vsqd@AO^L@>^2GuwARr@QiM9tJQCNNH zWq0%v9MW)cxmFWCUD$UoBde7;S!9$OppN+~3qG{w6A95^p)Ob5Znen8==l|Lr?FVWs9^F60UOScKvygW zT5iB+_E2gqZN_BQ7iRw1Gv#zeYzAZa#Elx#rHHn58 zRLA!^E~DK}#47?1tX%V9_jZ{{T~^y*O>{+6PSrRgFh3uM}pz7RlAIJmbEK!pTmro#GTj7m^%XmOb})P?cr&U))w0=cav z9i~O2`mu%~G1K_j9zY(5VYawR^+$?V9L`DnN*WfSU(t0N4xE!^nNHj&kOjkVeh2pZ zhi>Gca*}BF2K65ToohCcEBh>qL^#>wk!u%$m2v zV_*?WZzT<%Emh#K-~d&6ahYf65!DI14n+-i^XDS8)JtbUhM~N2FCFTRHYql0m%CAZ zE(~oVkY5QTOC-Wx+f%B``iiMO5qyZu3`|0oxi5W5G|Kz zD$$U%08_`?PGL3Tc+bn`4)K6oSE@K!J{F}cYW7^qGSIzpqdG3#4uINTr>e1;xjS0N z|Llcr#r9Dy{(`Fs#~Ox{gqbavq;36F#r-!Wx{bI=mKSZtpo&wBut*f}O^UvtH7^K)^c+s_=3tV1 z8GZqq?pwUj;u#XpU2KOvl_D_diVui`nzga9-EvMXqH_DFV{+sr`xiMT{dUW8-xZ@b zx7j7;7gMifnIDQ-Anu7$?W8MS77yhXIRgWIq;>ams zIi9=m;(OoRdb6EBdJ(}($Op19n?@Vg%v4VHaq7y#m zS7S>qxi;JwZ@OQ<wBfV_&gqF(ah8a8D7TjSxA*}d%UsC>*V}w`7Mq4 zm%JcB#Bo0!WroC;l}|n!ENlb8eyEH_5S)V_44^VeGC*Xlw|deb`k!*sd18FSkyw+-{^_}A3JDg3_c zyt3bFFEOiYV5#|Y5a1~;mB;Vpk-=Wbt>O@iNoBU(cg4=o4RpW2k7yAs5Kt9U&P%57}HCwyHkAP;PoS_1{`7)ugO4k$IjdsCYXBrjbY!c7G}IC&()dr=05Nde3d| zbhq&hpp0+Td=;M%JI6OONR_zVJ4k>ltHJ)a zI9n(NJV4-TbUCSSy||j4P2rH2Ot*?EjIJ(}E#1gs%Ki4=LH^Ihc$lARF1%G7He{v6 z^iZe4wqTgvzOAiSZdlXg-@X0&+J9HPvsg)XFa4WGW_t8-;$VZVPE1w&1YOu$)$@3- z7u3~ZJFtIF8h~iy45tvRGEd!4lUz+m!S8XYra^oyHAA|{GJCuny+1p2`PcBp0$Qa0 z`b()`%^#}LI7|`a%Z_wVufiIi+0Db@Qh>jP!jJ()m#L`#k2=SHK7|@<35mOoeogev z-PceY@hDjha0B}X)#W4R=6xVGUhVKCR1LTuzkEUV*H}xPryhSz1`}4;WYPXk@M{Av zcRq6i3%wFBt}>+C)Kj~fq|M9VGE2aM`ft*)AABAHaMxb&lU#a4dv9T>#$@qF&*T2| z_+zRAo&Or!jxhnU+*U}!z356A;00hNB{5Y@ZS~fWK4)Q5Tx@Z{RwJ= z07SQo$10|sa{KK}4lc-k&s!O=3^OaQm1K|ipRe(!SLpQY^Of4%2E-afw1tYlF8UL7 zDfUtr<<6l?UCM?XHqpdY6EFFmNk8uL^A&;{rbOjYT;V)Rqxe% zi=&iWuj7U?)S>l(5?p##Db~#R9)i&y#a77|bUqo4XW}e^sC{dD@kI$LJZG|b*T|dG zOwEp=_=?Zi020{0WCh=jC{dfkF z4=13@qL$mGlEJwNRgsRH-B>E7qV%=J;;EI|ys!rm^3k2Gw*SaSY+m9d7<~3;55Qg_ z8|_C;z^`vGfdwO^FS#Vn2=Ey6WyD#Sa7hAOZwnao3=p@;ZoVu2292~PC3K#F9n@LR zX(O0ZDIC@!>)QTal7J{37Q7{6^rK!2bG2*BkAUJN6n4;y;w81s{3Oa(H6bR2Yq|;3 zsbbd}L<4o1d^8hHsnUg9;*t;2akv9++J9<3Hp;_1N4@AD=aM2L@rKgB%&S-G_A1V8 z6Bqo!R{gR0#~^|7DSl=DA2SXM9XZD~T9Eg4f49cU5K(!DHy@(J>#0)UBNL$$WipmO zveA|F2cbn62|1?%1NFu2@otY)+$xF0yv4#$$83a`@+>>;#O2Td6?YN6vWPsrr)Gih zo48L+;^5*NtrVy4&e;Zz>wl&!xXHpeCahA+v%H};R|q9uEGI557Q7u9woI6n>nkLg zE81o)_PI$3P7-Y1P>ZAG+(#~)Mmd~~63-HHM0+D)8JDyY?)6iY8bsJ<@$&B+9xu4p z{M0I>C#U{BAr9)|?T4%m=V?Fg87SjFhhOVs>OBT}mQ)zXn_Yj3yE;G+Bnvain;GN# zs%B2fV8b6*@km#_RaVXEoG%?Nj`=EG^k0S@OAM(~$-kZZc5^p9KgNd4=u|kH)ca1F zI4@eM+f5R!!O={nyRun=PlC6kD#j94@2^}Se0Vy{CaV6|jsX_{Rs9UN_F`Ht0do-rtw)SZ2+aE- zf>3m?!G|*C9z;eC{<-p8o9-E#@!k66G`4i|HbWM)VAED9y#M@!6OliZfIiW~FyN zMn+CAZMba0q+753N8g0}xwy#Bu!OU{?^XJGPRD?IA|@n#a^F_l8aWcv21lhy$*F9* zU(DhBv0CipVUh~t9G~&Ib&l~}+)!zUE{g80YsVE1IOlj@m!a-Z&vC5%DIqKF0+&(~ z)ZXeXoK5EaB#leipp?d?&7uYE#wP$cVKFX$cjH$n7;pEBy*K(*tw z&3EEG4zmJgtz!OO_#ot(?SalWFSbSmwp2LadH}_!g1*jNhyBAQq)!O{_#&ZT_^~3X zm1Sbq3~c}Bq10V`;94p>j>lyzZb*;=V)V36;H&KlEf%?1NHQQ4^Y2O0>W`r2iYaAgQAsUr(duuRRrBp(9uIa>2 zAr(;EX3)$_0SLY#(OLW~2amV9vCn(bf77k6E)C(8O{N5+qECh-1`C9b^=yy|`F>|u z-v+DO7qbO#k`E6NI`W-q~0Jd-$W%$^+k_;SkP4_mVApi?$5rM8L{!xJe#^E<%@ zJ&0aMu7pTL2$V*DUv1|6r~CD86|b*8=Jfd)iiZvXvsQ&cSb@4mdQNvLDgh0s+HCzG z{)ffHZ+>*@IRTAn^IPz1|FrvU%AE3Kh{2@jYnu#iR+W(DVgfb;6bO~-Z7q(F!A~uM z*J|ux6&2KSVD1Y-h-~xIYVJ2peC$v&^RAT@Lqo%Dv_1VV96KHE2leEJ`w0v~;}};0 zG7)f=n)cS(ZELP_r2HP#+8iHZwW>^b%3j0~uo}hzOpX?>%Zv{ibm6!^iiAcca!3@j z1yo0^b*Q;_s*e!MRgMD+jZd5R>XoD*cmq%H$6 z-&x&PiofjarEmn2oZ(j(tPryxluk|j0ver9DkswWqJX%u(=c~lgZ?jkJds}KKg+t@?DXLhjBxuzXBfb74VIWEf zPfITHbajpDmC!lnT&ro(p>`9!l6yyV=11!3g$JoB;++cT6B%YcNae!?5K)wExY?USSw^)`6cLykMp}E|55HY)U zMhwZ>1d2Hyg>eA!M%>BxrTDk9%`V;0fq2YcCN+k5}_M1s;f@4mh;GyKT;TfJxYv4wPga zo>-|;6dY$bj8si@#G>9(bzke%jyqgoQ28NlY_pDd+X)XP(?0&~E4z+$eoUr9x892| zIIG>fcL#+&cjjx{Yc9<`lNydcP}vY;vYE3n$X*l>YiYG$5;FoMkhmsOYuU{Kb=_wkqc|P=Bj;~~EJ64TSzwY0fVY=C ztw2=H;hWW7^YA>)?rmN(ZSfO zaG>=U6+m?53d9SPb~I!te5rCBH4AOc(J#fHtFWqkmPOksa5|{yVW|=5;XFO?mf5s1 zD;g)QHM&oyA?DskB_~ICAd%U)10rvwIcrhMWdq(?v6;HkXc+y3!n-I(he4W?aP53% z|Cy7K*IX@g_8$4@Az)(+gZ@+OdNAs)C(-z+r3QV`q|q-?UEWmB0PUcw_)x;mlt|Lj|1=KY0!h6Y)v=Jd8ceQ2PjlSd~6!{hqGVH>XsR?%(Xf; zyoG41&yvgw^`dOeYT#@3iO6t3Oyboa5E3J3H`DE@YNydy?M4bD+R`RU^_kjAZHrty zY~~_^<)HjcPd1Bc8kzK$J&RjVCqaDCke)O|5MsFD#J4afl1VAF8ClZHHB!Hp!YUY_ z3u8Hp3J8hWZXem+L9jz)(4|k8J<^Nl<{W;uY~C(GA=FtkNc>mNItQWhl5G?nngVnG zIQ;U0Muq=)_kdrY1r4IAo+O?WUzmq(*iAA|KohGv zv&9lG+K@p=0}1xFfp~B;M4>#KzQ=klG{}40QZL-PHbr>hk3BTrSl50@g@zZ(rK%SV zPBOYZhaU)623JNI;n9TSek)OB&|RMs@I%u;xQT2wF9Vjs%m(r7aK>w`ut;za|7uW^ ztDSw2Xt?K$w6t?Nf3AMoK^!dzr3D__4|ZEE9v>SfF%!ULK+P5GK5|UC85=D4sFXUl)P55~gO0sL zN|VvmN|WIjjHa-O21D)WvH)W)*As>`I!AKG*Cs z);OdKWB9m}NTRZS(@W!56E#M|ea`q~9z1qeMU1^GX-ZcnDUar8F^d5U@-i`=oph$bm^5Xw9!t$l@^kK9Z6@_*=C* zT!qV^h-xe-e<5=@_mP~suF9cHA2r}ceWr3&J!_;epwx6h@LBD`&o3lG5n*o;B}$#D z@@}=XFepMLxt-QEZ-bl3yx+Vp5;!5#GI~#c?NZ_+ZgJ=SBvPn!RojBh3mm)hws^bA z8`ph$yq`0G*=#GvwsZRr%2?wy+SQQ#3o*j!DDQJ^ymX+4OqsXdxhMWaT($?E3qkE< zh27hVDzg~l&+pKP3b!MU*n1JQL$-a2m6{7|5OHhMta%4U+7N4TBCS5?J!0i$|0{mb zF5J07KzKuG{VnJQQ0zUx`feu>aF90bJ)EGwx8!<=y@QotJoD991)_{9a?zAl&X@Md zBTN`6&_ghS7~jnNrS-jSC!Hnh5UW7nu65yJE>+|W8J5#(ANswTNpECvLlGufS^jcY zKmd}JhCf_Dle%P1q!*7x+Ob-?A6BUN_9qDDK!w(qgfeAThtPV&Ei_r=0NI>JmKK+T zuL1f(M4!TE<%qAKyRmq9Lsn_ro>@!XvrQn?7L^cDtWM*-+mj0~a&f|MeT?~cSJ?Cp zv9xt1{W(?f@ct}V_QP-X)1cgnv*%kQ3}hvooh(?nv)FB8FS-_Kg1ERSM(oj;V^+85 zfnIhib0&gieNBcE&c9v1#cZ8^_ua?6wLcV(FxoADLvWFBrMc1 z1*XGe+l-`cM2}31$)&;|PmGsn5UxAISE-}^zS_m2a%^?Gu~Mg-(DAfI9S#8_JY5+) z=5NSh6|RBtUOxpfF!U3*;-m(>1`@tMy<0z+np4}EG^3(Q)L5$aBLupYO7&T~jS=t2 zCWMx4fdBe|QU9}hKl8pgJdgNLpgJqHe>Z5Gs|$*vR~}$hV{@r?Q|sty?azL<+Fa)| z@>T=}jmoWRzgy;MvWqeHc`y8V&if$#c(z(O_%lDSg@UDJBIRVYjGCfu)vpBCLl z-|a+cJqWqZd9c6~nFeE~%&Ay)-w1KW8#03(N~zm_HlGK-^~|wK6kJ2VS`zC0E1;=D zJErRav6Mozgvcu0`RN>Dy8L2<%{y(%C3sv1pL-otizU8$S84Appo!E+qnP$BO}*vF zJ&o&!f9}stews!LQSCQ@a3dI>?`RguhrKw=-ODU;n+)xUm+OLg^pUO<{#D|p2)?^` zG-eMelryqjDS_U{Qok1qOGtM`y7(0@3A)N%?wFDBw~K7Obe#7i(v9MMuc=G@HW+%q z@N!dwI9k#f@&T?hq_ubu|12b2Ohtqw#6E=%9{eQg7fPK4O}ZuqFL03)P#gGMP3n{y z2O`qvhcq1$cibm(i9grtSzYkBI)~6!v{YA;ZMmy__=uM>w#fGJ^E5cj8s(oT%QcR_ zW;b*sne|8M*bKn1o2U9^d>lEgf2hvwn??1{?_&L~UbxY)$S(V8Q@Wxy94#~5IBZSP z&DB^lWed%H^-g!-3Q$teg?fA1F#W-}D{8y6$jLsC*kAt+-`_%mwRnT)KYe705ESN|7^6od-PD7zMr82m?I z8wUBB9cXX&g8p>**SG%0w(KZ?&(*7}R{FCY){s_MqCdHUbm6}~-2Z_%tngpygHbi` zW&h*b{cro~AkcnuHf_4_S6~+CBfLVpt^v`%+PzX?@MsL%JwEaMYv_LCt&LbYdAO`v z+Vp?6`?0;q$=e*%jIsX5Px>G12Z;da?EmjUcx+$19;@}fI~H)bzD91kA60ih+m!i; z0W$dWYyGj1#G?q+RjB0{-5t!5aU@Vb$4tsKmPewEaL-`bnFcMS1?Ih`4Q zX%c|{wdegFN-R!zQYNu)!E(O+%YmQG1`cftZ0ZKU+{WFN4EHpNID7ghIn-OjsbZFz z#q_Tx3k$&)V4JrZ|BmZpxg&RC`L}c4F7A5fV**M@fCJdL&;?d2lcq52Q1~SDM|WJq z!(OzFBT5-ACex@e$)?1s(Hj~VwhR8%o7cp!7hU57SD>(|a2z-;BL$ql^>)^gaxkOY z8`JGJ-!vV*@r!L1khdd1Uj zg$iCH0%u6tUwO)yb9(55jA+_YUO{a=OnKj4p%mWh7k>;0uu})Y{w@t9joU$=_hkHP zYmYZcHm0i{|5H!ih0_a*581wlDOFCSuD)gA;F*{#Mp=5zlNu&jSR5?BT9{1I99-Ie z8N2`8_{DMkQ{I?_XDi3%T^Bp=iu!QU>=x%0I8)KTm(_pc@nYUwGl8oNg z-RRUn)h}ZRr?2LR@&7OkegxR3S9$er@~R(LwHOVD4XG7#m~T?V)n!#$zM~hox1|Zr zIB@=1L8LkqdCIWKLTa2W|xf*FerQcqdB3$T@7uGg zUw=JtO$0ESZc3okzuJKt!oiA$f}DS+lk+3lMFTfL*VtW;_>5x0vzP%5C-9p#fuz>b zNfafv5zCqKhHo)MnzR_CtBgdGe^{nYbHL;}xD?w6;`3Z}&XKN2i``|bE*DRVlL~s6 z3Go^%a!<55quvy#>V}cBqzNoFpRGitv-@u8gl(U&_1s;8xvK;`!>a0lBk_L#g5RU* z$At~puT9HML9nocSNu#r@MK<>3;*jxH=hbwdR~ErdN7k_MSrur?&kTEeC)&Ln1TJ& z_)IuyFn#WQ<*HQ}2@`E1bx}~tzmw!wtpKyj(`16qs19z=T;Q48Ad-33_g?MTVRU7N zyUKLX&xXVq)^K@`VT-UX;T;iIfA{o3fzPxoyT?3pSl(mXxdyg&>!t2ZfvGN!-R4(? zL7?JLWU8Ppm`VxCr%fl&yl!gC^(YhYpgs z=@JM^q1=FAT^7F#PO*M*E3^Jp=BMSG8u5s2HuMtpq`aGz%H(0ZKMVwt)o;6<_K}*2 z%_igLnM4e$O1+5VjmtS_dfr>-q{UWm-TS=j{wUps0>{BG>^g-K%JbSlXbZFyqgxAB zg_zmD>thI1v2&5jHqI{qqGmcWCBUgnSXnlaKXtLq)v!I|t$aJFz{>m0|A41@PLbzBBbSW!3kvEY^IxT@=^MGb>>*7WT)Eg3YCJ7-{`Es3ZGC(L~1rZ;PRRwRe0Ayst zINyquF?V^9VN1>Al9R-^p;r@fs&yEkvO&Ktm0DR69;d^g0>#V$vn}wyENUmZKTxOY z;AY3B+P>kpBgFi=+Y~Ri1`r4=W1$X3*|Boiyo&!F(^`5AnJ)dAp8eLI60fz(-H9*5 zyl*?Iu0=megJkp91|6Ig4!mPBIS}4t0{KO9SbU=&`lCo@{Rtw3B{!=|Nmz3!>sfv$soaa%szF;n zU3V*|DpbZTyep}l_k^_Oxvc0jqKR1=k~%bE%^_L%n@W?yDO(3cH%$t|2^x2 zqG1wgM%~AuBaRxmgRkfZL~(F!o$!j$QE+=DVc1IQ7-fzdg@3(|ds~blcFf9l^>4$= zO$P%CvvC`l(^3t*+${I}Cn))U4lM(+lD31db}@aE`8VP}wiv8EBw_86GJ`&LqiZeq z>r>?dz77Hb3PxEr*|FYVJ_AP>*b+92t)S5=(@`IpO#UYCbf!NZa9WLY@46Ap?$Xh6O z!`|Mc^a`gbRC#r0hwf|4pH3&6EQ~A;v&{60ui`-K!%PG|0Ygj?FxiuxrB7_Y zG+saqAc0v&Iy#$|%9*i^tzu`0bv&<0Qm|4=)AOZupJ@D7g4R62KmCqYBv?k7tnvJV zO!JJ4ZP|?1x#H?cq?!R(Gjj%m)ar>R=D@yB16UkL^}bUOmMh*RAvEXzp5bSUtyTM> zEu+P*zkzUgCgc@tE4lYx^GSCZKfX8|o2;KKcn4np>P&zwkcW!FKl_R-A;Q-%y1<-3 zu*mshlMHYTR7vq3r@2rQtv;B?oC(^}wtl_N(!o3o;K-hz(den;_4tG(}%13zy*d?)*H6Tzk^!{ff4QMGk&}4ulE;&%SM@x1T1%FLYjqcQMW2hH=nzfjYC}1)GcQuPoC}urU}aT zgJTd~Yw@zX6D?)#GY|^Iho3v_{tP1r&E8bj2pB$ImC7|!7Mh)pEb(Fj3T?BN^b)00 zah_Kvh&-&VoEb|CYt8~BqiYv8s1$-?=8vs8$EDs5+6Xi5+5xa}0E{G?2M<}Q?Wwlj z&Z?NH&J-@L9HgH@Tc zXiTOEs4gM!B%xu3zEorv*Ww>qAFLAw{fR{ts@ zVe@w4%^SIqIJoiXcW83niO#9vHJ=+G@68mvD$3dTy?cpFwAts2d_IQL%neNd;HAN) z?1n~XMek)!W8AjUF=Y{qzRQS62qFVB8kfdM3U$jYbKD-)b1ONm-0*iGfN_FQ44Vnb zPoEvUIyXl#SX^AskAXf0{o0VpZLN^|UTZ-ud9f=Jja-3le&yn3sHiwvXpk80u(2!1 zaR2=vixlU}P0rU<&s_H;F3+``Vs(gTmWnNYTzcQ7+*WmAHc*Xf1+@Qe z`rJ+PeKx)Crxp5AbA==THIXjO@&?VUgGTl1ixAs?xSF0fzk9Qq1pgl`fJD&->Y?)O ztoqCwX&CrNrNEqNrq_02ACI5U#vzER4ltzw^&;ok^K981t=8f^%EUOfL-)I_>Y6wQc%Qpe8c97B$uKjdA7xBvGZeG~-3#N`ck>@^B z+LAu+#HRVA+6g&dOTT-$W$<`(rNcn4+?X>3Q4{=e&)Dc;J^!ob`c7&(zt|T4hq=&W zx1sMK*Px~qEyDSB679QEi$b(lV-$LgmYMv>Zj^P5Ny!ZnxD$O{Z6>z?G_n?aG};`X zSWffz z_uXNp41GvbH7Ln}MsC-X>(h;lw)%+lPLe$I>mfjwxd-Kc_%z?GCVwqVpR`x@@> zQVxSmh+#>GYt~)AYMhV7*9ct?x)gIOSXv$s${p_P+e4_ndC)spsMF+112AXUZF?=t z?`;8Rn&16QTz~e8MiD4cB;WX<5kp$6h^83jwThU;KoyE!m)(gM5F|Yw6YlDxcag_~ z#Tl|cdQ%c^rL4Ea1vudoaa6w77DdFoKBCPHHrPR2BRAJ%MgN2LPB|Z3l6VVcwAm@k zwrOjvplWE$a2k_b4eeUgIPoa4&pb3r*qQ@{*dDn(S*0&mqMsn!FFuXQp77b?O*^8+ z!DbpblJVQN81<$B*v57;r@E|#PD^uv!}a5jRGON!g%suRukKOMQjG+!tx}m9NL!tW z8DSc^0l$c#mmPYDViqfa!sCc9w3a78D?+?;o0`|H2f8LI*;EhZogZeU54GMDde?-2 zDJ@hyIW@0_rk@@iJ#2d(M)gKz9Jl2FN#%?44=6!{xXhVu73ofh8>vLV+x)3${yDR^i zYI~v27nwmJ*&R+YkOx=&vz-x;5T>T{PYx}OPBQ>jrZx_6oA@fJp4w&>?4xnMAVi~7x>~2e<$b4I> zFUE9y36}-YYxhv69o05^^10k>cVf=>UKxc7G+99@A4nn}QaK8etM_>~xKLJFB>CM( z-W&84)_7t=0wL{0zX-9=B8@xAHS3vgiJjqfKL?y|4N&+pp>mbo6|0`Uqrh-$d?f;Z zRw}3|?RY@-^_8Idu%mVYX(`#AoaJ#i)4^v&Y^0*^f*u!I$Him|F7ibC$_`$+4K`X* z&J%1ws!_(8hwvZ-G4o>6i0>uC&dz-pLYI=;6?#+%OfyO(1t%AwUJn>cPA{D%E%tJJ z##Z-(FkpS0R=Yowu_N(LxG$HN@x9fA=*P1@AP#z>>+X6Y9~;nEzQuA<%PljuLFYxm zx|jCh^l0_zl=6P3YFT@nGdY~?RIFklfskoTWuMi`y(i%wnZqd;v`7DRjp@7PD6ATSMB4sTFQlFhG$5QY?vyi)*laqEX&rtbb!+%aZsXZdgYQl zgAq*xe$s~}j{{G9Ir=qy!Hn*^VI z{;{AETu->c<3C7Rh9ySlRj4mLZXhjv6V;wxaZoZ_~vn7H-zO zZ`pf3Jo?VI^Q(Qcn`(63C)X7j?$byI^dLAe5W&$`kapfhOA?Bo=2_*#sz~yqJlB}^ zxHO*z4{uolR=OY@g&N)}f=SM0=P|IrWO8OdbANkai_-bZ_GirY>k$PylCkGYRSWEqlwBJhc4zS_` zAjcA#D^V$^p(}Xw1$0xLI&51!DmkLg-W93r!|d_{xE{h-SMb5`2Ka#c4CvYGh2wa& zkH1;`;-kheg1p*CZjkX)q>TAgHN+~33)Ls~wJgdY8Z#Y9+Pev=>0M@#Q>rNg?SZtC zk)OFyR%Wv$670U+^yRq50X(>Hk>tJt9x0#nZ=*7P-ezhL(~f3V@bO+#bnQOc3YEo4 z#DD)WQM_?+A5LQlPZs_{vNwIIgm&;tbn@0D?N7d!Fa3k6c`Bs{=33n#Hp$9EW01yh zXF%+z_6~t}0!wT4_1UdWSVO_Wju^G}`nR(_MIz`gM9#7a4IC{#e!R#^!}+WD_k?HK zm15t&HZLntg`Bjii!b}`SX*Ov#?Zl|nLmwg!v&hULiApKn!*bwWY+H}(`Q^6PS0)9 zWr;vy9|6oUYg?J{yk<2qFUMf(tX(_mnuxePv9VF-}AJfnE()7V=Yidum~yE^|tMblX_&Rk+B1JPTGQhBJ>IjWjgUEj=)?@#1_LYS zv}i0ZO5&IVNkDiZd0_5ya=SH<7bhoF!CSKx(_;S3tX!o&Qg87t{%wWoB=sIh`l$1Y zu$_vx?qgoX@GZ|IZr_ZK#W&X&Y^%BB_INuqh<5W719UBG#(ya7j=&Jb;En%@w%1P7 zQ(iV}-=vV+)$(FhPhu~76Y0m-D-qjnXz-m8u&i0vq@S70OP@OzI6kp$elOScIHfN* zq1GBRezVYFTtVwOiJvU(T2S(P++XkhQ27CAMzL$GS4b?mXp=qxo6kJ z{?AHS5+Y+{h^LueQ5Is&VCnGb&|wO&YjDElf2NdF2AqgVZGcm_8=3!(O2Ye{ZsxX= z+MjtlG=6N?0CYDX35x10ID1agVnx76FJvds&ChiI(s*hB&#^>Ix77}IuI?%4 z7`N-8_s7$7uROjir4L4+?p?P5xLz8GM-xUICB;niq%S5V`53M(U-Ug?(nM_svjRJ0 z<`e1_Bu_5Or(@0x_Zv+n>J@#iWx zW}}+-S>_}~O-#>-Rc*rTWCHIZjGxVNa%lE0`KU&3;7~Q$eeQ+^cCw)1qbhzIz&?68 zR-WH1I7r=pAaU_k2=}#S0P<-icvVjpm*FcO+~!izBH5cA_#?m7w9dNG%+4jyNXlA$ zbfgN(m_-%JvGwBJZie87rgrw#ND;osrth*#7Y?$f-iAhq)uIvusDr++&wiq`@;S%*FJq@6TLVL6?z(Mv=x_*!?kBG%pEIxJ zA#=@Ev}+fz6u(sK^u{2N_97G3f!?b5lCAQ=&PZwbMkZy8oqxBY(uf^>t3bho5*cSv`aba#V*NOyO4cQ;74ba#hz^DNH!o%>d=|J%pQ z7hG)iUTe=e*PJ6h<2$;v<7*%C9IT;N11q|ilxKfHp^?DFt$%3P3^nsVRd4w2ql}BL z0}6xNHY5-=z7(H_4Hvb}YWB0`S(9V1l?P#eEI)Peu%zL~*h7lnjuz8#*A19wbx1Le zr?Thjb*ucWDfS!g1~PIW5Yr~m@#2yc)Cj>=Z4j3;xP(*J>7JhdiIcPhYE1+!`&;>L zzhOGox2kHx!Gfpp__9^}gmCamVOpQ&?t@UC1N|s6u`H4L^{UvDeR3Y*@QHa~M6*tq zbWeEO%f>Wz0oB3cT~Zxz`+eojOGFxtYhg-^=H{EzfxTys8iO}8_zf|gpU#%=N48F% zIDAzMb-X*52#)#?DG&TnAiY109W;GoGRNu#=jod1w;m$ikEudiKeQvolC*~k#&a<{hG4JCFruH+|CUviAe#*n9 zUe_`Mx2UdzxPcaSrjI%x&m)42TifohG+Ig#=Asmw zap+;Z8E)HlN>Lo z`szb>FWRX{w+6S755h&j0Ao!o%85`Im>cxZ*8 zg#^oX6pYYGFnx3l3s}i}V~)W-(Ff_Fokd7`TyFOqv=|XJvAVeR6HIy+O|JYoJUNaE zJS8lZ41$WubzEPe9}OVtL*Hwsm!0HD4d`3!?}9u};3bqDGNiWr_^o1`8;rZe;k_Ty zUE(U?VI#HCcpgCBPNqP&jpcjZ`5{P$vgvqw%Gxt8h0B1;=HHcZ=kGl7opGInv5b<{ zC$&QzCL^CQ+#nAASW??`G(OkaKWMXefJ+OfJdIVl8P~Ho{&B-RdFCxa0>%cEi?`q} zaT%2zoLy?wc(V9JU)3Y6hQcb9D#n%nysw{h4b324f7q(M+%F-24LGiCgFn)5zz2_1yZUZ?J@(w$D@<$|=gjp=0Zo?mayvu(q z6(-2!T8Hg1C1u%ep&TMV=z~&%s5n>7c0_uFG8l?MF4m$Ty`&&C$wbvbx9?gz2QP-v z7`g}GEs^sHoA+57Gzi#iMazhk@g5>h#DLC9mWc8v+I76+`cSD)OLs}rg&(!0lJbOS zE)EBt&S>#IIpo>WBxWyrEO>JAHb2{&uc#<_ykz4}2y-xC&=xPnOzwHeq|wELp_brq zgyVV4$vqi=#Au=Y(v#nMgfotaH9KYTee%Z8o8@QtJUbVt%dnBhl}VQc!frSlo57AEolU;&5In|3A?^w3?)`dpcs#H-J#&`;6rvs z73@gmI2DB}#?Z0k5j;~SOrD+hL?2oLo{9RBmhbyGa-K+uN;skVWq^(jIQ^hAAmH@< z(L}{9xjweTvLCJYIxq&4`>^%2^?W$MulP-#^p1!hxHY0Ra;b`3_(s69f4z4RJ_9*} z3e{Ozt$_%h)}SEQjIEjcc4){Re==yBN4)+XTN@zQa`J7p1 z6`I^~&D1*0t&4DWGc!}f?Gs3+xuZnJ{nLYpw&*p&P&Va?7J?4gHpWG-^F)NLNp1LV zik8=zw#Cn?&8S$gGzakeZ9N)-!-&hZrZyF)7}f*IWl2fuYU*pkfv4thbDvYVq#@Dy zbw~o5cZU^m(w2h5Rzm?{a~8dj4;sTCp+0|G1%rbsN&FJwBFvV+KMDTM1BuP{`_;PaOK99H*~U3)^JlI{zVqGC48_~BHrQM zBa(ZwOR?wO;;-m@2QnBU>tx5H8Ox7(Dat0$@!zpc+j#xk-qdb`od{DYGUa|g@SjqL z2twLnWu+7|wo;yM>_w!>QuSc8%sJU(Q5Zzh+JQ0v%?^5RA_9qcA&fK(ri2Gh%=?q+ z8|U{+%T?h8X3LDF-M7Z^@WULPOHhxjEM=;aV~Cv(^ijKR5-+z`hkDhVl0dn{OGlpE zN4GuWjlOZ!e(eyZcgi@A&Xhh_o;@M>NgtLN$C10h_ov071;F_P<$d8!rZpXeQJ}lp zH~R2+lG30&(eQX&O1v6yE}Tr~1;a&&5ZT#faxxwXoO^+csn3_byG?9lF(fvHdK8T!+d~#i+F}@D5RHEa5eri#5ML-}8 z=vFKcT28u-1pIOT2COodhIdd*vSqpwjiqnHta%jb`aTJV zO~72|YnodMV7QhSbx2hs7$)?-8xXiVA zvci14KXLu06$V39zm-4VWBI7iXU`AH7hxMCRcct<9?fYiK;Kh&adg4ESTvRD$_a%~ zj9;hHI}5g60S*llHf#m63vXDt24Q@yr7e|1^F?@bS=^a`vP~XC@;M!s+`12|Q}%2b zo(j>26+Zy+ZNojch0*Z)iP&V-5*^xw*GJ+}v>{UsoytyJC-6?~lcKRcxD77|68Nq6 zIc%|g+Y+0DlG9jXF*|1?22MMcTY)#5I}c$69N6^Q1J(>jLnXTw(bAju8a^Dv0L0Vb z1SJ?*GY_W!BZPpBp*>H)Y9rWb{h;<>NWLZ*ZifV)iTd#d=%G?BT(YV_BqE}4Sxj^f zSt|P6V)}7_;7LD}c7@++OE$IJ-xU}1^T-~#u8(B_N%aU9e!opV|L)%G%aANX#f=DG zkafLxU@u+n&GFKxrV#F~(fWer3ll)O zdyvNWaK_K7Oq&lE7+S0O-sXoLyx(#nu(d6VF(@h;k-!#fa_n8K3GNdur55OKCdEh*B{y|sXKh3zOlGhCQQ=CW?Xq|i^ z4MlHmQrKRQYQ_vl~bf459-_(G$TE3tiIWbqnQ@j26d(W)zH=7(9atL9Mm`bgNS|4y)2J(L zbCJbzwA`H~9n|QH&{TU=bORTYvo${A@I)s+H32kQQFeNs#M}xWs}yii29Xp7r*IQBWL? z3VNh5iCti-?5u6~d>`ETB(@jXT+hWY7>HeVYX2R++<3<8c&0-q2ex3#pRkD^n zEF~1_()=V6H+!jDc2L31k{=6e{SvuZqeu@Fw6gQ#tk@{*?GM>$!q+7@`Wa$QI@OZ3 zq>c!5*%%YORa;N{ZZvq{dg83DcQOtDJ72ahjZT^fQhjai;3&d3?RHFXPELgSPK8s7 z8Q<=F=p4C?aoq;f@S}KjN`!c+#KUNLd==k#_T1`)=L+ZI70ME{C``wG+IpVCXzf*! zO$i}ZNKFJ6SA~IsN=5I-9wUL~LdCq3dTBN8m7Fcvm6-LR+a$6Lr-^TroIu`Kij1Mh=da@XGb&hx?J?Wv)J$LJQ z&y2U_NMSt0xhON0$3qz3%q|GC5RAw`AnukfE7@;iei~{J$0JCrW|ois{VkW$LP851q?_ zRg@*&5W2{t0?z45&z_=rFbAw3BkA7HO-=dR+p0Bm_?=JiZSJ_Vla9*odN3%W`v7`X z5Ds(~^}WKfOh^W~F1OI5vki%FP{Fo1Oc4fnnf&@!daHfuD=_xk?XGm33wee-kDbZg z1Lr({8qnf!gSoij$=^X;(Y0y(H96U?l-veN+qq*7r^|10w`)yNTc-R5jZq{Df;Dek z`H9X+6e2ZYw%s(>e0C*#Dhia%JNUA&l>IYeg9zD@O_}ZHD;ml9V6VB7MOqI&;vSk{SGK-N$|G1 z2L6c^yuPjjFwg_yzWYyN|88bAXtm#yYxT@J3mbK3m%x+H!=7FuG%EANZTb z2;8yRZzX6nxeEcGKrB^~@G2@GmPpw6G=70WJ5Y&AR!fLZWXLoSNm7h`dt3ovH7XlF z0xiZcCa7KsD$PwO)H1%NaJ}R!(^1IQR9NngYG1nwxy?cSF*X55 z;Nv&n%f7zSzyU#%wJ&8uSBES)*3T@&mPd0N<&SVv`I1DKlljp+qbXCn9tTHk137h5 zIiCqUJv~uqEzMnsq(7GH%GIkG0K`}WwPv-}=(CHrU0ln~Un_p{WQRDjJd~T| zer3=1q3PS6tJCf%P9Qo}oFI^U0DJT1csB{CsBCnKO2no`&Ed~2!SuumqOgII9(?9ODO0(Nnb!A zW}_#N=q82`e74#6d8}%s!DW&AhCECzry`YfyV|bF?xt*(f{5(rz?TrD>(fZ7B z^ZDU=_WHbG++TuVykP6%Yl(^dLZ5_Sx29xInV)K=aIeZ_o?BjNbJ=I-D2>E9t+7}E z1S;*Gr*>`>)T@*BRm%qQiS8|OS^GOa+wLdC{XfVuU_Mt#brKi!d5~!j4k6`ZCiBH; zZr=wYb2TCCoNbAH<@9`1$r9;vC#jyT``MQxMRSA4Df93Y%TE$TDa6244t=Wa`Y{k) zWb5QO!+)ij2!+FPoXPU9LAb>Q?Q7#6?FhcVCumwxHF>xbnh=lrG-87zu9zU!a@!ev zKl_fC@D?HOcZv)6`4-Llr3}K#a>==KN=q)NFG%iNJ#DQ8frwl!bfrHpx>}TF2j%H*RgWI& zoj=I`aSi|;WcWW-#ECbQ;=P05BIiR&k;U=8`HX+T@qmq;Asyb@-4I>@5fT3+Rzz0)$A&#eYe_K{5X4Jyz(K zcM~@^gug6>C@h2{i{O1WlbHFpZZrQMSJ497>&~Ve{|m#0FN7Tu1`pCPr{iAO<#OOzsCERwD{l%s*FG#}LU^ zHnF{84*95!AN5ziaPsF{mfkIz-M|Y$kBlTJei?*`G@dvPtuOER<_}BPgeTy?m}&jz zjBBBQeghF%#rCi_I&s{alGd_3+-%PwZ7QB|LL*5Lt8^0j@zJ`BT32qahmVkikD;6IE?gF)N z`!V|bUAAqd{FGiAr;X;@rDGkjb6XNes+oTiRd{{dnK%lsHjc-& z0nYw4lW@&=;g?ShzRgbM?6N$+q$eT zC&Voord!yNl4KSOrcIv>5#xWqE8u6~#yo6PBE|vTuVq+m(nIL5eghw|0$58AI2$QN`rvD0C@=)1xX#9wQ6_MPcp3`%4vDJcuH4t6=mF@2fkjW zVt*~-*S4b8FP$EN8yG^DJk;5ontgKn^m8*l76nw&ERlxScRZfAqPsRXeLz798o?7@ z5Hid-jC=+!3xL3PW zmx+0Nvu&FQtT_9Irm_hJhIhOaVXPamMc^m6|3~-fm@(JG%mM zTUh`{ACrmNcHZd7(REdOaSOy&=W9>D_5@>zaGOp|{<3fQ=g>tOfadL+P$DK5cJzZ5 zN2%jdh{+NTJwPVS4?;mBz%E56q^^M97WDwj+PeawwQGGazjWp!qXYoGD$h{`p!yB5k1QolKUU3)QCVUYY z|A=`lP%t3-&`S$G%V8|R>>H)VpE-fWOy@Y;j8R4ImqSkRNsMhZF#X;+7$Ao8LJ}AR zPFAW%hVBjTOicjKqMj-I7|ICj!Ha_sP}P{M1wxH#09S-*_$e%n8R(|dL?d+3PJk{R z4_9qVB*8b-{-lL~!$Ck1voTpF=G$+p#)Y! zP}C}8bPO9ET)ecT`bwA8y-zQog<$c4#jdQLDfAdv)qv8BXH zUbDoNjEO2be!ML#(HTSdHnjaMCA3d`OM8HIm+tS=K$I+zdPF8N;*@GIO3ub4r}rR zFvSNC+&P?vcxfye#p8q1UN6!5UMZ7fy2jxKp8t&HD!$INka<(!q^!ms-A9Myvnp~5 zh|#i6mp4)k8mZ0JVk`!O+r zUifF3#metK$2^`Y&)$d@0f~O?J5wL_(1uO4nOO)RZBsCv7u`0aD&9gCXp0d?5$C3N z6vCG0a-G|JQDLM&)lDWn%ehmkk{#{E@!XsmewFl5>!P$p=}6O~)Mj;)?S8eU9Ksh= z$>s94vW>LC(|P4=X`510c8sHD$F8pJW?c8_alNgV9@-ZD=gnQ|qEm{25fK0QuLtlI z5tWWTOp%PiOFrn}!SQ?)y_YarcT;;zO>r4%M&7WO$DH zA{5n>`t-p*Lfw9WE*f5Hqg*W(tZ*v0N*n8J6<5B>e+hI7H1?Iy)B zCCj221-Hc@9{}E-T&8N=n_8hVufrCi^BF+B%z}j%6eviPXQ*Abuy7ph@3}^@8M&W) z*$C+Md&bqHu{F{|s1(Ae%Lg7#TS~{^ac=#JX9FvV*OxlC0O|<>XBh*ToQfdUyGeY; zG)EOn;)Ao(!HrObsX#Q#Tqgo_g$AFP&$%I3Ja3?lf(#A6 zk=MA^_?;7)h?EWzFex|MfZhhUrHu}Bqs?Jl&BGRB>&bz%@o2Xq=FDa1CYf39?QlBA z(LjZg10Jga4=gG2Y_8lC^LQKBBetdP_>`4A(PkpR zm(zYd^1<{13ynYpG$g}rrAS%(_+31OrrLbdCDz?VeCcbgR4PO&8>$EVJ5+hgvAWXN z`m8FCJFsPFfgSE{VG|50d(p+qlYEgr`iYmp^5(6cnbR*rQH>~EYE0g+6Bzmy?}&!8 z=?CY}O;ESa!p(ArASH8kuPAK~!z{KIqd9lnD?TT&0tG3Gl4K*=jY>}6D=Puszj<=< z%Ga=IbM95ZDM#qyCZ0b13V`|AW7+h-OLX1-nr=yZ;A1aq>X3QvT*{E5N$Lj_nO=4H zI>XYKjM7>quZk36md)azSkbIe5SFG|TIcj*DR%gv)%iDuFS&}Eu3;cB~;qbg=S zm1eJveTC0&Y462?a>S1NSk>=L=Xf=x&U3^rPkwwVKCrNsNTgPc5U?&4xq4CYe9$fZ zS)`(M>I=IwlYf)5Q-) z*+z2{O@y~l9dFZ%wg;h>w2=c*JDa!|m#9n|W_`~xbF_Q8kJf#3)iCDm+vay#eMG*>Qw<7?7yH-EZueE^C+ zE>mEqyt|FB*KFi3xgYr;u|BGqdCd_5l~EB4y{k2+RO;=G8NSflMQK$&nW%`rh{IbW z@~K|gZlaTbTNbwgnEj=y!X%Y;-cw1Sij%2SQJ^z?Qn)G~s%+18Q`(a~~+wQBS19OsA zsqV14`w4yT($RK@Dr_>#K8&tjs=-oRa*Bagg>3`>bW)aJ1`za4JbAl?3sRu_nG<)AJeT9L-QdB|tn z>fv;bcug^WEzbNMEqa%T6LLV3YjO+&jgfrb`nVgrK~~;~-Ef=vpTj8}RYuCbsU1m> zwo)aLQ|#u#=B;INxC@tInWSjqx~D&a*GvfJ(LDCijG) z+STM)Ck$mN>8$e++ANW$T#H&6@fhLS+YRsIdvKU{8W(g6nnIyD4?tbUpi;i)8%cEB z?MfrhCcP5Oz86-Sk!G(Fnzz>32jeY~qoBbOKNcI_CEfL6`y@CC!`n4Y$3YJ{1qk=gZyMeI13 zQc@{%9)AzgAtp#I*JoS$M~>h56O^E-5HwLAsWV?C|K0Xrr)DSj4+8`{p|!U$BB4?M z#-pbFbdrvUZcjK7*i~S+?5GKTfq#utMFAhX>LIe*4gRF%D`H&FDOguL-;_N%Yj+k8 zrd+Z#xbY3yuD?$}_5Lb0T9wAUpBpYIxw>Ub3A&fbqZZ_k~gOXP`LTBj&z0Kfd*a3Mle_fC)lg5~oK35z04A4y&>|1wCGw zuhf^G0!8*r?7K14syLM$YRtutIxjwNVmO-}- zQR7=em{vPuWQFp?vxB76p|@+;dExI%d>#H%4Z24M)Z})OG5M^)?QIdU>-Z z*EAlpO>O0@5&z+|J%3qLm%#5_H|DCswEBv(DArAxD&N^DA+QK?2w?~H>U2T&J{-Ha zdl#czcGWcjq3)|b0n}QB!pNad?3f0R+0Mk%!yF`W$-at63{OHz`u?kvj{o`;h2$voPjJ_aVk^ledlf^CV<{Lq5dC^VE^Ws%lJQk12TLL(Mjsrz&pE13tFjv=D=^WHKT)Qq#K(>UP^9uG zBh6tQ#Q`NoFjpx&WWK{vD5idDs;M7C1eGw80g0w%lK5E*X!vOIuvZ|}KqK#AlQ6m1 zP%qS9AC_;8fZZ{P-13YFZ1#H(di@(_kBkH~QW4(VNTL z(B+2=c0ZB4&x1k1QfSdI1TC3Rh?AuuWvm|1hyeq)A{^W8ki3 z*Toyfh$P(&^SBQCxb$#nC_SA*9}XBv$7kj`YhAHDVdxTV={yn{*xX8k3$JA<_%K;# zG|B8*RVo^mnz5bs|8q9Im4kWF(CgU8qvh+Q=9JSYDZv}=3(!jrJWL^mc%fw`rv4{l z1vwDS-a?PKV)g9~6;PX*$ZQcXCF*kT3&QNS5H(RLU*q?e%9a&Qi4DH{n9z?%1+^p3 ziYk4s67GAIu`QCm2MA4L){~myRwEc7DAfW=Ro~~N8WMEvac7vnX(3W|E-|F=3_6fy z4g^<4;9c0#VL;(n7q6wN%vps-87-e$;?UakK9;J`cat62t7u{jb9ARLklO=dg0=M+ z>zBwv2w=Ha$Ao@MskQ|`OI=AF%NX&)&We8T)<9C@<=uv`UHCCShlnov@M?<~uj{d3 zz;=RBTPJ;NuHH-({$J#B?FsyY!$IafD{01?w-uRfxAXTNMTh=v0VkkYcm(Gy8C+ZJgzR1LsJ{3K{x?IN0&39E z5;uJ5U%Q0=iJ=L?fazwE->K6G5y)2VOuZxd;%F)>r$nN!Ir%XCwwDTOZJAys3SUz( zKS4Z7StBlf2C4yHZv}DZ0Y8g~TiDtP5XU7S-cd=kZ6yA;Sw#Ro2oFp1sGhb{W_*Ka z*w0RE!VSV(IUGO_IU2P$TFhD>22_4qzG+fg^0%7&cf_pf3>0k5>kR0ajwUrXv4ByJdDcFhY87-_F++F9~Q^IUw$J|*AD^0Cr1f& z@!y-wvK3_~?;^*j20aaHRULIPKY2K;H%tpC0zl&*>-z!mg9W4y`VAf5l^Q0qKn`P-4TsBBjo? zK-kr_whYka{hx#K-|ih9Z-6Uve(jvPJ13L)|GnX8@of9LH#-@zFO1V=$eB>WjS z2iOHdUZMTzrWH>0KL-yK@ipKJf>QnOQTU(FX;A})qE&4++30tHDZr6l0|oU$JQob2 zUUWK*?Cz89-}WjSj3$#N>}C5!{KvR;VEwI#1by50%Tfu)~1l)We z9#;RVUF{H~55~{Nmm~hAV8#t}R`^ePpRhLTTL*kXwBTR!`G4t~lc9}pXk}b6os3b# z2P`4tAhl`>(To+0-a3VSSNW$-%SG;RQ>cs20hWCo@Va5K5WnAf1aAQNIONTh=+yJw z#SZi@;t{Fht_uZPpLbuTVk^F_|8kH>INnerEXMXJ)k{AB zr*2m+T;JTpga6tP8{85j5m;bCk+k@KT+VHG-5LiFT_RR~d6KR>S)id}dBo=dRBupz zgwq0L-Z4KZq9p*ra{JlW-**3$>il7!(RTBi#)a_(ORm*jmEuZCRtyNj07wB1w%QNE zzc&~_`ECGJ9CruMgbRH2ibzM&XjQd`@N22!;t4#sqrL>9N-Q=`a!!48x^VWyrhP>&f8k4aZRSVlWb= zMIVfb;u%eg-oJ?N-vHFmRZ~C6)h;!o^ae(4%R&qb{_zL^-GRXzh4xok-I}V?k84AK zoWAYdL%P@2$E%o2X9=S3XT(YR(5xl?1Vd|z;SHrf8*|Fi&BgVn!QeHq5@=H4d& z1qGcfF|$g%A0bR+v8l0L4c^WBwDeCZ<-ajGq<7#)L6bJy*M4CxWhJV_vR&X&6q+9l zdYyksd8sf>st?TpBGqsoIArhb&8be&s6LR2M_p-T+K=3?(#>Zb6izq!x-aDV#wcCM z{IU4}LT&M1m15S|9Up(1pnKCKDn(hYw9(|pJSdl$tC9d2nI?z?fs0)~iF1{aZn0=e zKN#@{IVvUpuvD3M1v#d;QgW$?7iLHe_+nY#T(K;_L`r7JST5BGkh*h88-`~7wJmL&V;oXl~G0je= z6lQXU9xyCcD@t}TVS{g`Dg5yn7Mt+u`nSzyx9&%ht85Mt*sN~@PD;|-FXOSfJ>_=Y z&ept-*sMjvQYtKn?iZg0L@wLdc~LGEM3*HfA$W*6x7*u;MsL8+cAVgFzD@9CL5j)a zt$m@rYQt}#+S|~MC*j3Ic6shtw#=#`woql424JH(UW@|7D`pwHtSl-CZRe)-W!a#M za*^;MzxHP(-4RAnfJnxaAv|CD!HN3&xx)hfs7ufURNtUEbJb6=iLqENM~MtFTs|aL zpZ7Ih6gBWdyAv)PpWKJ4i_3~rxp{Gw40T8-A_uH3^|o(yt;TOl=duFfH=o@+9PUai zZ!9`8U{^;jCC20}a5^6!Q;6`_isF$jqeDCcVHpmr-W>ouWSAHdq6Qv7bfyHIH2Me0 zA6t;164)~o+Sd$FHU=YG*D(6*zVZEDn60UavkGJ+B=Yb#Z-^a3-lI&fYPaKG<;dkc zE5+qhnLfj99W}x(DAHPun!7H}zVLb*=TNgjEg{LCIF==3de*#|xSknF{E!!ywjP~t zMnWNVq;jsic^^d}X*z#@L3_SDbNnB{GJ|6|7a9+CWl4SZKW_^L?Ah6A(hPG_jC$L3 z_p@Fxf}JV)$HxrY?jTIYyjN*7NKZhZ{PCvTGt*ST0ZHRpM==PUF^*U|Nku)`6VPfX zz-`HqNF7wIyCqnEl08@vV=K!bf#ACCghrpc4misHsA13tRQ! z)2*G#h+A^KUaiuBS<6dW$&+q%OBzw~PdVBvp(n<7AEym+KF57tU@9_eKfQjuPo~zW zl{zWlv{o!B*4h|ylAEuz{rwyR8Y*&$KofKdpx6)Azf?)9qwA=OrQmzVP$}|{MR%s; zgqTnWcFd4~xdkwn^qw;suj%%uIY6VWe_k^=x3P&ur?Dp`pQq01 zXAle_W!Y-YbQ%U#L;LeWyMSQ`b{2YFc-#BDn;UE<4JzTOX>5ukE2Vtlh)pC1`XpP> zR0jKul5|GNdxztU5*4TIZ>}tJM7i!=leI3tuoIcK7zfhsYVrGQ|4A|b$I?zg9$)WF zJ+_W}TkPjj9##DmNe@pjN(LO~rC2lYQ&Y_j4`E7Z3tr4JQ7j*+Xrx2paavD?Y9j}> zJ;TwexUSd$83!-RL-X7Pzw69YTFM_)4X5?pok2csSS6nVe4KbyLr#|4X#qKesZN~9 zVwcZAOO&a;qq*i)Pjdk6B^FrtIk<5ZCRMCf7V>2@LaXR0y|o%7WMgmR)^`o>1ff^L zo4-+dcOP9MT?>$iG^S#sBS?}{`tL)_D;3+uRBo$utrQrJt;QciQEdaKx5-HP*8!pzi) zDfvT0!{pF&^`ey)rfFS&lFQ*cNogXKCrg>)wuWiJd*`9WGXUv%M z)Xs_oMWv5!p6-YBE8ZU{H@(Lj~yOMV86`J*G6+aG*x_NimJE%4OG* zB3lFfw|oQAPbi(?pLYG^loH%~&XnRGbu1REr6EhLBS%cmEzmt%cPr?ls^tsy>K}nKkwUBn9=zPd8YxD zh8oAz;-V!^g4e9;ph`oG6zyV1bCs{_vs_+Kol@-M`?-zD+Cv7neeu9pf@ZZhwPHna zA2Um2>1(>KNJ^~QEQrF1{*5VE@!==B(i$3ks>`bSlGcW>qr>esKGf*mZMZ*M85;fp zAr$AMX+Q(BS+}XGi$%Ee^9R*08EUiW+;N9h%v^Cz+sWckwI@G9a%3z`QXddw#Yut_ z2Tquzf305hr=i2g^yzj#BDBu<8{HMJvra^HSUJ{fl zzLSgR1V{}z#U*g4DOmM;?pylkcisC|#Fxi)V8iY?pnb-gde+ zKOK15jpCmT^GFIGTn>qjOUO!sIulZfU{c=^}L=0zfm z5O6`{%b<3!T3kZ$W`!a+la=?KHkpO+KGcAD`|^EnMCTxRVchLkA#=p8uXB)VZ`6mQ zBI(u_-(f7qVb;rHPe&|P1y_f+4DK5#J6IL7ppxf(S>;WHR>-Be4fhXk1H6_*aW zdD}1TErqB8+%Zanvc~9+4l-}tuFgleYhF&C zAW>)?sr?CR*W>&<;AHsSsbs7x!l1lyH+n)cSEme4{n{!hDO&q=iG^;L2`?KgGiPA5P;7Nu~1hG7Xr4d zZW_G#L&V{1Pr)x@?#$7>&fH0Tx*tq}yRzEDiPRz4K6AUknNK2j3x%TP7w1?y!{v8b@UQToloHImNA6eN0tuDo$bM&co=h|0oX~8U(0cgL1 z_I8-6i+jjUdp67S*=2l+O8^*ScWQUc!l}8}sRhJwxnyABc$9{6So~ifo);e<#GtT1 zEq%pfT=edgr@h^j6bb*=3^=9uina60xl*YGH0pws0(-H!O0z<{o(uH+XgVQ8jL)xYeh@oNlL=??nQ2>z=4IlbG#ej_i33Fy%^nGyi=S zfY{GhDlnNS9WhGPGpB)Qs^sD$K8DnwsA$XZoDw0R)0X|&Lkvi?F#6t1J)sSMUfnCgZ*9|VwKf?yr!hnDyBYXNJKQ^1^`4o$h zdcaF*&!KkDPkD8`E0A*F7`A7%KAKf^D6lS%SRW07?>DJbEI7D`FWw~u~u9y_E6Omi*)WmMTkK7tln7eF_E;;nMK}c=3SJmqav20CV z{L>Z+1&JlLVomXcj->El&&LcAG&+@?G#O8>vE3?M@%6PRzae*V_57I^;a^j4!lnlX(x6&cQafc%1^M%?mXcfgZ>#ly~k7>&s%B)H>olaW?#$qc( zr|N_R>CILE6Pdju6hY&2@;Gn^+yh*;zL!5bP)l>~DzoiNqnzbt6 z<|cNU{si0U(QG>P&T5ylBqrT!RQs}SYyyK*ngRVIkqo|huKo+bJ)5tihgoNEZRoC6 z9SS5N?VkRK63{1NhXOjhO1<;G?;0FU2lOnk1}Sh zHdhiFx6A3>VeQ7c7{y_^XEk0J#p2@ob?@ynC9ZpkW9C%q)zHw5+7IHZvYS`R**H|p zj|RjS(XU}=YH&KK^(10g1bHk_{Vl_yqE%A)0iV0ArQV@7?nZxq|B(GfO_UOOp+}?D zrg!Ee`h}703FTwn_p#IwW3zpWxCyk%j`OYVZQJEueav;Lw*Z0CGnjRAyTxas)!Zc2 zn}PanfcscY{M3=AWrTB)jkDwQ!&H8<#&WZwkPqC`^nt7SCX6bB&80GjHZQkqE@`Pj zXHo65S}#m5%+S=7Kk-Gl$(4(ezOCIJU&ysJ-xS9jFDx~muT}P>QCEaObKN|$&U>w4`Dy}&@$-xN06*N4 z&WD7-Jtx#}(xW@yUA#u(6q^um3H;pGvc4=1%TRvMTuu)Xy-Ac1JXm=A+V+B#QH%AHwh5v`phiHZHu-PAu;$8tJXdUz!Ug4qXKPCyUgi`59|lSg>^0c)TIrvS#W9qI>w#5t-Jz;GppCJ zQLPii_Vw~ZlEI;C?d5u~Qu*u?u4=4my&T)!M?Uw`_hAW~0yj8slaLz7euUyk*mXLo ze}93+P?Abxqb)s{7OY}P%o~ND9h>w!9|Dv(9Ue*<6=>Dvn#DT7KIu;|u(@2f5R1j| zn#RyvB_Pbv<)~cQd~|-Z?tSY zcq8JG0yJbxtTxZZrF$t|;#@6`*T9+$#*C}r&y>0<7wvj{=+G~c}?32U>2Kpw#!j)7(1PxqKNqxp+k(Zxq;Pl zs6aHseIR|qQIASj4lp2&ea+5SN%aCJJnqDd?`Wf`X01#ysy}Rti|xs1l^Z8;T1B?K zLkj)5;$lNPs(8b?#3E1nBxOC84R7t&>wswEXhp=uw>0+}jCxY869p{_G%}j-=LLH!2e$6Y4+j@(o2B^n%0dD9H+@&Q}ItuN!5P?X~UiYk< z>F|q=2kZ#PGqNH7A9;Tn6=mDLal=R>AP7>@-O{3TNP~2DD?_(*2};M%DV;;N#DIXb z)F9nb(%sL=b=~*<7uUOtLygz$(+4!Q%C5G<< z=L)vZ{i?{X9L-G0ls;;)CgvQG;(cS*N9e|doaTwqxP(SQ@8GstBF$CjCxO}zlOvyf zX{ADIV%Z@#Cvb1k)jt!I>x~8aj33FN!D|`WhqVFd@U{sD`_DpH0a&HF-~H*{A!cfx z#`fE3Ub5CpK%FC27&#)^uum-pm^!!owSQ5WkBfjp=B#-3U{a4Y%juh+kiif>vh+om zZ^7qDGrjh`C_W|;l04Kb%G^xNGtT?wx3nuR<%|O}_9JEC&_{_HM_^t_x{nS{l9pcB)7ZQ8DP`pvrBBAh-4&il zxE!<8E#aH(_o?Ssv8dsrFjNQ=u(1^krB6z{O{*3;Lr4Bxh;sQogMtuktKMXVzCIl) z`x-jn3(q6|B%zbeqmgKd1lV8x2(&)tn2pXN=_rkA<(kEE$T%pTXC6O+uk6A0Hri>; z4f=s7Cg&E-}31> z-SIq=uMRpKvpaTov1u=5z03$&=JM@&enYxFv@Zx&kq!rKj>OTYK()=wg5d+4cGX^d z2sZM=VjdxLiCD>iR=39(wJ&J5oEq()Ggkd7FH+fh%JPLwW!#}?H(6UQ7z z5w6QvxD*HDhzNAS_j+M8`?RRQI_0$l5FJQbk}7qG=;QpbOGWTHon9)EP&t^_ik=c* z;4p#X+}}6PFyv(b(zn*9*I6%%l)IL!A$EP=mW^0`c9UDEQYr=Ghm%5({SVlkm2#uGIMfKxa3>uQ^pD%re5fcqxwO;E%TlTu8jjYBz$7i7kN$BVB;lj63` zs+cKUzsj7z7Bwr-Aa0ew%(`>+1Xf)||FT@=gpe|fJ~Fn=ZEp<3j%}X-O-PFtPH7Jrz8)mJOxFm*bXDE_l>gh2{)MK@&QMPFs zN}=(U((|*^DwYk0MsTmp=S_-KD@#@DznQQ7bu2%k-PYf)K?4|g^Zys*}K zKUo2>PUBLi!`R4UB|Yt{onOZdhV>YG_6H<44bv4qIwd|iwI68j97WCBoG#OKbiZ*- z=C>#$(W`!g1-W8cYuBl=>|2cX{mE{e3&^vo6qzZ%u6Akpt@F|l1?(q=y8V#|TFd`l ziM+9D-OdiGIB@J=EfnlRFsXQMzjS;OW}^ies0!ji+O0{N^<&X#dCSZcHVK(rNQBJf zmhlsf-Db5B-!0w-@z6Cq-&jdInz*t1u9}B!__I;w2?H#mL=zT@uPNa++3d>@&mrHwX65ZMz zWvfNG240)M);z0=89p6LY7ZbTquf~Mv*9nX)HU=EAbw#@ST?X&zpS`s5n)M-c!pZ~ zzGb@Z#}3qKdKx}LK+|p(u$M8>f+bS5v_6J2yWs`(J~qqycMs@w&l|{#gv>ncuxqX| zXkgkpGpv#uW$hDO`^_u|16xwdCSbHWHH&*Iu?5lG#lk1Xty@NJv>jRfFhMPSymEOm zzROHV@^c8aKsMzKmR<~bU@%i&C9fn9J379S7{a_ z>Ob{2rLURM`JL&wAu+6;T0i!_g1Zr?!PPhml><4@el6e{{IZrz&GZze-f~JV_+`!* zgO?DjYtYg=O&{Qbnv^cdU%;wI#b#LYan{9(j}_ilZUa}#i^BeWXV!v7c+8}#a8ajzPR{WYU`2-nw>%gwg9)kp8&z=qmd|8(4YN$E^$kQ6> zjC|Gw^NhQp1bX9e_N6nS6zC|QTwb9-Y{d7kIlfJ_*sNCHa6>3T1SYeFY(r%6zQd&P zPBXlHGxdANWJfBR6;dKc$>%%*Utm`%*2ajqJL~gf9 z(PO=|R*qiGcY@Bq4`Wfa2JLmnO1@m)5$CzYv4)i70* z)A%1wWT9VA)Setg(b{!nvLJ9ZqrCo!#+&xs>M8ryNnTFTM~tT`SlArwA)H327W_*I zK|Bbbl7d}iU;(HKugZ^W+vEvjREh~}<=BCG2k^cF$ z9pR#piijXm>~4Z>eIs>d-G(gloxq%zi(g^uqQXXX(;B5^x{}S|qWG|ngz!jx%BxLP zR#{QCg!Uhaf$WZ&8Ug^dTO)nRsoW=lb(RwOsEsu6^;@lJn3vLXP;EgKa3OKQ=N~Cq zxRheEq6bL@)v%b9Ure6|>hN0X5u67}I4w0i?S9Xi8F{{v5~SCB0Yu7I)=DOER2w0U zRs@ke$mc)n@VUH=>Y^63wQ;;VaCUujhomtIvdoB8z za2oDjcQw7zFQboL(=T=XC$M0ZuXBQnn?5|&dt?(YQ|cecE1GJ6zyhNa;5tCj)YUuc z&V6Dq;)h1sfdBk(5+XQ_cX_oc6QO_oFP3&5fcRDNvtdPhyN=qy^@jKE;KR zm1FDUOYJyw*eITrjUqqk1sZw*r8^cX43)cFU0>I?;x^xEbJ-(b)AIaWG3INV)q-a! z-quupV@9vtjAz#Mr4xP&>df?D*DHu*W2^`C^=x#-4kPhNWjTkdZqKl@OJY9)A;H)%p2ERxw@IG<&MtE- z#0_vzV^$SI`9=toP(E>ln^gYlTjW$7>|xyEGDmvQBSH*`*#W0gS=^XPMlrQWh1Vj+ z!tq+}R0)Ob)B%IcSkEHb*=qrDY^5%G77p$G=EpF3~*ZJ zlc+$^ld2On_)WTEO%Aq_8qKmos{LhISgdGbo_wqPtB6Mpb%-Ndia;tv>y%(HQ5OZ5 zQKQ=b$>V@pE7-Vk!GGy#l zJd8zb!N;)YZ|o0?+Eae`4!CP`ZYmmT=jf$l?a~GJqa9LJJ*N_MA?MSPD6=ZT>q^t+ z>|^Bl#Hd|g`CE65=Uux94vZS{?Y_ze6$i*2prVe7#y_%M_czO1lfBi zP}r;`-tcEiW7ZlJ=B4z8T%|2N{zPOZWwS9}Y3Xc)S!|=%8ECgRFeR^N(x52ddlb= zt5a=R=0$XIA@dL8wCDy89sk|n$mhtKq|W`uj_TBJy4@f>|Kbojr#^Py>lFSFc6A1c;bzs9~RfX;bDfP9zwnuSL4r-%u zQ+kB*i$#}~_lfo7F4ZeE7D5Q(F00mX5VVX4DngXN%wQgDWFIdux#t0`F`nZb^}5gZz+_fWwDCGVNgrL+61V*`0?h! z>7l6&P6kRH%Odhe>>0wWY1}r>8cn)WsQwFCz}gGxDR)FNsW=Ycc!JB{fKCGzc zJzBHY{MhOQyMsyJF!Oyn$J62w;}#9#4rQZ8u9TBxL&O5H#G{c98eexZ0C0fVYiJf_ z{bRNkmje<*EFJGaELohPnR@YUxICJvx~}j5GZIr`g~6YD8@OE6Fj<^K%4xiL%fmb{ z4fwwCK3L-+keF%&hi4YEid9GwndDHbARbuD|T7CbhpJkX!LOKkj$2)Q?QIsp*N&Hqw2Ld?LIU<8`0tskeS?Kk3p(tnRnx3EF;+ z92DH3N*vDDyi!1YyZaL#c7gkdL0lJqAlj#omT2!$;K%2-PTg0Zh1OQ_|HBC-(E|jc z0JGd%EuP1#LwT0kpc-qo^zr^@PRz8AK=Q3MMhcJNrHvGD@NbZ5-1xWaOtOZdtvpY! zW|H)~FIoEPDMfArw(b1V{~3<|mt?tB1Ta%_BJmH}f==0`YP)3S+q|l5 zOV@9&zSAqD{g|XRY;aVd8`dv0qzkKnqCT?S$zR(J_(1W1e~R{Fyx)%)J7%EC%A=i# z^<*=BJL#AJxu7mQlffxT{EQ#{Y>QN!BU>_le`}5qS_aD{r1dC9Rb*4+t^#r!y^Uds z<_FW5j<=)g@AY!3bfU($sy}}3cKFYF<$v-T`@+C^S}Al{MtjiV`x%hXC`;>irs&fr z(4U?HIbScW#RD5LF#j3ZcOZ+nmVOyYFen*{ZD3N8 z$V3-Pz8BUy(@mc8?ICbVA$+e|WJ@Tv5YD)^#Gd`t0Y%gDXez)Fy})eN#3%bTCQGd$Yp@n|*Q0a}3n>sSAb zGe~GbXrz(>#E(@f7OjYzlSj`~$K_!DuxZ9g=p$NV~cN~QIU^5^HT4-*-$iQ{oL?!C(M zu7u*jtQuN4^q&-IH;MJ%3H(`ZBeF;fCyv-XP3UC$JA$L3`TqU6@0BX2EP(TFrk3xY zyfBVEIy|AL>Hl7|3OYvBOXuBL;nIiB?+v7n!l4}aZkA~OdX+2u?Nz?G{j~kx*G8m_ zfwGAdfw$pkt+(kE_=Ls7AoJj8yT&*yX{H;)nSE-&0V$fh$q;D;fgi zo+O04P}xs7^ka;mG(jODo4*JCG>*QHcE1K1Ba{3V&&2B6zj-X zX)x?q@L0M$Xg`WYU|C@{MsO8L64&H()gL0X@HxmuT%cTFO(e1PP`uA97SIw;g&iP07{cH;Gef_SG#$S%$?ZWrvF<8a62EQ8RG|iTZU8-D$ zeLfs5_$I(gFF+-$FEkZkwo?{U>v0i|n5l9XlB~y+KCJ!p>*fXzI?6sHa77hTzo+

mu-eD7Q+g5pe1W)qk#`-2o1FQ$l`B(3~R_mE&!{T_xrIOJz58J2k#VwOHdqkY8YTJ4l zOak-PcA$^!QD9B6rYcY)!q#TqZ&e9TL<=ZY=3$&WWzRNvOUXX_&fK=%XH3&un_6!M zgm0L3AlK*KvPJ4&!h@cy<$r;(mMtUy@q9&;sDas_@T4K`)S^Gh0H-U8nYexrEdNnX z?!x3_o=^NC&g*QCa&UaR;NA%_+vGQ4%Ym3$E_#_S3qDW3mY$vU)dJa@$=FvuUPJ&$ zBcD_)a$2fIVJsF>$K?MHJo4Xrqrt8~JD(M1HmVP)JwkX?O0L6W6RQBtxpwZiV#tD3e*ihmG%G)4;lA#TOD^=Dm0 z{UB~H;E?iG8IK6$?l^FBWs6Kks}-Djqv>iNKW$ZvymQicVc2FY`jl5gzQv|tj8e?t z6E+zRtqKh=UdOVeb4wPqeK^XTRp&Jef2Yj)5R6{j#%*^mTaQ*AZLx9sOe8oxS?))i z5ra?5`XaGHwTOAIz_enH)=>|80V({ZuQY3aL3sRg)|vj8xPqNk`*M9{ zDv9HKnv2|1t#U;35gnPs-h+WZYcCgl5wloEFo$^znPeeE$wU5&C>4b@+g#Gv+CdKs zTpz^%Ue}W?ViLVP)Z}Z@$=sji34h2PYC>2;CYnDz+^At=qlsuUU3!vj3cbs{K3kaa z)9SL*p=Xl4^%H)-98_gGrMC&7g4WZm{p3UK54R)jc8EY5F>Tjb$2oRAmMK)CywT92 z5J-WNTocfukQDawwp zhu%Fq&TG3+sT=IOO9G5PV7u`SVa27I-*(O%?Uja1tw~+gr zTThTLk$g+83h-$M?>bvw>l zSa;IxCjko`;UDGt6ZAcAR-UoMA$q+5S})2T4UabS;81xN0FMjLm|VaxOe>j*Dq3&n z-}M6m-XkiXk5u3G8dPO#7~PX(J}(Rm0J>+yxt1M!y7DgTE5NiS_UJXa>NA>4?fh~| zusDM=-1RzMExMnxvM8o;H8%&FPhv{D`eZua&e3$SA(?Gw+?<9U)O#mF=Ip=!n3sXN zOyskk#(LH6>1Hli=K-)|A)Ze4#o#a9voqIT<>GAT4c_x=amaiFZSv#9n5vUh?}SrU zS1{;@-Xz|MLaboY$?X+lhc{G|4~f{u8oyLd zS_4IJH@B(a7hpqyfM%4f&rbN#Ww3M_sb869+u7QVK0T7j99~&^Z7#Zw3B@$^dvm;9 zM)H}qjxKu|Xt;beMc2D&n-^ie<^#u50WTMX>oipWZbwo+gDeZ6Q&;eT5Opta$x1!n zU1bEbS?{-zTiEW?I7@d`kp*Bv#!Ici8L&X1@&9lSo4`)u$8;1H#I zKyDGYHQZwzSBLIM$m{wICms{)SnydQQ0J2(ur*`pd3~H*vneRjj0Q>O7*Y8Gkm2vU z80Yr7@@)3}IW3Q|1@}9%Dja)FVyR?I(g}7o9ZY*-mzl`!evvk>ohMh1HW{#{2TyHj z%V})5$r;aS3_9k~h|a!Ba3UlI#%-NVkz4#)5Mgs|p5>2*-cU>Yi<5Phgd2vV&7<|v z8VmJ)A?tRYcei~!(|w2DhqG4##PNyVhq7ye6=t`rq2ZPMK8- zQlx;?)IEU)mT@BJyDXbI;kcg=U3kw~b=zcs(i4gpYDsXF#N+Q+jIp{y?^}#@TgyQC zHceAUdjj^-8rJ7>XUc0TU1paZc`8)C2GI6dopv^t(A?O;ky%QAj&*oJvO#YTH2 zu801j=kS?IzWt-#c-pujUWND&3g)D*?2r+GDc^+G{Teb26~?&$l7hqR;oM);4v&!k zJ%&m;UZu;tJKNlK+ms~wy7`R?;Otfw^eqZkS65-N>O?=_eE#x#1G&)$iPo*YWfFP| z4E=$`!byNu1ke2T_;3r@*AfMJj_Lr7MkAd6Ht#Nr+ql^$1foO4R4(@Ic`UGy^7eI8 z4#m;KXVY(i#Qj)U>IjZ+CDqy7128^KjdAZ#)i*`DMQOI>%E8HsdOd)rHaM}|plBPC z<%hn@c)S;lrYh9DXMA#dw#NKkB`5S%GtA!B(nYsKY`KG!=?y9tqc%n6^|h*p{v5g{ zWb1PAq7D${vB4DaR+7S~p$^7k^OlT=r~2U3U*xnt;j~kednJ_T0f~p1zi#d+{XlZJ zUdp0hue|@ei|g@O+EdbrDISw?tWx|kgMuLAR{ybQov-h?iiL;s=c zb{%Z>#@vGwRFok`uispaxXMQoEr%C5?1pxQeW!AX5L9+4&)%KLECs{O+;aEvTy2hB zJv-yiATD3{8gt$Dt3rUFbT~u?{g`MMX?(&6-nC)fe(z-PwO?^?w5o!%W66CwMOlvk$)+nsHao#zws z9Lw)4p|LukAR?}7Y@6vyIV_&hjUIQM@Zm$Wx$B^l34ulu%yf-i7c1A3p{HB(3A z3M{n~ZcXW=FUeaI!!#kA(B(r$(^{M`p+3Eu@Vdjb@2h!mCN}aLN?(pYq~(b#cX+^+ zVnL1Eay*7L#quh|l#54-12yQ-uT$h)83=feN2+>#ed=0=v@Z(%s+}#@LwImOL@M-( z`6#_P`9mtUZ?S5`Zj!UP&6~iCYVDj90n7DPV+$VGVLUDsJ|^s+ph&Qcn-=^0>sX#@ z4IB=N4nL$xhF6~Mh?9>gX9L->g=)VhIwLw)032;LLD(;l1_(T)OMr8CXcOVH)7B# zM`-92q@tZ;&6xbMv`u+%SZG`Q1)DDh*_US)eo$s zh21o5#{E|dU~I#KoW7|3GP;$Ab|9~)JCP{RIj4BvZh*HY*o4e$UGcxRqT!!9N24wUhdToq^6iXqnbQT%O zIADoW#EaV%1^PXj+1-RV5Nf&@nyiH}6xZ>B(*WQmV(D(I{A)}@uZtl@NC=9U8_ zgRJUztd(O+EqNp4ZHQs`1MSbZed!AQd2-*EF-hXzpp^hn|2-6F6K2_epipugUKG-n?8USgN#>V_@|KPf!LtXdUR5s7*gi7aa{hUXjRPQZ+ag!O$B1M)L(DoxMpA_ zq?8Ra>()wO7s5%(S51)N&-AY&&C_RaXj7fU?cr05E(|?UXv@u(u>ms`f~h zWA=B#+vn6A*%Gy$3`6|hKjEgD9lt!Mz??v!M`ZtTq6|~TaJ9d=Zm~}Q3Th{8iD3K@ zX9Y{o13{*z@D4jwawpX%Pcz0)2ixU}(%F6++^ZP7^c)W^-*g}}QMN^Zc5*b9XLFp~&v?BAo zyQKI?j}v~JFbpL81zT_WCh=_#90}~)y9B>C=A{3`>^n|gxR@TtMDnyF0j zbS`W!V!9`oxA~T)K;?J)dhAEx+>m4g8{Lg{=F+GQdI1nHz^dvUyq~LX(-3h`xaIK; z&Y)<|#oskZE#g^*Bu@FrJe^Juj>pZpPVdza+l4@~9S>Rag zh?-tT%h^{)$CvIbD^jlQo7WQwclPSQM6pGuE*SWMuvBR!i5qAP(qvo>G#}{f6vqsnr|q6)CjPc2+}Uu324YUtcm`)$*+$Ecb-L;J~z}E?3vi z$j=UlshOWR4tJWtO=I%1+w&s!`5V`Aolaei2U40Vgg&GEsv+ROs?)z47*e|onzh?# z>yxdVDlg^k&Kjvd;VYw~S)BgtKSduYQCo|A_JvxMymLAArMj%0Han`X!)f8HV3qD+ zQP&1Q?p2JBeE$R$DlPnndK9(yY2Z!4n~gF;55qw;7lm@?+GiN9U75+4kB=u`>ZGw- zwvH=7n(aS2xs<&wo*~0q!?}UyWfTu~+bfNi%OU%T#hlDlls|2I%tj||R3_@Fhjxi} z#u>?bi3ZAo?B3`K-wo(dzmocVeQ{jGnXix|yd)NKh{4;CQy?tZzcd}+$1xeaM7#Hs5LeZer@(rgTfL!8g$iDICy3Imt#F08fU|DgumDjKMb~yXI z;F(batBK=K{9*<#U2;XlI=f!M&gUu1+!9bX9{Fs6yAM%YwUMXomE`-GtjJTueL2sa z+OR7iT9k&1x+IWXWP!FQ+G_M$dMAHnD@otV!Ya^FnS)vZET>lW4Q`Z&kYaV zpc#YY#Rtdh(wmve4Ent1H3TISB8^s`%?D#RjJWk+Ml!E+veAs;?3g(wtc8#}lJK~Y zk$f2w5zp65{Scv1coxS^Oa!k>1uHeIOZz*ckOIt%S`dAbIA*MwM{?eb2)ozs&QHAH zkZ$w2s-sOc9AicDp7o1I2jLkh_~|}Dgm`L^v+oTrCHRl`{7!(@ak&zfnp)t>;viC5 zd@%~fB6zFhi&10rF;E@V@dj29y$TsUd9+1-jDn0zxMBR`^DwF0FWI2|yD{zCtGzN; zVva2%lJ#OQO<;t?QC-4 z46XB8zI+K;!!EuFHfl$|hYStK18o{$uZpoo%kmVPHKs$~+mU7%+tlm|m)eCre_hoz zH(q}tHWdxx6?S-2Xs3m1Pd<%1o}*CyXj%nhZ9HS~Qe^x^L;I3JmB#IotE;p&MI{Vr z7g9UptbuUIFb%A;wxdL;YjnRjw3*sl+xMK9c;75H`SHLZ*rR3;**qVIfeJmMNSHrG zTa zF_1d9&lSbdG;cn;_|-D|sE9dtKbgP+zJ#md!xPOa+2|MA!xk1bDs!jr35lkmF5=K*s#O zjCyY{l%=(|&1+=U7-1__%78X!TH~L86_^lZ2>0?);O*lOsvJT@IK)9Z-11nNQ?x%3 zb3c!~31MJ1RSXOGWI9kWwp|3Sn)s^WveUuqb?96cB$`~L49Q(?e1k;-#ph~Qjn5Pc zFcZq07$_|D*ujY8_@;gV8C8zlxmaqB z^6(>o5&4nB;$Pz+lDCUFm-aMz?F5qu_^2>ne8+l;$?rM|an|yzHCZv#QFc>HXt`;q zmiTc>cuZu`?vOsoVknCO-+oydsjxL;ar3*m#6uL?c@p6h z6yOha*n4W~vS6a0K#A)0XtElRyOl85WBNdYVxa`bYSc;SXQ_4Ww$a%`mD7M;m4CNj6_QFp%vc(c%= z5=Z?L`e$b1GOp?gCC++#O3~Q!WW(zA-|P@dg$dkjG(vnI`z;o;%s9{79`$mK*0F5w zLC%d@j5KQvuwnZ01}1Yf8CdpRk%?1x(;$5*+xz+aUR)3t-Ifvl6O-FJAk&c#lRJKX zP>>-Sf)3}^{>6*J522KFe<_2zFiH(H|2A~Iu-v;m0vg6DjS)Z)PD%+B>`Y>LX)!$4 zD5JUItE(Gi(%0pN1!BH=(rGlNAy$kkLHOOsXhLIOjLGM3!@xpVo-Wz1YQJf1lZooFiMkt}pwc5mC zf@^;S=-NXnn8J5v#0xG~$xE*`e)<*;D1qwPb1)@ZBXy)K2VhsZEZbj|vMP+)%%glf z<{s?=;*OwR@~vrJYRDFk(>IFR+q{s+6+e`lDJZeK0Zx-e10xM#^6@QuPNW|tD$OH_ z2@NB(03*22ER-CNnPC0if&}@0AZlR!PXBp>zMN)eOzOi zkiLBxzE@Nxrcf)F+IZ~Upbg#QO2cmkcgfz8eEj9iLg)H{Gj{b~sB3j8S+sFcPU{*_ zuQWZ=Cz9XOV1ofOMyw>ox)1a;7;^Acg`eN8VJ+4AEBqJS6e0KzxJfD@X@0deYO|=c zIRV`cnfl#ZsfBA{_eRZ8(?1}NTNzlSGkcBUpMNlYN&3P(xIfM2wY`%Fs!6r5Yz3I2 zT#)vAowd}$0o81MA1fxhy*}Ekb6Q#AKB(#B;_0f`rih1e^NEktOytj{ygXD%|4-_{ zcS6rlbfGuFs2+shW`J<_E96~oXdu!Vj9kk!z`v-)Nhh=Ce%K;SCl@+5?g+wX=mMZn zStYL>v{^f#m;$0Vl>Pdv&km{OZ(;$Ts>lvxT8yf*edS(_>;MC>4QbiP_q|lbaq=6> z2Bj3nPV1H*^$kAZ*drEwr*dR^yyrId&Vt#$`OnB12u77$GYJaWW(CV8QIpG}NLoVSq zha%4gd6p+n7u_}G_0v1qZZ?apJvV(?7Ixx4d!JqoPo1n5lFZyd&i&eQ-la42w@rg| z6@BRavw+Qwic%Z=Z0U`A8xnp{qPns_dszmzwivnkG^gi6d2(YI_&9>t-i~DGt1}ql>0*UO3Z>EoPkzoTRV%^ zf^l;h8boZr9!f9bpu*p?HvVrda3358@NxvGo!DV_4&H~y5y1w;O&L+0IaB{4 zUKY9T0k!V1#=nje00&&FXja_Rn+Iu1ibt9E+NN9v1Ai-DA_5os7(RV~?l02qJX~bI zM=_%hU?+~1>-Xm4xCmbK0%fz_8jl~4E%zNmgn|nDdMhFohfj^+!~RC4N|LSIz{bex zuN{6skxRVZE+0^B`09B#zcT|xe!wXB@&6Zu!hWw>fD^R{UF&LNTicnbzhv`H8OP}u zBo2Q28IQVYw!uXgAh`C1yuUrbq@w+F|9gZ*rC5rkJA${PjCq^T&Yr6E_NV@G8O?Gj zYK&`(BP+Y}7_fi);eSEW*-*IdMZ&P=YOR3R?I(a-4ez0N@hae03g4IqV{U9-9Z1n` zd?xe{`{=3q|AK;{<{U0{evHd0xQ*GiN*^uZEvHql%9V`O^-W+?R>OyAmEpC?Z;r`a zH#oq5)cvCC_L%tr&sc~GkkR*chXJuc0D~4Lq5K$^uI4(8qeUm@_^nvbezXxZpwV;2 z`6fp)k_8i_7N36ggk^x&Z9s$c;0^w+K10f!p^kTqoehV zHYY8bQh3IkrtySc-gnpb)@l2R(L*4qJpxq=#?YvouC4x8|H0YU1bW;x9veFS|75!U z`Cu;vd_P+`sb%@sfB4>8FB=|I+5h#u8x8P1sb_@CU+>2MCr^OgVJL?s@^KG9UIB>+ z=6{e^0PxL9sbu=|dD1M-BMJxz&}f8j#L}tD_9pXGd-DD=-9c!{KHliX)ow7UeFJE~ zKK|9q3P>r&U>8&W&0iY^xAU8SYH--DBN6b>>mE*GU6Xqj4@d#|CU>+cGy2b;Jdsst z+EbO8GWkgB5OA&*+dA^Gd+g6q0r6hM+Nd;wgSUI0FtE89@joKg=EJeQb61~F9(Ig+ z3cpI;f8VeBAA({z^Ay*IZaV*ZeP{mr`rea}_f+o#%`G4j(n|IROqo5yVIRnEnDGF( z^y9~AC!C$5RtRywxQw?Te<80WM^1QE(YbqzMP=OS(|0Eue;~SZm350oOjnbarfFx; zkD?ea@&HH%`m%rdo5k8u@c<+&x^p(YpY{pWV#8?o^5dD)dm?ui3q9AArCfxxKW9R? zO@+Z!AhfVJFEy~xrvh3=>kam08HwJGK;j1vO$7c{ks=&8qPTK^h8e9+<^=%2@6>I) zhF!teZl}A5H~uvmi@;l;DJgTxg9u?}anMJrK?%cf~@&|0lZ8@5piP(Qd>L=NDV z;opUnFEr^})o-$JH+oA%^6FI{uifTS)A8|)v|{3`u#Ma#d_RD&>Z z|Bp(s1O)~2e6ApU9?!&GSu@!dXg}E%Egccu^#Kq-o>)%8=ocC9`(!umj-1W!*UoP` zg3+iqea~;JsmO(Vr~qmv;myH{?AM=_LUMO0{I>Ir%s|=2XaS&&C$2&(NAe}nmKu?17j>r!XlK^GYv9ZBO$4fUR35TM;{S$?qH%DdDe^k%3l+R{?S?-zngy| z(V~3UP-!Z=e15Px9~e?~_MHQbj3vpeKS?xO;`49Tww**@!`4{Sg5mFg_6`kD)#_}B zq}p?-!NhILxVPZh2Slp9bP@m5UKEkK2Z*;ufk|Ixt}cBou{1gFZJuN11dG`DolKEf zTfgFaUnN-n+bZ{EhR-;g{Y}ej0ClPq7j(6f%77^A;W(zWdL zBm!QRa>N%!1}vs_e?Pj-T#-aAb7(r&Z>N)=b% zHyHOPySD$?Z>8u&@k7H&JSqvFj|!F_2+X!~9A2>j@G2rHZaXX7nRd7w6y-pueAauv zUFFU2l4(t>+0;{!m!YeJtokWDvDp_saW_&?atS8p=9yJPT5>7i-aNNve4T^9k3}|_ z{;=MJ9bn7f2Z(T+8?C!KnjBe~W6GMz9BoQYjM5^8?gYex)<)tA5;`4x7-RsafP2xX z(Y%6Pr<$dxUlD6lVFW5=7xZ1dj#<-$0J6)yJ*~TErBs`Jy!}I`eslk`YHYcRLZkCe zlZ)$paO8i>u5*7lR#_jvvplT18t+7mO_;KnyL$r*pJ#q1m^Qn`b?Fd`_fSG*4rX&tM9AD4I&MLQImKT4q3Z%u#uoIhmAZ$Pn#CBePfKs% zKADdD3ox)dBa`lhzgRuKKtJ3%A%4G52oai0y}OMAbd>s(*DMlf0GTKC)^K3r>e3a= zV&Ey(klE8M-cru@;VJ@hlk=GRv@`7!;{Ank^WlK zf<=c8AYsO@=m#>&g^7##+B9tw6xFkyXvH*f+ZF1Q`O2p1oNWTq5XCO zwH&lQ!5Y_OSITd4F$0x*Udu2L2z5uz~-l3ZiL{K}RSl1bAVGZO$ewuLTHdv+4 zW9Fg4=o$Ee0Sr;Ox%*yw>j`uH>zbz|6$XVq@sIH(&@PD8%YhOshCtSBn3C)wD7nQs zFX#!L?3Nl!$qaheW7{A`A4ZCJIehi2ewm_xOlCF!oO{X;35dYdFvv)z8?km~Qu64! zIcr%m6bR!n<>fF^-6d^ScZruxaX$M&Kb#>0Gg(`m&11d?g6?%LFp}9NTv^hYi{j|H z-a-}sZ(>9}2Ikf&XO7tgS+{qzNO9S8FT{;0 z$#0PF>XW8~V}9@cl<|kEJC-kEAFr+3a!9?W>qj+$jV3 z%1D1O>LRS)Pndp->axa;5n!-t7-W^`mXML<5Ma|3N@5@I%uE1gK&9x-Q~xR?f0HWj zUXsuIZFe%ivdxd-$UteAQOQ~HxwfpS?@CZhHM&4N<2{R+KBnCuS~OYJknWTCwO?$2 zJwaRzkW_p*kZjUx*&IWo49_O9IgM%l1+6UZ>3Nnyx#D(^0RsqA?>9DLM>J-2LEnDw zSdEJXpa`RqEn+a01IE2~II)NWSlah%+4d(MqZOuZHjlU>CG0=psrK|@^*NfeRtQio zc1PZztnJNRt!@pb_5~d40V2P)%JSGyY}vil4`DT+IY28jFWt(?aH1X-U`qLU#rN?p zAWds+_p@&7efm;sNc2&~I~ThNH4Q-i2_SYlU+JBpgJ}?5{gxYnfK*k^xP*>{m#{d{3s$q2;>=>|OTZOa1vA56Sg4r0`m>H0Ti{ zMc9$|Lnz)MKCAnGsC&o8y1KOuG)dE-Ng6b2oW^!z+qTuHv2EM7ZQHgQ+g9V`%W@b`KgrB|G7L97+;D1Di`V=p!dbFE!{K3y{t;8AfgqC6) zd};970VtiCEC#o0M$N?PLLj430x|zo;Lh{C!bus%$VXGs8U^39ZxGafuQ55J?qNd6;<}7h#T4<<{C0cr!XEfeU+g|a zlkueO_$bUgxB%`qLIOwOd9g+!oynOff=JNx^D`wO{ET~P1LOw}Zt)I4gFO|C60ZTj zUcdiR4rEeWX}>yB@8@91n+YdO91MRJ!dE@NwSZJCjjbvRh>E~~EH_dGv^hz*e8>tX zl~F%?p5Nf890J|GIsWx>PEhC}NIv9vlq`gqHJ{7nPD0*TJ*QK1^1hhA1>ad~P5`(e zN<@%qxZwN|X2R%CW1Av6@w}P|fQphPGNJ=Eeiyz>gV=&e*$IRhTwE%^1v#$Qtm1K3 z-ip10`b5$+q1mBEX6PK>qa>3EYFN*=qqIy9zBj0t4u{qXbW2PGp-&pDCPWb1_(})E za1`(FB8Y5>YzQk)us&r320Fr&aVq)U6UUMwxo>9ju}py(CIXept&n zi_!gM_S4+K;8Ma4>IQ+!&`Ha*;ns1zT&2y&LdAh^k16SF!4g4djG63&7~Uv9Pd>pw zu8t&>tz|(zt8_A%9od-M^MbboM&hpEY@fN_EYH_{%r_2)03!mK-mLO~pmswjyH{=d z;R|Rs2)BBfujR(g9ZV|LbxNN*4+VN5!YG$3X1CJ}y#_|!x<(ej9)%Ky{#>!;0l@#| zR64GaSo0w~9;H(U31QzcRk-~?K3TD|zfG#1)dXaHu96`N!W<-Se69S0c2vSt3C3Gk zAoRn7NBbV81(T4iBl;?pSFheck>AI!zE~#S$DTv{`IsvIgh`P)f{JiFX!qD%>B=sT zyAJacI+ze%UUMy*vho7Wt?ClQc%410?wD>gJ#s#Vq4;pl{7HPMK5lW51}Wk%unpkU zZfqEBiTKMe6RHV3rr422Nhx-NS5Q?9{lHU=Rn9beu}~?5i(EoY_G^f8FeM1HJ>WU#}e~8_pOI$({?Fl)z?KObE@GNeYNDW^#flX zqzdGGK<6h8IHW}?5j{;mf>+qf@FCuP_Tgn+_{b~T-9pmT+pRZK;6Y`HrTdlFE9fGY zXkK=|rP1PPDbxs&MQ=6&QjOQguvqxy2OC&sqtB_E_eaQ!*dB}w02+MEB)J!g5>xH& z`fK>iN%=$mt!_Emf{7xv>R1e-S)P()Y8IHDo#Nd}dG1yB6QeEX$;O>9>s z$|%4leb_sfq)w1r<5v|M8?FZO7IhG}k-gB@ps+>#U+7;eHOOvuA5_(E!fxcEwqMDRN zyXART%vF_rhwg^17k1@4e=#*5N4$e3Xfkn#Kj7SXY}Dw@pRXMFor{g+Thu%Yt6aIP zjSijD4jIl_rO1_4vVmP@g`VF&L?)5hcd=QV_FW5hLzLki7QXe!HIBW*rbn)lL}~ha zY$hpn4js-146u6|0R#Rj$lB}03CowaNPNgvmj3{);p z(@%c4KmVclcq@keuM$CUf;yFp_BtpLX?r^hI7qF2NX*g5S5@bx5QE*{oLz^))>wys zlS(-2{8lQY7}q4-Bc240zt=GcVdPl<~l!-tLkCtxGW&kbpuf+**54-Le+VwdbhX!Gf z&*5F_QYYDb&hHqa1zgMD%oJq6KmAoW0na}-IIze}u6TR(22oa&vJkPEgT7)?_lez; z3)%L|Y^9%H*=;K#kRR?Sx)}a2vi2e zznbFtKYqDz?0H-@e?`-RQ16h1Q67KSI|^sNj{+p|9-BDYPVa$|@^d6V#x*!NYu>TX z394seawn@hUd{mNVJ;QQpdDu{|=o$kX5LSCLYj|`9OHpxe_=<{=G zP(;CKYBF9n!4`guyjJ#naKt>qJj^(M&-EqF#M;D_Ry2o;jt{Mc1rxS<2k957ta3FL zUs&Jo^OYT*w2Mw2dWSOCsNwDVY~yn64410h6IYH1)WKF^0zJ7+YL}as$1WOo3g6;b z#g&H|+Mn+N>&=Pj&p2GKELGcF(#w|X6yIcV@!-vjr;l8Z08Mh0TIj~x%AJnSjUx;M zK;D11Cf2gjY>O#F+RQ(iYCXxBFy{eHM2pvzn$I%kIMQk7VfjI zK%eohqS;&hZmEL&ds|{-P~T*dc<86v){~KNbxLalX2S{}x!gTwYNjabxBZgLVCi&#Ck_wt42f{sm<&V%PQx`WhYN_drh?i3NdO&wNNw{yuctr|?t z)+fKk3*~`--(;qu_HD`rP#GuE-=bF&KrPZxzg8+Eb39*jC4+O|`I%5OE3p2WSEXS3 zlpj~JsIWe)DH0_tBNH{wSaCYHs9>)r7`J)${G^y+q_UA(SyMq73f|+}b=G>%LOd)P zb>3*VM(H)JiFc{d=Q+YXljnkR_i<~{QS{Tnvj84tLy1r=BJp@Kjr;*sLZP(wOZG;c zZKGQXNg^QZCTlcjsgQYYW3fo=%-~|z4#Qcw1_8(LSvYyG((Jp4;5^F><4ePjU`ll6 znc3Z$hgPXq`GWIri?M^Z3tw-4Q5tmv@ zq|3OjOrr_0ez~-!ZfuX2h#2;|HWbH2&0-X)N(CzU8FiwjILkK;*4^+fo~1h5$T$im zm3tql^hS}pAnn9G%I}P zTa|LHdaP$HKI^6@AmV+NgVKi(f-?faw_8l=4a0A}gL(3$`!3JBN1X=KCG|5`qd#0Q z?H~3Q_h#BGBv}hEm;$BK;wmxbXA>&F0G-Fq_cs#GfUr0~+)On3rTfmUgn0Nt^zIvh z`Ieir0%xdy$*0xN2QMvr7-ZEcYoCuli}I|c8bYXo3p`wPCgRDKZxC3mz`y)^o6zo(iPwDLPSE*X>KVdLmZ4X4V#g9-Rc8Y8yF44Q^ zjk4No!zXvT#jmz26PdZ>|U(RNP2pIdmQJ&Jd&Zd!W0 z?+#}u4)(Gi$6_skSHzg7GB?=CglDjcZ`8t-C?YlKesfD>3T;bg4DOh8pv)kc&J~<} z9`D>dce=V(T&jLR!`@)|UM7s@es+b`QxbmfpKAnibosf<^=2zq`1?CCORG^>O|>7z zUCjJRJt^gz2^S2>j>}fMAItvzHx0OHRvizto^Jt;x(#8t!;mH$^LMs(+U#t?Mw5?# zMaFF_)ZO6Cn@L9G-807hr&T_R1XA)x8^b|eY^*CQg@jt8p`lE1q)Q^Or5c0VAh~ljWoO2x%}a#x5J9=ggmS71mG>y?)&154|j8 zc?T#9gy8&MZfot44!tWK7hV>Ao@J}5#N(=2J6-0L2UD_gZBhhlc-}#Dkc3kyq&g2GDjLem+}?pZQh`_vVsg6 zjoglk!SNNER!r}s9-wc*M%(Xk;@aU zclx3&J_L?d5;sm~lXGVD#sMbilwZEWrm_esSuXz={(=p$8KiUBc>m_D2yJ2DG>M5+>A#9x2%a*j)3vcIkQyI?gAl|*o${$R)<5byDz86VlRwrWf z8@6klT0J;~-eG{|*!{j0XXp1|a;=ckljhc8Mzw$fg;VEtdcFIGhdWKY$&^F~E(f15 zT?N|j?)v2yt-f{!yBB10XohR`CY$mOslx}_rsdYk^z_`?1FVa0c3PWDnzhcY9@>lV z1?^fDD-HZW@t^;mk!3NFfiG;x>KYJcdk_Qe7VJd=n3*2EaI&I(B9bohrwiW*Scy4Z zIf*IPkCGT$P}>j3sla^I9s8~k)0+b7?PD$W1YdsKd~!XHR-?D`!(4Q^$PdXSfuUsG z{3Y94CzUsmi~ofVYo%Hu0&h2!Bk)upx6aJGv?)%sg#!GNwa zN&kwC!=eytvvYlktIJxb1#6Mg6o|2GWkO9EC4&C-ryzV4a=cH|4}6wS>w7nbJF7=F zrYCBEyK8>k@xo|Yc(1*R0rlBNiKgus;`A?e*DXN6;%7%$2CMAibd>^rM(xffJO$$F zckA`eFq{&|jNI%<{nUfWs9v)~(;xdb*yXv24kJ;xhKrT9hWkU^Er}}}zem}qDB-I> z-X3OI%)LQfa}zg$PCoIw?&)z4xB%V>ikUDK-9zhZVP$vd^)zgEQEDiorj3PXp&qh# zIE3>1RCB2G;sTfy7j5YpOiBFeVJ)!eWLL^H*#V|i+lOtrh$(*UbNhv zM=@9`^(sHYF({uCXr|ygarq$58;_Qx0VR>Vi@>{1iTMf*CmbuOhKlB9jz3X>hE339 zga_M&dO|dJ6X;dVvIBV=UCYiq(t44Hto)E8|8a7F*IvrFZyVd%;Q#_4hsXCte3h5B z(TNK;Tu)o7GaN)<7Gbdd?WT#QQUqjYX_@8r>KC|urAiHX9*JAe_E5%Iy-3%Fy=*R+ zoeL8wWo0Jeb%Jdo;}9;Zh?H6jTWKj>pcm*y-AfEp9Tz<2bQ+rEnLLJLq0R<2T`hB}(F_77~YN#o=f(rf~hiG!BGN#nG7 z?dNYHTP&6zId8qsin%R9jHC3+n3f{`NP>2`ri{s198ra_USY_oU1OHxE<<((1mAW(hR81ovJWJa5kRf zyWCtFjl*y62PuMkH<#!O67AfCpw>pESNJM}OTTMm$;NN<-p zjhykv@xnZl-ov7oavnvTG(8TYd4ZqkEIpzLtbS_~&y zeeiAn(id8Y8Gzns)z4UqgTb-TjSAT(ipDfD11o-xoOxi92Sn z?}iVfdSG!%N%zAq@ONJLt+DC2!T1eK;iT6AU>DoFeREW0P6C_+^u>>fsw%o;*ho$g zr6o(KTPcnn_r!%4h^zAZM!1V;sCYqA;70dh5y(jJCsi#N7iM!G@0G6!MZ=68HbT*T zgB`gzAaqb9V(I-`sJnBPVt&=>xmU8dD1S?CKUf{27tKMN{K@0hIq!~~b>Z4)?;luO zg9RL2?*BQuTELBELs}Ns_mgwCym2JLM7wlMci?q$kK^yS2zv~mpbSIY$c?*{zpX-W+ikBy6mF^>E$t;WAQQKPF`nE~5=J z7L12hZ-EoGFXOvs^{60ok&ElLXt_LTLnBzLVNG4KnBs0=l6Y?#%n)v-}(;=sn~_vu5VoQ%27( z@GwsX;v(8@-7Id6a$4&Bof^eEm&uEcnR9I+EXo5aZ89tP{#}Unz{mvn+5Gu%L0c^4 zicr>$JC}BH6v~}JyklCW{a(KO+dhn-&?|W>)*io)N#Ssl&;w~}9k$9whVJ9#H-kXK zYDq~$_*rA`gcRO&aO%oSRGPK}X1mcmR3|i zRZhZgaXd>GA$?Qi<;!OB;4hZm8r|R`r4AX3Rx5Rj7fqw$XM1(3Dq2~Aw~_ig=2Zy$ zldMdjumK^CPU^6##>w?RXfjO9a9PcfO{jGp2nw|I=IJ5)l5`1CEA!oaQBXQK;!3mv zTxIr(+K**0j}D=u0^I1}Pzn9 zln8ZYojdCXnBhYqe!OR4Ja1{RD9-I_2e`OBzw}wDWByMI05wSbHl#OvC?2HKQ)Pbn zot7sOhJOdXR#q349^7aU5warWFnO@+5!Pg5w&PWtBr-a{G{iz;+lvkyWj@Rgo$#&2 zhaq6%n90OSngDu>SAF}5L{3N^{37XpeaE!1RK_o(loMv;M7txR$VSK{h} znfO8&?nnUZtlfvjmY)(oyuHkVtu3uuYZ_cyY&6Smm@Lu8(#0b`^b*1$=%d5sI!CagW;M)nL_rAas65 zo#h|;){m28?S!G(WN5h%KzH!bB5)0p4QH1aysSNvbaHPZ`FD$JKy(*`g6#gAD5*@K z(}}2`ikCPtl!+oZIpJKcJM6h^J$n7>0skUts>EP)X0^7&$|iBT&+F*)Yh*dzXh@0e z9B}syVgr9spm8{?aAQBPIKNs71o!bN;Wd!+vrKUUsHEj01;YRk&v(hyp`78#%#HdPyWRI07mm8Jdgg1N!q zqPVwA0SN~>*WY4oM$=J^n^5Oy<5}VoWH#DWaTdOoo$w$+w8{#L#&N?d;e$w`M49NS zJ#KRKvZ-%1w4!9?fMr7axo2aNTfrCp0DM$T;8O(pa_K=A-IqDL>5G#A+HIYeWfBzA zLue?x-Ea_yrne;7GevM9;%i;Ha{P)%$KmV=;I4&tzVZz(y#72%!8Flq&J1s=plKRV)mC)~Xiv6ao_VYum-d0Lw=U?QD(+ma_T=&3)qe-eOwxQ{ynLPrU z2G-M)`?Yaax;|VXGvOiF^KwHjU;mOB#YU){bPK7C)`szIeI~~M0a~>O8P|LW+u38C z=^h*qk2Kd}BWqb)$sfWI=mG!mfN)X@i~fKe4K|?ajI>GZ3lVZB;kMs~#WXafeqz$a ze^f-bbILN}uTuXRQIas*BLZD*apM=z)6RM0Ib94tDW<~=u7Adca5$)Y%Ax=)pmlb? ztc(9yEBY@hUxoechBl_Hg%6HLUQf#`76#k99jB5+mu5)>qttz8s zokP;CujJ~aQqrI)^U7Mi>Fl?~B3o19#ht!B-2aO;;ra6C2N0)RL#tU}Wn;T`@n3WH zgN1!+1Mqt0epN_CVna&}pD2dG-ZKy%cc}2I?>dElUVAGGZeGO>ZU+uyT}~#= zfu4-GO1ye*orjwbp>WpnTb&_5;?wS@()rx8Jes45sWJFN5$%>ns`|~0)~>S-rv(0s zHX?$z3f1=Yb)0t6MR>8*sugQ2=${DQE@dbg(#MhbUFUzysX(CpFhM`%Tk#Kv{RPGO z55L0AAH+YVQbRNY@}GCh(}b8M^NBg`|JOfoX_AeMfPg3M>(c{=%J2`Bbx!|Kwlrc%D20 zukS3&+tI8KbuuHF?1>tk&hieYOK8cJh$sJ)BaaRMSziC|SMuu^RJ2jpS88RKjcL|M zP;0&l13KQ{$Tp;?y`xvPXX0;uVEu)21NM`XA~-EE^tnS7AunMz9L|#OBuqZg@D>e) zus2*eZ?7@!C2n>(YXP_R2^{j+sCoNq3dsY87z9FW(UnBlw4z9*%my|;c2n}uCPP2f zb&Iw%?m5tG^-oz>!c9#uE>5B0*2AQKiY5cTj7V8B*YgykH~(7D%Oqec4IU=_lf@;{ zr3?*h$>aDv=fCE=|G~LBNqF%M>)T2En=(}jl;3W5BiC*J+NvDHJlVT+Y{dUH5BguI zT`Gbhi*>jdI&1y?c7fM8zzJ}Tj{W8DBVHgX9>_sI5ox#AaM1i?ZSg=Of$MY*i-7)D z%(=z?i4ZN-477hnh}R%+og6}ge*gN}4l&@ilq)GGL;n?;`oMMKu0rz5DrU8 zezqyrCoA>|saRh}6CLNEzy`4W=b1|j+mBBthp;AT(sV@|bE4i~k z!wuk;d?OnT{F-OlJoAUX5|X!Qms_p!_v_vGBg4JCY;2o*7XIDI0G^BLzcSqGk+wp= zPx_wzj$n@B$;0z%U|!xd4iyG)5PZ=3F~IglO0I{6h<%Di}Y%ae0~$E7sYKZIfbe0Eb25zyMLet3KiehbXk z9%4%n8`M#U{K;S8_fs#^nv&L~?vO2_R{KYG-kofa%nUtgoQz9BU-S^e9fb;yEGeu0 z=+3|P&6Y5pTAgwCwg@!7C$}e2N|rystAk>L5JwJ#BT~NYh}wqB7FcXWz|;8G(H`Z+ z3+y<&ZlZrK8gS+V&)Dtq|A`s@-wP#R-FrQm*}o? zcE{bJ3(p~dTSzEXrV_*2`y4~c>qe6>RQB&}iVwsoG!ygeA2J|BWGbPphbBHNy-}Q_ z9AToka^>*3Z|9%+X5Ni56=~9{!N}o1R$@~Uh?Dia((854hayIkML`G$6Pk4O`lw&k zdTL^B4~NkJb3;XJ&V-V{#XjDx*+wP8`k!w1BAa)Jo9IL|HQbI@mPf0eL1igiydfxK zXkvufzmn+mM6#uAMpIN{^B1c!cXy8%w94RW|3z}M`V;h}d8=XfFORl>3A9(8`MN+1 zk?1L{eb2*Ho^-2azT~9G_308rptbYA54>k!f!q2Xh5;MkI_CALoR8Nn3Vao1$wY!R zdDjoaUlO+&kpB5!dEEn#ZRg-K|4y3G!KIp@%*@PDBIL1~>I{Hs2_E+E6A}e1ZLAxv zjCX{pVsI0&M)#RI{GB~0I))?`~?rj6fGG;QiJZVP}6#e-_Di0klp z*?<2FHuv8n6p8>i51Bz4PS&(%3Z#g*?@x{xQD8+c+G9sdIBfl1nrlXVu5!V5Qq%n1 zO~1D_fGR`;e0-W@stID#4r>;xz4ogv|)S=Mp=$0td8t1$tScR_hF%?J6ytF_>& zlP-MLQsM!TcMA;8_7?l)LTTUKhhpw|19Z>f=ZpO4u#3XPuC6ICq(OYGTEi!qKSOSN z)PG*3w+yhPd|Os+)yDH`OD$Fjc@i08)&lU6IiQh|Q!Pj`fl8XL(BP6@Xk}vJ3uTGq z;~gzIK|5OK15n7%Cr-u z25ZDMCI>j;N<=UyQG#DQVwiJ<7oQtW*D1o6?P3@XXjHb_QpxiraAu^r6f44n9vXzX zRcj4X|BNuWBoY^XjsG(Oe-U=kiG8pBwSMH2J?Owkb87Ft8*AhbpUEOg(gwg&B+@%c z6^L&V%HuwTcSdoJZ10ZK+OL13im54$yp1?rleGCUOj!Eed_I99F4R&6rDB>VG><%A zT;#%`{NrdRwMN`GCQO^QL}r@LH-Fo{xFkHGF_GFj(oz7-h6FqzC9?KMw6AdF=+N-& zUMOIP-G>a!)Z_0~9FKn*(Wp{CM`Fb;NMih={INGc<&&vkNfOHe2z5W1v*&A6_bj`g zUr;C;_MAG~TwSA_k>5L?9cPy*4P8EstFvvCh`rRAswk7kQxaDl=ZhxuU09ZI?ZSjE z&t<>nd(4Np;Ce`ER|y<@&T3h`47C_0ylVUpN&BDO_a`@K79$V4qDAcM6^`89@O+=$ z5WBv=k2RjoIf|Tsco3%ST@MoNUdX%XG$&#}eIu_;q?ETXTgmS$eEi5~a$zaV2zM$> z8;ab{|B7*W1Aa8+m{nb@xkr2VxFQ;BeBZ;dS31hQXgL&kG;7*j=Wybn%4MHM#HC~! zM?<9v`8k&QL%;}thR;_^j!~=Xp1(Z4JF(gA!@cf|q;FH;T73rwt(1WguhhyFnu!Lc zF|hwvDEv2itO9xZOtV|%Z$yyp{|x50WCfao_KMUbYuq&D>Fta16Y6grWa~Y5^NxI+ z5b?W07|gEdMH7kZOpibVgPX9-Sf`ynRIE~@tiX`dJq}_f|#EMm^8S9&WOYeemz@;)d zX{_}IV+ezhgk-_aGrv=boio^`fKh7~e?pGI2~Hg4?u`jz6e|&kNhd3wEneE4yYdVm zj=uOp6C3vkW0FW$=u1#?fTeAYd-Ab7dIEq(#IWi@u!=u92O9U3i9kr}!dJ^7T#jpd<~Om373&UL-!U3Rpe?@-3wcx`dTZFboCQB>lQ2QL1Z zNglfZ=FjYZ?y;o&7L#cK3G&GwDzZdzDwvrOsNFQDEt5$ z-CtRVSLGLxdkfQI&1R1N7)-PjzF|0(iJWtGHvzRVbi74&5(H6{mvmes6D_uiKR3tg zQAv*;%i^|_B~_%iWg4h@bk6NW8tb8oXBB8BS6h}`!pv)r}q1`d*@q)WBc z9tNi~|58roQE?99^`V4+T56t&o3^kE`M=qE!67@Gd z%{zs4s%8{JsnQBot(|y$;x}d9X2)$WWiFPJ5$G=ea{%o%%W%IG3QrA$WrM1)M2i>v zJaG`3@@2KAFldF{)q042Bju`DRREEAno8?uwvo`mzopIOUw(BMb&km~V0v!+Hmi(K z{dCdL#J*UjRQlazC;&)c9-bdVpJ+^}3^GSV&lWd`6vd%1D8sxMp@7^4Pfy?Z{>}X> zr+vbyazeTQG?K{L$R44`YU9s7g<0LmuQZNoRx^w z)#|X~OtsUi7m4lro#WKdsQ{L|>QL|YemI&)NoFN{a;IsQPSYXHxOs3j!{csnXS6pn zuq46JJFf6oR*RqrB}2*DIfIpJ;5&WB?wGGKE;N&E$Z#}Q(##+2x2q3m6`OU}>Z}Y= z{cNppr@XFB37(McLeDwhsEe`WvLqD*_+mSDSp5fdf87FbFJ3C-r5%QkuU=a{)+;m{ z@W^5`|1sAQZM0MyA;GULT?*1$x??02DWFoJj2S(4&twdJQQkm%vgP4DS>TxaT%k&f$)35HjtrVpcX$F<~AE<{9&3E+*L9w zINGSLD@^Ep-s3<@Z21iK%5|#ep53ZMO0HUm!b-oboQK%SZJ<9f8K|AHi}8dv8?_r>_bF#f+$+7UiN^ZfCJkahR1vGSJA!2>-g#H!Gbqt@=A z?9AjKdoM|zqIK<42U5bX+#{Q9sEDKk=N~$u_mds%<@}xz{K?90_ZjT3lOSmQQ@*t& zrRZ!DFm?C18H$GFZ%fK^=s^bkRN5{%V2u`oPS1FajeApb!@#w%kHb?MQ;E@<_q^}k z$kV~0dHldu0uuT6K8JuY7_w-EW`@-lG3NO(GvNrF_&ih8+Bh;fQtm;|y-4}Oz0K_2 zig`kxzNhD7#ZgE_&ElEaLS7`~QN~O>q>m+Mx<>-2C6UPyEu=9*s;TSY_(=TFL@$)> z_%@s>5~jR+d0AOW9@m-VgYjNVu-qcg85(Ui{r_Gce<&HkW{>J}3H%C@x(Mg<7w2GX z_6URFG}-OJP@3TR`=2!c(k)Lqae>X$Z{36763+WMy%e9eOZ#QsDoE;hPQ-(W z$-&)FcG*^X*Rxu1q9~{~&hRK3qn7d5GCIvvLw@Lzh*Qg?6r<4(H%yiO<1TL2h&9t6 zh@<4nS#svl8^NH#V25wEhtx~)DtIpf@f*FiX~T<>r!q`J1>gMfktL2lzIdis2>edP zYLlR+0@{X84T_bd<2g6!O=4vN_e9z}<@i-bQ3SL`W9ec%i)a5<=mh6(U^I8v>p)9sZwlA=o3z9YVDMPTCHd{A>~Crwj2s1uPT5@n=vBOO2urI7 zA9*Ss0IYJU^bKK0zo^0ws7%Ce#k2jx8}Q&1!K|ZA>nh}S;sT29a;^j*+6xCriUZ~< zM{;fjKSdjdpb$Gc$!i9bi7~$BEL_?0tENhTJ`O7FH6i&ZwBKWKP$qMUT!`H!ZY%s3 zfX*-{4Oj*~>sTjv$F4SCP>Si8s2qXCKd zAKIeJZi0p*ZT{IgdhE`>Ut${dB-f_iH)oMrWGzsklq)qC7k>^P-(}A%FME;t{`ypD z#S?t85r6k99RbI_>3uVMw>;}yv45|-S2#PQvHx}K5k~AM&Lk_vXLTdAV^eo+f1~wvy>2(4{lNF7%XXAbG&`AP!WD%@mFrEd4`^Tk{Fr2NE;1k<@aW4>$&;| z+V+ElHlWNOiRkZC@p!U-nTXFh8~8e3*qXLdFG?HktN>#)p(z7*M6>$~ccjOd0LY${ zEY_MS{-DJ|T^omt0J8zKbQdTWGejVbCiqitx&d`}f%EL%+yWE5y|HJr)ltoErNU?~ zgi$%o%1~N9#m~9@`Lj=vY&<;c03i8hmO(nDOLZO9k0BbOcGyEc{vf4S;22Jx@BI`_gU#SOL0Z_SFV6TyAGgsjLP+GWGblS(> zAEEnWS(ga)Qp_ewk+9tdN8SA?82M1jK-hXVPxcGc={f;`jE_Mco=4Are~a&&$cSfN zza0BGCab#6v0n)Bs1tH#@gZRN!JC_f>NuPkEZ-$LX2z`3)TzLZi_Uizww&O!lV*N2 zK^9B1Rl(f#oix3}R5v|TeI@t{VHGRWlPwc(KTRj~V*53M-lOea)JMQ*@PrudPnNK| zy+=Xsv7iBDrv;|J4gi$gNKj{IXW2>%|L05=GIK6V6ab1vavEP*Bh(bZ`(r z8k@XeL8-d8Gjs0T1Ob(_)ifE&=fwYVW44f9Q!+OKX9YlTioTYh5IM(e!h>M$p-rR; z|DaYY;aYz#sQW3S9z*=8!9gmCQyS=*Qh0lNw^Ss-<~pyXAdTByP^;A|ZR&mO4zXeA z$ka+SqsHWX7mfc|uUjt`b9}a20~DV9M&S|60E|nu)4UMqClSsG;J0XD^It@~rX$Y23>9C0h;slS#o_BM$QhpW4_u}{{Rl|jWGp;O>uAYtMJ>oGJDPPU zx@urE2IKvqu~O$N@U8VqBmAN^i#|tGWJj;7Y-?fBnWV%~JSEpiaYb)^DHMaTAGhNE zwPTUTlu#wIrRAFs4aTH2hHi7)NA~#pCV*{ZeIsIsMm#}$sur(UuEkI1$=$Z=uJ1Ln zN@owlo(4De`#8q1dbPfpvKUrmcG+>f7;5|}U{Aa?S$l9>mIBzc&+64D9mfsDa+Y%a zc;R!Wy&+cFeo}!v*=ahUn-*8?-ws6N9)&jK>}sTSf&EIxT5B-#oSt6V3~MymTzk+z z4*>Vxfo9dre!Bs!zz*(YdHa3DV_KC(q&gAPN^Gqo_>3jsFQil5-#W2i&x_Txjm_dh zImdohc1)Q@@0hJXp)NMIdxy*8~aq!ojZ@#V!w2@%r znQLrsajYFSl1}>UfpEG&7)l_@HP!Y@4ew)*57TLGS$J~Dp0VBtDIFj*jQ!%77Dq4` zQG)CdLn_Pni1!)_kq@&Z5Jc*1V-RmR64;@?!8_BakGb~CQK7mrUIu;oT)A1ZTb6P% zqJQO1p#$TvjTs?aA}9~mR6=Fq-SE1sDoUa7jji;ZR-fTV7`mFBPP^8L13l1#Skvjl zy+8L27`;nv%+reh)KaZoC5COz)brC7IDX=Q_EJ=ZcHB9B2wu2$*HJ_Zw6o&sohDR4~OMr*wsb;u3^tmKYD-Q^$j?zh8wka$3LG6a(OtccFP0b1lm-Fi7BsB z2zaDuaN9_ks8N7@)^H?ucr4J9n*oEM_WMY_m=J6979(9_6x%$ibi8x&Lwe!d99`M3 z>b|kJ1r&f;x@7ywrHk#^Yto~T5dbyZA1a4vw)C8GfMQn@7^BwZmi|f9_d9mAs`B-^ z@u#S@vlG*vcz`u?Vrld0{JRZF;@z|xrAWXOApX=1bv^dVedu6Eot(D!X93iV+S^Jo zDvYCY5f`&eiIO?;HpC6Cs zg5NT5cagisLibsJzMx$0xYoy^IrRo)QNys*cvPb!t=k8;)}9ZGkF=W!5w%tN#;xol z@<8s-GUBlj}20LMWOC z8T`T~1Mjc*3ed*}*?vgp;{b$xah1XSvcm&)>enk?c@0;o&V>`}ohnEgdj$AsJ>@Fc5%PwqkgS7lq(i40HId!!0>^aX%~6^iP5fo-cA(X_Sp!TRhF z8+4R}xSzLCYB!38ESl!IeB6jW-|#3Vwt-50TXTFU((&T*VEYZz zpp?ao;<-seN`blB_qkG&97P{@q3XF5k_(Z-yd)^k>Nw12^$6m z$QPr@L}I4W02|#NmZ*euSFu-e6#HiO#Ib1ATnLIQYk|mq9v2mk-_)6v7`0Z?>J%ml zlRrx>+9~__rzE~!=bk>pGtQ4nwc~ z6-}~#sTspr|LByJd3)JaYn5yiaM(K4;?vY{zhK$^krvzT2>!eAY*yP59b2_gp|$Jt z`TDd7swp%+97V>Jl&?B5W&QZ^+*E>)tw9>D-_KT5NyG6mQTpG5TFWD55&C9p*aHhk z)6Ra5zf_1;Gf7Jc*edZ3vG+_aI%+0Xrd|7j%q}|UB5eONl}8Ns>SQKIMn@p^c}nOr0bF9k!!o&mzEgReb-2L*g-e(U#R!7;#I@;i8ZC^~1Ecmv@_0q^}B{Pjhr& z#>1bUd+Y&alwUIU0xH?99vck6`C9O8^I2TA^OC7bjLNix~$L4ylP4A9)D-l+Q2&|MPQL0Q~~K z5UuamK6Jj>-KOn&(d=gd({yP!KS01|z19G#>p2=Dp)X<9Jld zFy9ZG2Xq{J+b^c*?y|Q5$-FBrat*b6o?IL&+`h*EA|BWUQtjpKZ;*+sD)X z12}!9-8c*1ZqqOqkZqT+)jX&V;-3v_PMsCu-5jZ|!|nE+7EUTO_zB=B0})J?`{gA$ zVmfW8*2F)TdO7>R5OkF90cUGm)_9KVn>7|}X=!B)CVnMSJYdK1F6k;7UF(&yxfhft zvH#)$A#SJ8^*RG(RqT`0e@72i2GszT!NB1;;JAthf=?Q@dD?_H*=FZZk-fv_F%jPM zI|I#egik9X!&CX3NO^<3!m9Q@qDz42e$GiY|4GA}dia(43Xcpxo@#opj5X$GpKN9VV(eW0};4 z<083hVYRc$7BRX)&UvkRy+g~n(67{DG*Z8xV&j^cJy1BO?AaAd%KZPd_f=7GHqE*~ zAXw1glHd}Y;O;O;aCe8`p5X41-~@MfcZcAF;O+z`c+mZl@8A0a);jCloV&AGb1@gg zywla))zwwc^OWdXL|yUa!CvS1s!85TuZb^t@LTPW0Erz=d6Bv_9(r@cU)bEuZpo*I z^B-ysxe4OChg3Zk;q)za5cs5B0ZFy)S#NJU!M00MV!kdu72PI?@Jy#kF8P)EkT``* z;uIVww6v%;!|x{3Z4-kWSVXYbgr{L(thg{;#qdUb=@SyCBjsmQr&(}iTx7CJF9R_v zCm{9Z>BDN-vAl$q5r%owrohigCu1ShoP8BG6orVz9PUK)1HY8W_LXFJL z3i}0-5cMpcUp=L{WK>X>s?yb=7IkY_dn5O^-rSII^Jq2)li(QdRC0{Mv5FR2gU8Kv zochgoIoKNgMO3jOd|#3tBp1DP%kx;?^eyKXk#0emdgC-dQfIm8ve}VMCBnFG311HX z8_o<&L!kBTs>Y2sCN-Z)C{BCXEAL#C!L^!DH4@z!l~x>nu(7P`RH3cmNmi53X5eFVa=O5f$~+6 zri$4+S;NAgzmn0c2HXu7R5{Hm4$Msf)bakYMN@8Q0yu*YaZfUKd-AR+KnN%c*R{pw z;sugB`1)cf8bd!_wXr|rNQfSy5QjHk_plBBt#b-7LC~rBq7)l_E#txJ96OZMH(hc` z;@T;h&t7esCvb9B+rbrQaMq4=Pi6V3ub0$wApm*WkA%bdBhv25>8Dr%kzbWVTFy6y z{ebhOcT4A-&P3qEs2X6rS4CAR)8O3gzoh&MQ|bvnb}`fa4!~)-)-EWgF+m%?GtK)` zrX@=J;y^Lk9j^$wH}h){c03@`RHB)qvmc*DttvI^_|<=cD&GdL_sra;491^XXC4{{ zeLs3v%E^!csBXnF?T$(zx%=b7_or|3VwbXaA2st4;)RNZ|Jg61Jl+!S z;kN=@pbW?{muZusE-WA2VcegIxu6(lvY( z6NplGDhjJjXt-Oi)zsJMS6S6FXW8dA6A@z!(Hh$ z+p?OTYtHW`Vqz!kM0l&bp71v^Q68@jXN1*{ZC>Fsm8_e(X}6zE;o&ul4*stDi>mt? z1c)TAxK^v>w_ly?oW=eM`w+6%w5xUSpHi15I8m-_niYTSFOGReE1(UEV3=y8FbWQ-0=5@77AVrWor>bqL%9jU~>hgjXO6PVMkmAuYL=#KLRq{Zy+=E!X z-aX}iW@o;=#5-V7j)te?nT2)24wY}q!o4)1CZlOHc!lNiVhRs(uq(iyhwK-HR%1D! z2O^_16mL?_g1zOvaS85rT2~L~Aeyegq3D_681Hh_IU_LS-ImE>9n z2;mve+wkP=3NWkVw@5?jDl{DB#!~Mpm8A6=K2-cj`mTcBoGuoh#l^0jE74P}_HVzg z`bDQ$n%|vc&5;UDC&B*5W6d zkr^x< z9e?y!H*{_Sk#&q>gWsKMtwn&uMc|p6;kqexaG^)T%0j^na#`1 z6f^EraDRe)^kgiFYHzlYjfAV%NC4R-VO8jc1#{0KaB=4Yh#DPs6#ruS3^!0CTxs4Q ztAYtJmH2=)$Ov%R_`tt0kRt0w&r*+&dOpzawl*yo)c7YzAv8w9-Q=P;n{}Q;`sBPA zP=XaM@&1VS1AJh7c5`h}qZb;1kiZQBO&-W1ePl-TP0>x)GpQ|OzOxMF}h|za|`nj03i?H z;no5p%={|CoH;p_cNy`xw zC%tZY?e7#^yo{)?zHPB@M=HI0-OurMedQOo9)9W^P-|=9v1;ip+cG ze)sVXaB}J7MV!}tNn5gG{xy7#zyxeKAEd7^_8LrBy{K-x+rMc=(%Gt z??rh_ONM)bvqH)tny`QA5rAa~Y()Eyp95##T%=47}|ZJ$JuQwKpJ&y-t}L#db=nn4ehwGHunH$j7*=>p&#Q@QbD= z9uWY?c;$(Dj(ChWZgT1WeWWBLTY{iLgIW>QQ_Nc%6@U{w6{oL6e)!nGFR$-H0Gu(b z@GSPqePpdydR}a$IWJ<|T!TTssn3RcQE)KnG2k$R9z0yuc5M}DcSaS*b&lU-gxo-Y zpH(ivYMeU&aUf7jbN>S=eoHn3>!W7?BT@q_F<-Zsx^XKcauG&nOsDbc&OI8}wDbMD zP5(lrlIVqqN`GV3!KWzR45A0HTnUF!X^-;czMJVnSP@pt6BLaY0mSQNtZW!p8x`g! zPbBb~5+uO$8?ytF*8Y%C+%DY49deIH@=#kPNP_WAl!0?TmsGNxCvri&!}y@6&+>02 z`5*Mak@Lf+7z;eE=Ar)Vc0lPz{f*}TwIMJ*d&mw=3d27~FANnqs4or{rsxkAk+eiO z7>nqi&I4aGDe{2;rDCwbvDS`4g~OrypNrOegWkm#vKX||NzVpniwfhE4*3dzbE0}M z$DIeCB?{B$vOL4<03>wyK3qc26(xfr2K z;j*U?$N&VS?eDRTDNTgf$6Xu%*hTPv;Ks<70+emMd^^g;B!C)!7(ExG;U(WWJ_nxe zPG|7H7?g(tK!M;t_!?_Lx1_{CFWe_8`kmcg$%Q{z%vG+PEL(Q2gSPg*9dSgI}JeKe1JkVKwAxPQq3iUTp>e9R|J?|A5< zUop|&3Ok;p+R*+z$Ns|Z{~6e)I8W&a*<)Ic&8PGPlI8#J;P(JpxllQFOZX9<0N7^B z48Ts0_`yK<$jX5I{+Ipm&m#JN$A0)<^FN$^|3~r(Us`EO{Ml!Vxn||?6gEnr1Rs}{ zMzGr{`;n7?fG?8l14#m-E5RSTtzfyW;i!N6Hh2Z{wN1_Dv`n|0eonVPIk!k?G)N!` zd@CJ{Hb_nxN&Z^ndmbJE+I@?wFyb3_GX0$4FMy*G_x|)dgAq055$C4~6{2O9<*fTW zd!%uZpTrG-X6DNj)HOvh3P)ptKE2?h@P>-_M8JB4+5>X(sh*`ZQf}pL+W_x_OiCrv zcI*4*Z6i-)EEtOpq|&R$4s($hSrPc5V=bqq>Ano08AjvN#f1Z6b{`a#r{5XDr|>cH zO5l1d*AMkCm+56MWE)J;6HroJp!wq&onO3ZUwz7(a8sIstrX$+xoZ7XTi5ow{>-Mx$*?hCd zlI>~dsi~o4Yf2>N^*!~qhNfz>X(5y89I3)-fuZ>Kaorc=PAMIh$vTZd!T5|zFKx($XW!`yNWi(3$8 zsDhUdea*T~H;d=S9NJ{OIJD{Avo^#UnDR-rOYj)=S5WKIG=4L-q<(noBe8G_C9w{m za~~)$a<$^0gWk}5BTYW*cL6TwfP9Gr^ac^D$)3r0+iHYg#$L?1EOo;8J?Bps-xh30|+T*39rgGU|Sh%lYSJC=Xr)&pR*qx7~snzO5 z4i-Eppib7KD};I9Blfj)iW)AC#h_+UD*&~4d5eX;SbY!e`hvOaxN%08oKU$&xq9p0 z-W6!bASH@uNlZA_L7#w#Dm7Ne(&;kQk{dfIs}?}uO{3LDzBHBVHV!TS2VaD`xBB8K zR7myMQk9NBpa=9*?9In|+chHxd9rA2<3GI&VQmuRAzjcsh$6o>UAr zb4Rk$6353m%mITR{<0VMBDJVt5Yje#~d z<);P+Kyf;XpI18i&61m8kd@XS_fZ%(pA`}R_y*Urwr!`%#3XI{(2 zdBZ}r$cGwwcq#{tOYF#0ED=olaahY20EN)M_e0RW30IsX2B=>qY7s{2IOshI_~#)< zd8A@V%9~JrIalJBe9|uLYbl7Mqj~-E{0IKEU2Mshm&Kf7#c+ljLqN~BC7{6vN57mx zr2w{Si+d%BII_0S&dnOK7wZI|knGTKHs>gwa5ZGm9?UE|tWNo{Pk?*`mRb-dV8Yx< zM1@`7d;ZQX_0FrG#WF+l8VNMPNLno>pfN841*nB3LnC5?wABt&Tlg&T7Kky=Eh9Vr z9E-^_w|D+bBbd3Elg-yCi0?*)x@ZEJCTe4uMH;H_&A$33TZu%JD7F$tmRSMvjSbMt zy~7rikzl@F|9VbWPd`GU(>p0nXV z(GZ{rI%zSKT%Z}`NH)KZLlyF~F%|9WZGRzL@;QtOugz6x(}@isC}vmQ^wL7K`M#`z zNw}IX-JoH0CdL7JGV6_x==Wym_R8<=*7A zp56na?>?x-i%zS72=+CA9nmZ&ak;yxZ(|*Yq1YXZ@qoMzD|^6~=ed3elL1Y@=S=lj zaG16m>;bZB|H5erj!`MptG-+oN{`!L>gwdx5Dc4qucM6QxG=8hT)*|b1);ul!AO`Z zz*4_I`mMj9G4Di|NG@fj7=sd(13FC4{HoBnJ&~`Vb^cD8Y;9}0XXAKi3*q#4 z-f4(HpMAA{6Sij0`C)c1#0G_`Do`7u1E@60@_tBT`W|w*VuaePh;M|ZsvMaU(#dSG zn2aJ*g3A@Bw46nn$aah>F)@l%XdY^TJe{HvKpO^9!G;SGhyL1Z%MCc^41WMC)CVAH z`=%DIVS4zm!JEN7H0vlR^y4a22({Rm0bNx=(NKz6r?a@!fR6+6l*}KtzX$PB_tyQ7 zj5ZK+BeTOA05{g{>4F5w#8#EyN%Op1nAG|s<$M5hk>dL*$_bq+o^HHv#U=R{-{G`X zndLx-TS*V*k{Hmk&mouh*m>7y&-QBm^PdcNi+yY;DpUwE^3K6Q+?vBkkMU{OD$e)l zv{b$KZ1@GCd1WgNmHG;4>BA_rHgj<|8PFwX_zWTue}XQQ@HV1U#a}w^5&$WOe2~s0 zisa4ceXh;y739(nkl+;nB(a?%ozS;Fl61!U>6;+zfBGwHD1Bd@1t^CXUAL|DqaWs{ ze1#0 z1{s^W$7d&UJ&e7@f*g;6MT3^0=r+r{rqE@Z@!Z?m*|D`;>JO8;tII88Y7Q-|W>bpv zF18QyC1d&e_6=$~>JsYXtZ_T;6CXU{VBaVbJ3CFNR$2TII#_Hh<^1*gmMqkzmyO(& zgS-H$m2AJE>1fN=`rN3NZXeu#H(kkIk9q=bl`GEp_$J{$dCf{uC~3B30+&*}okfo_ zdsBTEJt$?kuFG_@DJwBs=DFl%PrIhi*EKBivmt9c?ym|uBbrrDz92y=&I55tnL1!3EJHxY8>NQ(A!+)2{y{Hi`n{7{_-gP@kHWy+&OF_7;^6p1g`s zWHA@<98b7xu(@*R*}q}+-%QmJ2N2Sg5*vX({vzQ0*Dx@EeB7v4ME5LYoO+;^<1@fN zcG$rCKyx74BAP?jcYBrxYWmOy(3m~HRnv+|{T^D52gCA0f1G0h_@e&?ucT5*Vs|aB z-7Zdz5$mr+bh;l=Oh}fwA!PF{cHs9VQZd9IZVJ#5cqjkY@LKL}zJ5LDD&q)HcWHL& z6+KRBe;L{q{KyfDwYflMh|i5H&&GKzHlh=W3{Ox+$J9&2_QiOVfNBP@NrjIMWZk(C zT}5;e{l)^sAc&t3=MG;VO#sn%4V{}71!*9rv>H<$)dK z22~4IC5Gh<Ap;}Mp%-x`RQ2 z7-e&JzgtBLL2)Pe9L>WpIq{8FgsvQ?3A+iYK-{m*vkZnbMzqXRZWU%%yt>^H3U|yd zJBc9HTk}|_V{GI1Gc5$*!WRa13eAM*i^>#;A?YtOX8DPNLx{<=l&#q`Kcf4LRuY3$ zkfPldk`VH1)?|9KH&o>8{k%3k;tmju(D>OsBXD~{Ht~ba5>IEK5%~*1Mzx}XWIlYM zaSn1273h=mwWP8ejK3hXVyM`eu}nj#^wLfMu*z z0G>4ZUZCyQEY=mps5a-`wi}`c<(y33ni_e&q|Zg`B|caoY7bTZG>2cX-F}Z0=o^J@ z-s$|aO-tZ)L=Xse*#Im=sZKGg94?}fEA#z2TLhq<3M}nc1ic+X| zmC<|Sb@C~zg-G6!l=p}098aAapff-PZh~lnG#xcaI9=kqkbaT4rczpHMW1g#d*hp; zH}WnlC3pT~D!a7e4^3$IO4`JSa?O($vL$31J3%ns4leX;chTpLp$s&&#O6G_E<9gA z-uF6Ml;E-V`&(f zkm#~BEq4w~T4gBq2?SF;`Q3aFEBs)nFlsLdRa|tCsKwh?zmHOIc!#uh2vhj|BFI!q zM@!O`74Wl~Z=eB)-uC4mLq(pBoDX6cmQSD03^F8Z6oWLxfwIe4{|D`d3I_=ab_KnH z^aKTdw$pW@94MVpzPb>5rWj84aO4H6V0oJUg$#^BAjDmWg&}BsWK%_sY0K>b{SCSFyfw2qZ6dH z^@zFq&)%~R0IPyzg7PK|th)SRODq(Ch3)?8AIa|zWZG7 zoU0jWi&pu)yrg>Bw4=zp#B-yw!0-w3NyJw}Rf$-8PJT)kJ*6kW{meFp{)^hX zaxHJ(ZoIPswW*{q{~R|!KvCoH)rSh#1+sdVLoe5vvha=Zq?o?v`W>tD#!)ev$QHftg!*X>uRfV2SyDaC?Mj zj*KI{D+({LXjb@LdoV+VNvj!~Q(Yhq0A=#no@C1&Y<=Y226VRQ2Q<$&ig2O~P=wXg z3Br|#KEnP+(~E%x6(F#UQV`CS&_dX*-&X|`e#P$*?2|DOkts|s)aS@qg;Y-;hjT2n zdti|lEj7reaKlH2VlO&f3x(=E-zG=+5MQ|MVyUBKql^LV52x-W=^#Q6EX_2Qo3165 zUY2mby5#HUmVClFtEZ7vD2{LsQJMUnk+hG5R9)GpWaf*7+-fra+`e z7alo6UxP#OKW0TQ0X6e|^)kIM^VxdQ{y2(v**sKOu6pg=M}L!RH?7T;Gha6-GOU-( zBsAz_Lqoslc!7Jd?jZ{ZXdSUMK~QN0BM1lxsOTA&>+63(phhWbvu>^@8x9IA+S}Pl zNJ;qic0hZ`-q=XUz+jv;k*j~_4GbR`1hOX>B*76BA%WNF?ozYI<%E@c;=Sagw}}La z-;g9p^f6PupR`%Tsi;gH9STVNVsESUGP`17=UeyKsFbYVzOMD^r=Qcj6LAI3qyvSY zs_7KuU+Lqem}qxj4zVt>-R$M^vNv6j^Q3j=bw85ND#Am>xmgWKumnOvwW@`AU9a|HT9(_{^}l#i@NvWIw~eiRN_cPg-H1QS z!MEM#<4%h_vISq>^gGX&|18@7tfM*vulL^iv6RF@F7CzYO85hw-9}ypbM|@)w!JOi z=$gOKk%t80QKeTZCSeA-?hZ5KE1~R3no8juI@t=2^BkkHyIy)f!N?Oomev2Zy}pIBezPo}h4$%O9YB7xa;xf0 zv2ZkrqUF!rpf+~J%CLdM{Ii-JFoc%g;@*EaLXw?n{zf4*GInwlvN0pZHLy^Myhjwy}u zw|%2qMMepM*zmDArcjPdyG=)l#Hvn4%ucgB^+p-SU{M(@v(fhkO!hD1Y|dhaZE$j5 zerFqE#{dl{3~)+2EDW~Hv>Y4~MNfj5C&NI~B%!Es4dwL7Db%0+*=DTt&g!!XDkKwTR~*WFtc-H<&Cqr+v1OkuT4B_+fC-NB?EMW&ErtXrOFGPc zG6&>ibP7c&9nUp|O+;j#Ac4|wywE{;^&%8K@x?Js2gkKRHvH4o`Gs%4Ey6e~tj_UQ z`3WumI6tM4+}`)tm1d8_n*Be_E1!e2T&qtmvfh(}j9IP)g&YW#s~TamiPJOFJMnTqhv>)&UCD*w2jy57S=B*}%l*s`EL4m`cK+)z|9iY`$*@Hio0JwG zoR)G|DV%OG1Q6qN#w5h~;$-d_`zE zp*@a#!c4cdquS%SwngCJZ6JliQ_Wy$DJ*10T96Gh7aa=!cy5vFoFH=5tzeV1YB+wF zSd|i^)Us^VF3h}VxjOC{5lcg8HLg>fT%od{7jWrgH>%K_SWu)eC4|SK$~06({}=^_ z`GxVau#;-=V%HickA!UNm`{pUx^@)ggN6$PvMjc(j;M6`DpPTY(cuK8>@1iKH6#o zU|s=)*6*~c8Y7fOYBICg;=1H|OU zpi#ut^5A)#c7DDRKQZY?7K-KB4{XB_>s*Yoo9uJxO=YA1@0jAB9n$!Enx{cUHJAJ5 zt8qm{n1=#eVlA9ybNNPN*nYdO946~hTdc`9@G6$$`921|cRCeRmJ(=Tm$cqbE%-?W zBGKh|LTeF93ipcULgTcE#_0OZEi|UM-H(QHn(}c5gdT5Gh{?NZu}HTQB4>(;#e0TA*V|UQ`-}M9!wQyFQ_N73#~Y~42l>;-43pg)?fd=^I;)xTr{@FmWe4gd Z@77f(=Zg-+4lv*kB>X|BL_o*;zW|4wb(H`B literal 0 HcmV?d00001 diff --git a/user-service/GuideAssets/IPWhitelisting.png b/user-service/GuideAssets/IPWhitelisting.png new file mode 100644 index 0000000000000000000000000000000000000000..57182345538a84b813c73130b6559a6bf3d3158e GIT binary patch literal 59576 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 literal 0 HcmV?d00001 diff --git a/user-service/GuideAssets/Network.png b/user-service/GuideAssets/Network.png new file mode 100644 index 0000000000000000000000000000000000000000..57bad4e6777adefbed07788df494e7b6f95696ae GIT binary patch literal 411358 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

b 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�)lzrb zjX8!Oe3=c^HG7A-U?kYzwQd&1cU90Gn)IadBRGlI>^D^U(sBEHr-7bE(tGw+4=#TU zGVKO=P;M4E7qX)^6pX_??dJ8hKLQEN=Ymq#()so4vs5;a3J1Zl^U*=CSr~9_jQ9n$ zQra^^^_tBzlBQK(NpsIG1RZ$oATd_!#|stbIp-P|%O+{fx5CQ@RbGKiG_Ug?SXIs`Q%qt~t7HU!1 z+uzWC-#~0MJyHMJzshk zq1Qb~xxj35GLCIWoW9w#BQewu&tpS*a|G$OXx}yzi?qv>v0jkp3*D z*ActBvMwHuc6wj0cbyOBixu2IR>ZG;$rp}Kz&^voXb6G-2K1dzT$30HqgVom_p92U zrg;1XsKn>}IjJmVIE7xw^?i}#RWx>r2bQ?0#frLYMEiM>2`iC3O>O=wbjlo=>xrqI zW0B^pLmTs55S0_7cX1V}>sn*KzFPWZ*Z2@KWk75!sPtMYm|_+*cpPpF-_BpA;Zl+N zEVl7Wf&rASDOa_zu~j~a8?d03=NrMG!~3lF`P%+A)H>E>iHI$#6G$=$E+W}8{%;nJ zD}DnVyqE}Qch>o+cJ-Yr@h^dE%?356fT$=E4LTo*wJFYZ8BUDs< zY=Z%PStiK(Rwd9t8W_%X$QRlABD`Wl->UR&hi{V%Xk|O8LZ+L#nu1(%*$tfU%2)HN zgPt>ajJV=DZv6AAI_$O%y(%GI8q|Da+%P9N*4VDV1Kvg_<ap8Ig=wCh!&9J)z=g?D4k^&SP{58U&6qC=A?P1e@}kqM z^p+ek6GW9`CCu0TwUf3ajQ9qG#KXJ=QWG_{$PhJtYZ>Hzc6@2zphaVm=T=q7;@*cC zR@CN?Gca$f!~DK1@7>S}(jFg@=lF5;MjKl{4$LolSVFDUR(nk(i}nj*mf<2uOoEQX zP_12(ksa4G^AROomwea8=lJQvpl1@)eY&c|_t8P5YY?%W+s`9|jN@z(i|=JI8~PJ- ziHt9G=Pkcyw95@+^r2~HYjbP5p?;(-@JTuomZWIfZZ1t)ggmJh^RR@oD|+BQQB^&O zA~N=OSZk}q^U7y#CYa~_;-BSWKJvR$!hw_kE{)|DRx7D@k~QiU^?L`xH9 z$onWX3HP+{E?2sCuzKG@v6 zAV%xiLS~M?4)rysvCY^^$GF*x=d#jVkp_DfQ%x0k0= zl(t6M&iUHy%}MRfYvDzyS5Ly=%iq4pnXDs|`f?Yns+sOOa>IzFeNQom`M4472h^RryRHU23zg~5*S%#{LOwni{gG^0 zPpkLzx23(2cJZ60lscKsT}-og&+u+hVso&dR;(x>Gr)BPLbj47r6+%zpZz*u@!kL*?wpiydoyoW5Lj?#cy4XZfr(laCq7m=R9D+{3J<&*0*4|7-c}j6`mJF z@tKcI9>%!hpkFl({<0rF?=SRp5H!bsok@1}Cx%t$<}IFp`Msj~&0nZXRJ)&f7_jm= zXjY?&inAj6&77uferY#V3Cfsy`~jfS%4+L|1?nha9origg|-Nhb(0oS1e0^(qjn5~_u0L%ALqBZLiT$oq-#5OYD#e6rjTIn+k=He zb^<3+i72SE1F8J5yhN`nQ-! z!bA+m!CW5UTbQe$?Ebh+{^NwmrnoOjDzE7>Cv*&uzp`d2OH@f18Zlw2SlU(URw9rO zj(9r*Gz>-Z*eT2Vwm4yu3b#hxFJg^d1AWbYmPS9V7dJsRpiG~FQ*cTLUtk;=UjlIm z44m8%AAA#%D~6rC80g`$QGt$hvfkY}oI!1t~TQwtQ3BEHk&8ka(hpY(73cubcC zi{JQ0ibsF^EEi`h;1N3T8iYL7+qj3DUH=sU;KyLV4Sy*NTMfkPst`Ro;YS zCOZ}0p)NDTwD4vEZg5nrUgH&W?vBi=px?^(*+8Nq(Gx~|vOc?!d+M6*~~h zGBn9se{rqJgii+iDpxm_Ev$Qn5FLIBVg;iSc*)|S((jUj>?e%-_ zeVKJKUaAKdR2xTXn(bhuG-la;NWh2C{*NE<8HPi#Gs%tGaEr#0Lk*WHGvc)3<-H#G zjtKW=nbe`1Pb&XLp`Y>A`$DDbnS088PG;&Cs*L*@u~}e;;HlAaYnjL(MGb7r@}5Vd!63&6&Jj!OG#_^Ej9-C&9n6J=n6F3t_Fx_Nd@k zS=X!&J6|304lz^ReO*ytp0>D9H!ylS-mVT&x~1e$C-&|J$U#*)A*$|f3vl>5xe%06 zkW$cHD)gy;usI%{8px9%yu+A9;j@x);kDz|yyI6q51 zY<(~O)_t|{#-aB!H9E7-7ZJ1~p^{tmzQ6Pf7I0TU{Q7c;h&SDb=)@CfmA|al=*uB+ zb0`8KC@=#N(Wo*FRc8*|lfmU=nsw{sQi3%Ji#7)uk@w&)zXPosum;Oeo4_XXCGSP@;IUY2LX~a00Osd^-bsdV{#j4rN#$pZ< z4Ba4;gLLvjeRi0#Vc8WB%GIBYz{gq8Ueb3;!BwR}+w8&)HjShC$bC5M7CKk~J~zEy z1*fB3@y@PI?O^gxzvK5FeO1zgBM=9wb^A*MpFyx|1&F%w3fGX^ol-PDtDj<}bFr_Z zny}(b-!CIhCZ}32?mnU4sA(l>Tg1Np&f8p$uF3?1A7V>07=kwyt%D-hx*Y z=xJlj5EX>9!>mEz^!L$&&cm@{BIT94vXrE0g z*JO%4+7B)$Zqq5d-vX^|SKpcOjcN{5U)fUst{K&p9i}j|g^vh2(g(P8h(>+CI%ym| zS<|##HLIYUWu%@AC3a-sBQOp9aRdmfjN0zE;6K3*(3RlLZDOV1oSI^Y>3d>j_=zS` z1iUhmYsPVt(wV;=NZ(&_Gwi`^4bs%zVmh3kJXMV{$}`v|rnXa=acbSrd^?3{kHSX$ zL(}MePppPrqM>RIs?@8~fZ9K1QdivmQN086(sT?7CF+o8$-8!@p*_eM_nP3-WH97N8}AIr1Jvh7MX)iVnl3?Xk?VSRYMP(5q|=$8b;dmQzwyhZ2bBtwCT?q z&tyy-Le+0cbiY?7r2CvI`D5ee^k(^cthH@C=8%OrH`Spb@@za-gO(Od8U)pN&KwZ; zGd8VUb>q%k`{K80PwB+opw_14{ouvVN+ICu1X+&T0=EWe_}tNYI8h;>A+;q8A#F_j zGr%i}SHaL-$=inX(S`TYCe`^(KK&RgdoT%$dowX~HSF`+S`)nti9(Wsk*=eGsu`b@ z$G`1@?G%ERZuyiP4?l!_@XI7iRyyR4zLzm*j`sYp($9K){PN=hb=Ya(avs08e8z|x z%!KXy{?mdP;-SD=-GV&u-8trS==NNOB+yX$mhH}b>$ZQ3d3bs0<6W64Mhg4hm-@AB z?Xc1y&nNyrKSWV~^Uc(=H7!W$gx5B%zLf-r?80VAxPx{ih(3dzCw-b7k z?c=!)>Fs;f#N_^*xE+Gf%Wp)L-{g4Ep0+TwJ4UmCrCdT0r#F)_AKfG9&)RAmz=a~kJ8N9 zZV0$8sR)0Imq4u$GzJ*AICe)r3rdM4(!1Nho)&M`WplMP+%I-1x9xjh=XpVB*2C{T zE{D=-S}&~^xY9=soS=I@a{o|1ZD@xRp7TXIS@xam!bUMji-GW-&wxDREGBd2dsdAj zrIT2pUJ+$56l&)Gk$oebZ*bKf`z`t>55%6A+4yO;j@r;*VBFINllT2>Kg37aC_ji% zUeA}XA^q6ZM8ov;J1#WgpLdsZRTbegn__VwzUARzr;+qhAGYA04Us6$U8OgE(^IJ% zrn|_}5KhmkWp8G!i{6W$bExbxjpv)b#0lIIQ~eUVU<^9k!ATWYLef;QLaK2rOkhga_jyp8(UHXLO2}S+J3ayH$XE zD`1cwGW-Z`?~TC;qH74c(=%pp-906{rF3ukpw83k&^-?Cz52n3gNBv#+Rfo;WZupa zEx@8?hB9j9^Y_PRQnr_MiR`si)!1O2Cswig5A5_qvN+Q2(N-vW1t4%uS;3B1FZ^JB zbe)Ax6Y(@2&N@KCYt1yiOCMMlP4>y7&a7!zmJ;haKqk`98|2&sG?u^IkiqfaMz=aW zu-3kTrfp07z&T=755MHzQ6UHjN*oF$6v_Eejr5kIKT@H4<{0S2={RL_!xfe9iS0Si z^h92Y>uQX#;N4MB=b`09mD9cR6(#*pp?ShiapLHwel&qeht&B`e~b{?(O0@u~Bwh{PpX{ zJ*+8I_O*dyDT{#<#k*uPo2Q9jBf2w{TI>4)k@Cj-IxFhBu&w~>%lKpAp8Idk>A->_ zegI);m}ue}W7Le-2hnj8FziZ_+_O?MvPaKow9rY`!^cCgZ(J5tG{cJ)DzAsXH8HjG z_Qn!qw6wV{Rq{LmF?|pXF6$%sYydSTuA9VDc7(G>5gT|ZHWc2Txi=@^(rr0$hpNIR zvsL!NIRij8$Q(w#ooGiD%6xk6Uj#Ogv-cTfv+8wv80^X|UVJyMFjPRm(6bxIj#|Lo zwO*234Kp_~qLfedO_>$RWXcpJsGr&mD)USLr!#fma~o;MgKm3&my7dlUU zl>9rQwkc^$A5=e#2gy;bpO|K;Ldwxm`*s4G&((&EW3h3Q_2EO0F1r3T38v!K;e5kZ zswV!^bwS{T>qEZlGD$yWZc8QHu}TI?rBhdhpdolsqjF3;%A&}U+UE2)^A2GE`>|sc z$R>*4WG=HdswUxlYH3i<30>>g`z>pz8`c(CwlnI&hP(|=4*BIq`miB16 z17V(LH)Oz)KsEm-sWtQv2|3PTr5{b$?`RO&@zL~Ho~Q*AHsx_H2UGcjV=YPCH zlcQ&-D7S~*B3j3eb4w^3cSmWvNh|cE5D8~_U<-|wGp4BFC8k(=q4ZcS~FhGTvDl^`TX)O3?s?m-0gX+3BA@vykN$6D${%rl(uD@@$5 zTLCO9j3x#I;%S%&Up05=F{bjnLNQ*fDD!fDyX0BQ3T%8%yxt@C8#rg>3|o9uox;Qi zfL{YYyH4(|sTuuFW-+fQEcHk91_tFFc`nObLkRjC=;wDTO!BMoUlawHg!&X2n6T{^ zo-iI?x&xpjH>F7Crg$5K3HvcU$yWQ=@k=lOAPbV=W&p`!czbIho*6U9<~7!cU`LUm zIZ6HcFUBs2ht9&>8Rgv%cJ5960l874AyHwSnK`t;w8-gN6zmbB)sr-)9lW zm?qu<5Cy`P<+vpnjz?dkDE5oD@<7g|vV7I8irlV5SSC@adDDSc2Apq7IOFz3-9mC6il(S5F?2sv)ns$oODXl@Ar0d=fj zZuXYA)$p^m=hw;w9800ZJaxtuE*_z9!jFouFs`M=wV z>Ks2>`zkOd0~M2gM5!2Hl(bHs>TV(?VsDncrg!Nzq@*B-RY);4{(2n`tDFuno9rFY z=UEgt07^^U-G}YJgpM(=%H0S4p{08E&e3Xl0P2X@eg*b*EX+qZbaqO5OzA4qL?nPh zgpI~t;s{^bNq)bTyQ>VxxkEL{JiyApG}tA8E4hGuF4^jq90$G)kG@}VSggtfsz3{*0I04M@s`=}+qd6`EJNOVPEN}$vB;e4LW)Qi-#9Db87$SdsdLm!T z&Bgia9?Q{Yg8?ek$Usq?KqQz2`2Wr?5mN@>Tm0y|Qqq(;><$2o{YjUmV7TXrkFDIo zN1KZPR({Lo3GdMar-5bNYyQM>1dWMxh!0l!%M+zK?darG?1@E*-cXJLeo-j~z#I8C z9u+LCSR?%A5%bY#4%WLZ{)3XGW8zIa56P|M8GG?ex1bLiZ#%d)6)*vaUW=^;pdT`5 z;ZKmj*k>bv@Ob^~fKh4k-%(nxHFUMjhcfYcV`hgB(Z zx_9p?XR_>(C~>%byl|wbsuXjeP3}~|xQH9T`sTUjp0L&tN&?@YC=h%ih!#pHSs!*> z_$I;%Z0q~|*<{n2u~FB9rbb%%2mJc2yc$1F=kBUD|NUyjW|cU$w+6UKRH>s)E-NZ9 z3wi^a;(VYfnWo?}@n#fC@7NdPgP~zQ6SkT8Dpy`g^B)&IIt6!6^-tLj@ui90z#4I< z_87P|EyW?6yLOiLQxq)i|3q_efaX=auRZ*%IuUmL2vI5AeN*b>Rev9x8gWvkq;8@; zPCc&;^gEY(r!O~tQafJbwX6SvF_4i2blH-cI68@)r^1*&SXa^!OD2eJQ$_eqQtLT% z&cnJ{MYK9)Y(ajvOnm*Jsnu&c9V`}~SDF7G1kusNEbyr!J6)Qnj{^Vjrj92)5WhI$ zU!S|Z6d?Rq58yccF8<#0`qA95%;=X({^;w!CO7KP(uz(|neG$MWess@@7LFSPUGbVB#-~=)$*+z+PC*-@a61iCwJ)hUN1ljgm>>BsMQg7j(^4Xx2gP&_&0S{*a{r&D5t!rI6 z;@Rt>+|YzZJ4h9EF3+OKkzBo1u`UwL#idT-vd{W(`7ec;J(w_UCGXt*z=w2?kLmQ4 zteWo&d6$m(?5Pkp_U8Mh=eLRT1NQrQqmAwD@k-SX1xo;aPm2U-;FFr^F>nR381AY4 z$)xSkXXMj=$<8 zu0`k>KmbSI*W87`v_<97L5s41om2_9&(2H4&cKJW8ieJX^CAw`+;EsLh$*L*j$rKc`p9IfGc;j9T)69vs@Z73T>mPwe*1UY+u>!dF zEtYo-+S!c%3Q&DkNuQOv)!1O0OWjUErdhs$X)G9I%zyQa-liwnv zIRq3Yi^Q`|z1TIEX6i|fQvXupGho>0T95a!sC!kM8Q8w+Gm+Fag7CGUe*Hxo_xKl} z!IN$>K<}qemZF!dJFtJN%%xu#q~B<<#L2O(CJ(9;v!CJUp+`9=8{IBjN<- zFKNolGUJWw%3;TtI5oo7tPpP^SoF=SJ(90m?tP_Ky2V-rZJ7J)uMQS>*zOt8yHl?F zV1v0PD9q@|?S+mL8u__#7cYdL@gcyK6ONSi%dqB+bTy#Hh?vDHoCOYjUDo*PWm@K{ zWQ@#?f2HB(48GoRWB3MI-DdY(lg*h9L8k?Rxpylo9KvE&D#$8jUW+_00!RS|rpj9X z4%DS;_g%?qM*_da-T+VF>v4|^S?2<)6=WsO%6zTy?jN*h{CT-POl5%iXo*#^(fjfDb4SAV{+Um7k`=-yx^CT`FH@JK zUBQk@v$cy;S3am2q=YD1TDFEPHQCL5z2~#3T``rcTg7ofwexVVV9$71J$jx`!&y2G zn3zW-yY3BfgMYHxF1pya-`@tf={scI@G0^pf}>mOO4On*p^M>hGF$%pP0=9t{x+;R zz3935_+Y)SGZkD~+2QT+=!m-aP9E@i)D3<@F5}hd&RhNgTg_q8a%eZqq1{Aqmb9`9 z8*tW50K0N(?fzt*c5rs=Pg+x?kWoK4A>?v#!I5&MVuQ#<|JzDmH14`L@us`dqOf{g zUqAH_xl}!KPvE5Z+zXNO|FWF*K81!@kCnQD1(brmJiMsU9>=eAGw5LCajuzrZB(&u zoZ^D3Z`rHW9p3$~rKg5Ub-iG_#P^K1IY%W{_>QcVo|9fX;7S61a8l>gr8T6N%1GP= z?S1}AS zd|Y9s;F9S7(M^WY{R?q8*~PH&veMT916$6V*LHnD zNpz#>!y(yW%%)@*{58WR?=-?SK34e?dLQ#4iR={RTYY`aL&k^T8W8{%zv__@S2> zU_4&9trqU7!_o2U$h7>w7YK}d+z!|Sw;U~j+YEo)(QW3x?chIGko^(Rz>uNZBXAf0 zME&!+G%uVvitf9g2EZvs9a*gZ04(e#uy)v!h06dqw^K(p^gjW!H#oXywci84&7GJ3 z-w6G0W4pfq=+cS(0D$`=`{o~K14OMXpm;y>^8w(Z?8g3iHf{;Ke<4cxe-QOQi25In z`k$ls|AmZFuuRa_&im_coBxb?sqI_&%S^AdweLN40?BPniQX?V%mm3Fy^~9y{dicE zDD{Etp5bamcQxu6AS85580Pt9x)+u!Hoa8Ci<7TaPi2F|983DJa;*CHmJ5!a5*ILjuSPwVgh!h26h!$T|H8hg`J$REXGgPpbMM| zie2qNh3n(`RhC6PSwgAES0MlWsE{w4r|M#pk#Fqv)9nt6Nuan}*<=o@*Uf2hgb%*FpxC(ScnHGVhasSIwnhHc zo&(=kgpUNjrPM!QhTB0OP%h375WMK&)69_K7uLW{2WY9(a=5>0r+Z52cfkJ2XQE~- zbjG9s(fwVLB&*vQNYfqSDh@Xi4#+FooMJBwXA?;5@`6j(8PcJiIXxGReKW?3rGtl{-> zyWBYCo3;I8(PNfuHMXzXx$j}8H>~Z3*KUuDgPs{=-n2(zHvd|lV2u1H4ir7Q;4D6T z<`;VDfm_JZuql2V%lDj4qrO>uciQ&*HOUNi4Bz58@$69pKHon(J3YARs&=sqxotn< zs_G9vM!kP$>Z6sXANfbeJN0t4ba`Ol=k=|O%r2FuMWQU=GmYDmmi#p~V!AmjyedBH zzlNPgCuSKU))l#g?uY-=61g4J09GjOD1R8Z#v1O4df%)A0dG3T$~xjWn=&TP z%85&=9QWube?#)Xne_KQ@~+|ke3d@iTH|> z3ms|4SpgD1JsvRK8NWL(svjYDL*21p3mw_>d~aQ5p#_ zOzMu?1t662@7k&JB4D8ZO#|}2zSWumK7P_;gKH@~{<(dUVYJ6aN7@5|w#LmAXAo8g zRanungsV?#0WbArUB!g5_r}ZMKqBXz*V=fwWu3N{NOd*8t%uPDtf)%^>y~o=FrD*J z;DE!nX8GsZhrcXC+9%%^xw%|emC(^!oL;+J#x&K!$nw@X!PheoIy+mDqZ z#5es^)JUlz2nPg$`{||fb9n@sk z_KPZlG?h+7swhROAiawe>C!tWMQZ3Rl<%B0mZ-gb8tZp<+V(AD3r2m?5u$voy{dc507oF8x1$lF%Jys{2m$LLag z&0mDwx#uJ`7$6v$Yrt(-H&ujiu6cgz_Bfv+qvy+De{Ix+ktb=oanxh%-;K|;wgj~T z!zXrsatZ{&qr!0^=v7do)p4JHo9}U13Gwjp`!TcmEv_>Gj-qZ>&F^YkvtFx>2*(lo zH2(`%uX%_KV?*mi=sanIYjfJ&()-ChQ8u8LE=N=-9uafj0mxl|6tjIg(78GekjBAt ze_aZl{np%y%=N2%?_YEJB^0;@XT2b9v{=87RDf5DOJHkBu)wTgRiLSUJIzi-zpR3S z^#e)q_eGA?Ti6ilY`^7p1b#P3!8{+Yj`~FeI8nDmJ;yh}YlMwQFf}An`5y)VFt}gj zfe9LilwxUF+H23wYlm&iJlkM7IZ@z!-QHuVopSJa?F8V7fdv_UJEssM6HM5pEGLI^ z${sZ!iF2q;TwW?9ojlNg%K3Y)6sQt}?pvA9r&Fir-Y7a#8qmWjHt~~?I=2I**9#lE zKwZ1EfTTZx`1Z!L5*R-FRK54?a|>{Txd)2pQp0klMq^8mk_)cwf{vpLTq@*KDj5;k zu04kuSNP{;hz!8iE-H^>B|(!M>~G{#BIojrWa~OeOR@CgvlLGBO9#mQ! z(v$rnhgeUw#~4p^a`+u}!%FTBny;Bwb@0aRM-Jdnc zkL!DIQ@2Y)gzsigOUnM2AnfKL3@K1@pT}dR_6*T|>n>1RLao~a2}!#~-y;tYb<$Cd z_!c~G>jz|y5Fh4}+}{|`sa|{}6H4B|QUTOfdTt+VGwK=l`T8Rc?K_B8Q%qjcuLbWT zpMAqWrm3ju02y|`?dvV`v&K3(2ap=GQd<_58ZImqy{6U&J0k;b%>!fm%fd#o2V2vE zQlp#mP~U?HQN-5r-KO}nmuW(WRtfd@q8kTc#>EB2MF_mHho%>29^8P_Qcy2dT2{8( zw8S8Hlgu-7Ns_DMLDp1i8&kMsW3--cK8C77@dd;l<_c8C5IfDZ~+;SuRH^Ll>RVi+5$TbrNZAD_X0DrbJ! zz!sj}<^FOwNn=rTKeM`&M{K)LGXo{$cJeCCYn?Lf_!rK$cXS2-(A?5`(OQZrzy z-%S&mn1b~Als9|65v+Ec7z$l~rY<>Qf3yWZ?UQtttn+jjC0f-~j5$aewmBuTiD(Bl zZTY1l05O>~SS@g29B|LfbUv0o_;mhe%f`l+sU@#RZ+xGZ=N@NuyIh$lN@SCgHsF`$ zXmyUm4hgni8Y@^*yJb4TNl^3rs~6nlB8Ex27OXXoZsXyB`-vkG@4TX~NE3ae!B z8`LW?vwReGw|Xc)gWO-6*9{!X;|?SYEyDsU0R z4`nOlz$d$Yk(qQ7X<-gn&6?yH>zP~3iy z@sE#M?e}yYM)AhTj6T;}WAs4!o%ldY>UuBZV<%H^>9ODTFTiC<^2oA7& zc*IxgUY1dH)!9_Z`c>iI(7_(k3L(QcS|K)-VjVmRz?j?%y6 z-h1s-OPH}})3zWzRUf+Qa#iE#7yF$bV=$MoeO1|tckXe%%Syd+B(-MgN4X5Rx1PXT z4nropdfOg&*Sn_R_iHo$@V7pAlE8-N{b0|u0gU$Yvp@~;2m9>w+|tU2{= z--N)Tx*xoYm)k7@i#x6-DtVzk4E?aT!edE4-oWwe2Aplb}HQlf}UjkcDqx+LG51gJ_|M`n1VK6?i5`-9R~C9tXnyAtjC z9$8yKWQ*g19mY=eoF!XQ_De2)n^d6lJxHmPp39GP*ah@ERtr`|5u?r2b|F|8Y~tnN z4q_rf&RtCHM@>;F${TP)*Siu(h?om7`t%W9AhDF^xA1Xq!y4*XN}QmcJ$m9!Q}@MZ zJ5AV6-e_;6mA#uwXKe+l4*ztTZB4HO$)3ty->95?^=r2oDXQ@CzIdmpxNS8o#0Z)A zQRNOYJiPdmxsP2TF$#9FKF#1YV`wv8kgITe03hH10(bHT!CP3>?>m5cq$`OV?Li4= z&C|EYcwDc35H@3@sqw&!gT@b0}QDSlADm71qB10C1 zKdZT~rnZUwFL+8a5AkA3xamZ(z5%3U_od9%M5Cfhadv=dG43jx;B9Y+>y}|YdO(rh zu%_FurT9ziF=jN<<*+c3(eIc^M7nYg&pg|N z#$SZQLwZ0{VASV8BY4l;xfyMmvVj;f`6vZmPwem9Kx&{j^0Pc=M@%;(Rd}l&U0ihe zN$A+mGamjRTBUBy1&{=PkR%Qeez3}Lv~wukEW4Bnc6SG^*76QKMQ0$utLlY$XS4FU z$9@}E%i268q{%N0H;Xfta}79ySjx9{guH7%U34dNc;~qWXFw;1nZ{Z1Y!3Iz>$5%` zZ?uX5%{%ax<1G*{9tMH(W^A)?Q(5Lqdieoe2CMC+&#|~!UF81w=R|V>&>5?%2f1?K z=uJ&fzPU-oFi>`5E+I;Gwmx;bM|KMfJBz*oinb|?jeh#?M<(9kL$05oGI{^FXS<}*E!zC$Y18&9~NNb`)o$hrN}SKH#GJ~!ck4Zw5$8spJ&Iz=<|;xDO) zBD)}?u|&%B^9}C_zJ62Vm;Euz(uQh&Iv%SF?Z|?Qx zU*AKdt%$t^MjvqGY+UxrL$1>cvqJh^Sm@$ zz06>djVeT?n9NUonk)G$^ca9taLt#b9PZ_{T2o;r>5fG1{ zk!+06AL9c%AU;UzC|t5M#!Y!D?B%yUK8hhI_FYc#2|ed)LSt!)`{rMS)jHfg&X}rCVN3(> z%LEv)G*~+%)i;cT6Jls>KpW)INh9Rbi3A!o_5wC{k5isL+R z4ndc@bDjWApG0`g>bOoMqz146C&)x_bKS>r_g33JD74!^s-yz%# zc8g`0-YoNDymN7;qc=Ixlv-y#E5$%r?!JQ$00aPvxNuXep;x?5V>jLvdaJI__oUl4 zZyI$59Ja1};y@$kUwUVc!~q~3xoRB%f%vD*z`Mo={uLiua>l%W6QU!Vk5jM2uS-uD z1K?u!)JmudMg&JjYbs)Ok38NCUy0AbYO8?ek10&2ZBs~u_pDjkQ|Q#qn}?+DAIK{r z1AOM&Sz5y2dTR=d?P4}!Pn^33m%XlD#MZr@nBX~>3+!ZY_jt`ccHe!P(S59p>W$}i z|HF5ZB$6WG~Vx0VuvLFpS*R>#t7_->>)e#8TD+c@+q7?el^qVF&0@i zTI1}DnT5dsHxxIaJ`UeTlG-HrXV^ZinIGhVjmT(#;XIeO-nQES^jqWJI`wLQm+x5s zWH}EMA`>}~@6mG4=pzj{mSmOsdoJN0L{Dn_U*?(|Wl;ox&FPSolaWdO!o0@t!L0+` zx@&mXL810WI!!)^s&Yi3j2@wDhc9v(q*o^VpIv$zcmqiEqpanx!HF-5S>lhE<>=}Wh zYd{M4lkak==NH$?R%Es9AjzMEDFPJG_ghr?;~vd(eY;lsI2Cwln?Bx+;cg=qWaP(} zXoL9ix*zC~;SIuIS96dv%dZZdWgdaY7h5GWYYUEfu;ERbDcy!TYZVvtK%=p@IpGvr zi9{@zgQITzX!C(ewQ~(VUsVnM?vV0QYU%^@mPMJK(($fk#7uj<-ZSS}xMVsT!63d< ztbYO)Dl2wsZ(C}+HCpN*;#>{;Fj{1R9C>*JlLGRSWP0im2{bB*;4WA|9&&O&xISm z+8%N{*u7_Bfc%f{={5X9n?31u#@__QwBLMiy*y;|BP;QCU9tUgmu zdoblTe4Jxi;<>;7$l1hRAd8;+pY{mA-Dm?QNjOxCaP+y0lt-@I`(8tNTJ-OYHLvVn z?Z3-E`84Aci`}i(ls+wj1dg08o}G8AWT`;b5+yY1xFG2poCu{A7K~87iKnGBJmV}9 z(gn3_!nMcK^LLsj-on&*??g-bkM}c4fgDn{@ZtcuHmi($Fr(J{L?I+$>+pGKziy%H0vMF zCYtNB>1J_a5rE@f9(tHnWdwAviMx%~Vk`fCi$to%MRVtgBz9PPN7v+9k;9uXF8QYxx*L{iO4t`E)ADfwQdDjx-s6P zjDLO@$Q0%PgNe#{vWbJcI*1_2b$D+PkK zWFQG3L7x%)upt3daE!e_Zf&%(?t{bUjJc+{D8kA zYI!^AM=38qg}_s{H^czA7T6tfVSmitxLk86NHX5k9{_m=)*PYH9ULp$HvRx%Cdlgg_MouyR?pNJ8y(u zf4@?zQK zoYWWX%aHB^$~KOV6z#7t_VSNBp^ zQysEGC#<*jkBjy8UzI}-dNr5i&q7W!R>Yu2TPjnarOKNh!LQjL^3|C8uzq^2;JotV z=|=g{wEp+7^B;`LFCEQRp=sXRGhm9&*cu?GBYMXsPvwtd1}xc!nOpRlF3E+X&QrF$ z+=h;R$6J*xig$=OGXN~{3bThkW&_8PkByc*cgR{P$jBP5&Tqc@VbcP+ml_{`m~b9l z9lfd%qXdo*c#NT3=QR{IH7fvDKr1A+^3TIn2T$Qpu2^gbIQuNx)CRD`YMGCaSzIvB zILP))qn@_5CA!ABMvYeZeEmdSXltBL$p3f0LDDs$;18<938;>f^%wAnDS&Ed_wE_x z26EJsb3@2t;@-yTMunQK=@OMy9?u0A~_E)S-_bK z?=U}u-MejO76;_3y-1|4@kgAIkjzfcs35W{~p$jJr3BPX+$8 zfWYqYcm;@uMo{8EsK@`H9{+=S{158!{}0sT|H;T~FS!=cRm6H?x&E1mrboY1c3pRr z5|$P7wMU27lmT796~k%BhKN{(_ZjG)Du+(CiFH-fGS-}q9$pDmbD8o&O0ZUuV>C4! zQHv_0L(qyW+0M1IuElX7r-V)7<#so4!eWHyqTaHym|o-`o%23`sk`SfL5qaX*gM8 zeVme>v@c$0V&Rm<6d2Z;U6VBldJG*L=2HUZ7aW!vRf!QiO8FIa_+XN?FJUV;yTT(Y zbiGJDd-pL$C@mWOX6lpx_;`1din+cWh*&lu;IXyQ*6;wwG%k%~mVHZf zty*$BwpML)pb4d2P||;z03O;L4%2c>krwOshVL0@pe;O8#hN@CJ!V}U*L-(H8lyKY zp%PAxX(d@x`t=r_YZptR@zz~fs|;X8Vqz?n(cCK_bO$2Nv?N6;Y!BEdXI*<%jljn0 zI_tv9E_XH5!b-JXjL~3L92id0oM_J@1miaWXQfEpkrCsNw(_mPik6;D8wmXAj;nQ* zkLi2%^YAaJyJI11rAF-yw~*Xc1e}@R`xZ8X&Q-IX zA%M;YHBu+OmXHl$hR#c1#CnkI2B5e7qR3#Unq9FFJiwRsob!-7*uBuW;OB{0&YTG@ z-o!sbkN@ez%KSf~E+v;4(@ON-Sek$4@V_h50x6FUf?7IOQ-B$)U;KNJh2ou}3o7LE zJqD|5nC47X%MoxNX@(em66n;|tC1nh~l zjYp%=%VO%sG#Joi$59s;kW(>NBk;$mf@>werc0~~>(RL63is{Sk6avv);aBoAYpZU z?H9FbD-O~V%`v(fg)CzwUb_-q&_tLHJFmIh&a8)YQ5=Iqg>D7ZcLUC4XnxLTZk#tB z_)Fi6OC|Z*T|BgeYVXB+EEu~#m0VNp%M~y@s4xz35l34l}F|3$2Y;Cls1$yb! zk{+D2AjpDQQrQbkI0Rw_wTeCqY`Yjd_Q3U5EZPGZle8fEuZ2460+%qNI~H%1u5Y*d z?$UKF)-s;=yOx0bA|P<5RC)g9S7}y(aF_wF(@+3qF$m*8i?)@{e1wQHPRi5fQgPPh zU1=9uTl_TJk9d_P3%Pp;=u6s?>r^ay9I$gMonXu5qLi`(sh9wknj#AADtU<*^teU| zEvDUngcHHoQx&~gHJg~YQE7m+qTlRHl+dqG=i;qW8&%l?718bw9umWX~~d1E^gT#5GMqzXSvfWGvwqXB8j}z^ERG zE*y5$g`P!0;NYo_ivywLPOx@&f@i`x9GuB47ld zQyf6&5X6%^@td>`AdHY6Z%l5#&{6ia{qJfxXo?}uJ1~e3$isj*RaQDLhlSi?(Vu|M zJDpupgUfdh4Sy-D2}Nf-3P4$5MG)5}#H*{~lXn4n<*4vX*^ae$jm=be!p6;fRf&-k z_#q8oO79VH=@Gl%nWFvqOHbDo)8PQVSJ3Zh zNna%8$e~boLz(U0Xk|EVFxMt$IwuE5iHeP$h$0X7gqPcM!6&CRUt=qr656x_XG?^> z?61-{m6nzsmad*6g!CQGFCt!gs#PDBZdfMKKsdBU-!CovIqqS4rGRTNpRQ>M5w z_n(_60BkQ^nt#XkssMo4qPa&e{zD1-4|ncAB*XuYY|N9ZjST$Pl=7fX#t>4bkeOSL zWnTW(@3&3=l_-*uOfGd07Y`RpNvZk#D|?Or*{iRhwMOrcGk#(HgaJ**Z=GX$;zIs< z=$3Nz-TK%o|MIQ3)3LPkZ14?&zyAAE%XgCi#WRT{O*gGtd<7=Gar4iQizUwWEA9Y) z!L~DdlIaG{pP#u7TqfX^RUjcd5c8t?`3+o|KR(~131xs+P@!`hIrL%n@BaI!{?{P? zqNVr?cqN0lWkO#3-pK8LGrSu&g;{T0zXAf9(0kDp-TgPiyMg1RdgJ;P9$XvHric#h zzZu>Q+^J7Du3s^^mX2$I(BI|uUnBgF0ROnY{}JH-rX9G+PWH6ZJ6*&zhmtW4&^?oP zf5qE#U{fsiE`%(JH0gN81P!v2|E|1qMgLOUK1n1b+0PrZVw%ca9DC@US0fF*7@zFu z>0IZN^gRfd-44?tcV^sE{}e8gJO!=C#Va-)e3^WwwmZfm^r??*i+zk;l4ZjxxIl8& zrQ3g|!NTF<=UMOPh#jvD-qmf??k+v9N%UV>f0qIuj}N-{CK@Y>`4!R-$}E=a7hXJ_ zr{|o+cc^atUCBW#|I%%Br%!4G!1WNpm3A;gu_(~n`h6`qZ$j6_4$qmxso94*62cYi zY)`RIu%4&N1S~H<{uO`nIL6Ia4)>-$+iNva4oN*x^@dvCdOFP2&isoypEdqG<)rup zKi`f|zx|JABw{aBuTGl4*83#_k0NM=@3APwhxn8GVSM5{_ajllPBS?eVW*E@50%nC zX+74Uw#12uVn}^cM6cOQ<2u1tLAI}7Vx*E4DEvVg^h9P`!0%nf+ugBIOiXfI%o?+C z;N#8^?zUyiAExpWLke8xU>vs(Jt9ZL2FqkA@hob}GZ7_xYDNz`%M=Av;~SOb6+w6u*pxpKYU&&5SPA)Kfx*aqQ_eOnXTOsMq0DUAn>jXdg+(D=sJQ}_}TK2pv zfdxCZ+@$QN3Htk4;FClETuqhayC}L&j>cUT&(0p+*+e9Y8In(WFK|WEOl9o>)z;vk za-aMcpgLEKP&-A?`y?eYM)I~;4P-D5yUlAMqI)Q{pqqx(E*o45Az{tlDeS^h{OFJ$l2TvGl7G8SdQBL_{G*=O100tt2Rd-Gx0!CWQ1@ ztQ;;IkT_3ljvNyo+wpg&36rp>EbI?M_UsWH>(!HR2Vtr?L=sFZL67S)?b59Flf6zU z9eA~-FyeCqe~)~Ro>sN;@)M1Dtty8eqg3(0ha*L1y7iy-c6Oe2mE-<>>yn1E0taU< zp_Qr)1t2kW&Gst`gbt5R4jtIEIbH}np)5~CRYi2MC#Y6VH*m4=C4^&@bu1-QDLEKBp zqhY*@_md-Vw&fxUWZ)H50gD`y<#x}gIJHg+rJe@w2fa`%*zXLm?VGvfaW<&7zPCkt zfc<{S`}k!<=i!H4`AASV#=87@COr203+nV|%TLr-UpT#LJ=tY9 zY&`+e2%5he&plSYdx?J}@eAl4#j3H3=-;amGxM&POV7evwTB6Q33dNA6mQL0pcU%I zJEibUZ+o&b7PaGp{k{9Bdtp@(>4v*5fma|g@-!uMb8Kc)w!IR_;v_}c&0NUqRQgg8 zppG8hu+BVy4449SJqd^@SxVty0gtpn{(OykJ&Ub=e zF?T-r2spP`6it5vHEQS69d1l&8h;C04gSFg_Q8-aNPIb2BPN}0P`OA}ovgFMq572q zO2C_MX+_+B$YiN9zc;eh(Tn!gavTeKCO3A^*qW_NSrlgwPD-DJaGr~(sA{TmTW9Am zuKSAqAbh+%o1fLG{zY9f>{YW_X~Cl3cDX|o$Xna0BaXM3UN%5#y_fEV-4d^5;buMe zkMORAW=Ma3-0V571H|M-er@Bh44im2+m1RFvQkDh z{tv-3b4{FF0OFvRJmlkOnk1$EA{^D zX+n){H1PKuV6xDW2^viNnDuGaZ~q}UO~^8M8m0S0-#IWULwH;OO zNfx~Sk`Iw;Qev4&^K;NW)BJZ~DOyL4Z>DcbI!O48UKUh6 z65Aty0RRW8*u3nsye|uSOOPJIK5mpgmq;ML73IK0zyapd?(kU#wFVV-XZ{g+3p$Fs zJEJE+k3O^ds<5^E=6@IS4O|P+Yros~#?QOugm1>C_w#~k+FM1*fsT#DsAI#gQ;iTo zZqufCj$~d35P!$zCBEmyfkWig$wMmM#8~Lb88P*T%1}<<2bdLkl@#sj?r1~DdpY7H z4BFk4UF?(?W1T6WiGMAn?4ZkR99) zom2TFThd<~#$W>ji}~yUbpnYzYW9(RImIU#_jse1JhQkV?WxBn5!!XXN=%Xos^fVY zn81{oHmCAY`m$wl&hHNrlY7XdE6CG(ke#DJ%-^#l0^Tn`+8za7sh;6QX6`P8rUZNf z_dOCx3mHsi>-3;=3d?U)uP_a{A_nm~APTiu^FPq=zhZ_?r0(`|ugN=7yFPLLyiO^N zvJ`XEA6R$&F;1`irtSwgmT@*pVge+LL(um4<|7fm4$Ug}AIe5>`)IFy%XKEpaEZp< zxAjhm0#LfiCM}h1<=zhi!#J4O!z@xwlYw5y^SpapLsR+$TL$py=v71}O!lgvZ}hn`jQk z$@{!6RisSP8T=S_+UR1L&P+aZLb`j%0068izus5%4COH;l!~bSGF_6y2NG+zZ1PE~ z%sNHbV#o|(-V4Q8xS$)qa+;7}O|MD{%V9$7uv!Q5a@Jqt>fDuXU`uxDZ)#J;pHNc3~PkLL?{{j>@rvXI~(#*_sIRy4;YoInsqI+ymgNw`Le%YuD> zp7xFBRm+P@iC0`a?9@cV8U6L^qnqOE9i_(W>xY>2jlBK!(G0YhH|k-$mRW`=7eo2I zIQ68GS84|Y?bIke?B}4W#@C-YIK1QdeP>(SRSu=7g%09FwUVT4-cWt4`IN&II{b}W z&q!(Yen@^ufBo_B*zDZ_2p$zzp6|hCKI@g>i#VINNuo9nbzyd#o-0!jdVv0)DCRw% z^Wf=keD&>OEo-Wx_%fvY|EXVQXM`rP*wZte#mdHHcnOPEfKO=ubrI>Jd}(){J!xgMWPEF0yE3rISYH2n0nA-rn_P z9a+n5S}%zX;&~h_&9%j`x1-O}t-tK?b-dNE(_@8|wimH|n^?S5ypS=F-lp$#rty3| zw(uF1wY3l-wxlk9Ug$BgR&&gi>9oar@^7g0p0xnVyq@fe74EW&eafM%Hp9K5HpBh3 zhSiJ4pP9URGECnHb{;2o>y|Wh>zAZU-GjKPg1FK2KeQOwmgov}a?8vZBs^Yj3$3z5 zrP^P#NuSc8z|mA|Ck?9f1%s=+#hpd<67Q9s?pgbt!6hg%Sv=+r*Y{d20XZxEghq^2+b;Kw&^lW zOrgXg z7(?OHOw3Wnt5VHw$qd`%y*IfmO?|#OcHIF5i)_C3sWhk7DePXRyA_WFl%-Z`j@d-|CnHdQCXqRmlmB z%cyIW<<`{F%{Bs?b^y&zJWbZ{3Ew_phM8v*8Kt9)hsnRo%P4K67$>po%jaV~H*o7~ zIqaOL8uG-vFnPyRTwQixi(&#nd1d{<*;)JP=Mg_2w}dk=o2jHfHo~pIHR1#lB}u}< z1-`Cu`!JVO=vF>>O)(fXu`a9RUhb2on^df0+PRvtvBtmDC+&B{v4<)fjQA`5{i0Ii zf{pfs!Eje*et6Nb9;c-3I7LY19&_;i4%s75!%GtsY>{o!Jwr+*#7e8(b9xa@(6Jx} zDN-IOm7)=R+YlpeJ;_yEMyHR$PslfliPPs~iKPFBH{G>T;* zCb}aJg!E6Nj9U*%ko%BdzD4I%x*yz);jauo(EQm^Gt_yeD)tu#Xb|=5)4MC zDm0-gu2PB0%iN}>o72u}_DXevv_em2=W;mY5e@6r3cWguE8A{$9uls}Y9l_4NEVU( zwl~SlNjhthqdt`m$7b4J?a_te8p+FAkjNB$C`84LhS1|w>+R&msg4=?a`zeE)t)c*9YdDwz{EkH0(A+?RgN`BF;3oRjaDwb2c}N9bz6n_CeQa_8#tnJ zHsWq2|COKmAOExgeUpLoUBYt5nE!`yuAXrY5zuSmRT+dE1=;J35GCc3RPW7+{A8F( zFSGlL85=?%+>au)G;DpaD|7GWquT_{yFxu;aM_ZX0wi@%XDYe$Ht zW#A&%RX2#7%gL%2CUs^1B~=Xk{%oo8QcP_*)p7ZLpGJW61zUYNH+2M+{qR_Fq*CRw zHn#avy*I7-75AH{uB}F?WsfyOe~wbERi3h#43Wa9$@;4s&Kh63^~$<>J}7gw)NG9x zo@oaXmx8tf8xcr@itq*l20cyTCRE==yFna>meZH@AvX$Sd@z->aXvh2Wqdw+*E+pD6Q4e(Y3f(nRG{Gta~m(M;*Efm&xx*80` zvM;vR*P$#43VT*KQNMbP8}q-ZXBBcgUY$5RkX9r8^6TqJoAhOcu=Ds&b5ZDR>H>GS zRD?2D6bQh&Me6zXLN7n0iL^5W0$14k)-(8>G_0Quu$iFlK=&-mmE(&;ILxb)i5A@9 zmNl`Pi*rSuv`NC!&p&?Vj;~x@+)o_BOD@Qnv77ze*`skF!m;2~hqIhW4ToHnO>3Zj z2r+srdRglutIN~%bc>I_Jvc_o3Azq47MUe@CkkskxV`^Lfnj1;j6r(2D`S@Jst|g1 z3K}W5Q%O?KBvMMz7F;}vrk8$x_saF_nfv;kO!?+qo8G7$XSrZiqz;0aYM3=`j%)EU zTr(G0R;bIuY@QfCO%rf@3lZ?yBNsH<#z z@D-e>NJbvv+iTKKE;+v5>sAwI$ZcM&a9m3kp>~|M-D&VstvC2(+@M9fqJ7U1J!_A>$e!#tbctSIU^kZ;^)`CN9M#xVYJ zO(-OhzLbmj&3Suzj~$x~MvwSX2guDubIGO5`EOm|jYKkHk4bn+*fpsI--oihk}$s! zCZ0zdikMeAH4?q)c}2+lIKnvS7evLNOeZ+9uoqp@l-MamDl^y2wBy(^QIu308wZy` zou}ie6zOdT7HsV-DzZ&P<7$#ikwg}x-kn|G>q=GS2OBmz-7+S`FQzoyD>zd#n(XV- z+(-^vD5r9YFDbH4yC*^DsSGEv_1qm~sn$hVdyze)&?2{5*bt=lA@0Jx&+_(|TDn*T z;l9Z;rqc218AI1#EuLW|G$C?3OCJwyLVIX=(`z>9MWp#mQ5!ZCm&TaC+~I=@-s*9E zp`3(S1ZR#Ay;vALGx@Aro8hh2ZgJ4;+CG}#JGPmo#Ps*e0O+M>31!{~6&Ax3_!pnk zb+49*+Trm==jI}v;+y$*EwURvokf_QgnJ^(k*#!Xsi_xxMZ=CXrXk#4m+e4=v_ej! zcZhl@*d3E3ZGXplMeRxc;&YyOz!B^6GF4YConLJ=pJIXJ@3n$9fWrb9-`s~H#?VjE zb3Czv`EOb#VoNc>!mkhljV6_XmPu z{3}+f?_hAB-UtOWs{r~yw7X*c+@WZF{4;myL`vm}E%+D;${5S*(bqYivB0LAP;poz z*KK=SQO?a83rFDLg~}M)^GCrR{D@4HZaDWCtx1qykxUcNNy;?g1UH%IE4qjNHfDMV%@DBT*^Ix!}ldT zU{B^KiYfXA4xifGL~y02RkziUVnFjNrFPSpn&t8)Au+~utG7$5%wI{uA;r0uzD(%Xim@~E60Vi42OCuNcv={mGf|Gma zJa)a~R)naLjo|&W=w#m0!e^^H+MEk%Qm+Id_0iDnpe4I*O3w9TpAVE{k~AkzBBaMn zV{zf-$-a>)ca>A8rA}GSw?f`m+>n&rK3*nlxhdhwW(jmH`}@g%oqsf~s(C0P4Ulk& z&#Fi?plb=?H|6Yfo*JimZXVJ^J;L9#2qt@|I+nJbV)&8DJlD`2G{EfQ1VyGeH)(O) z3Iq<=Y<>`XE>T5!#%FAzQIlljuzcD%A(Sw1%POCxud*!ZPOwq1_+G3Xer- z11DIctA?Mtc@)n7{$V&3o>+u(lB<;p!fPv4^z{pf)G5ej-46*i2ufu-?BfcqY~bSe z(?oP5xYFgrWp4ys1JN{0)C1!2k*uLd5H-L;^n`(bFT^rY|Er#n!6iJn z@<**|gig80B^Lf|}dVsc#alO7`rllY&kr ze?T%c(RlFSe4Q4mlF#x!6%?YxI+#yFKNx;!8EY2cDT<6r)|S5HSMSYee%VZ*VfJ3w zVFm~LS=75JwS#vut*=iLaVkXwFwvRaIr^FL6i~v!=9JEAFb>_UI(BsX;kq3TdxT+&8O+_qfeApxuw#h z=NykBXyc{7p>$w1wz+QQ<2*d_6)R7=aZ;@fn_LsDk?hvC#5M@!JCuPH8)otsx+&9P^JdF!BBNh>-$1RAsSiQ)+oc58WNk;NP+n91-PS~PXr5eLKr=h}nWk!R) zxNqziD)br`mPwu$p&aMYq2`}hveYGgD^()R{r%LK;u|VEpyKV@*@1=0R=$n7 z6m(LFmT`UD%dFhagYGjF5hNDrgFih@^OgO}> z77N`B?n>gP?p;@D+hO~Uf6$x0HxOB+44h#p35ZJJ9z*Zq<6d&&0NATy^ABtk+C3h+ zRu^&Z^B1R4zHVXh_yvPW_P;HCSJELs(|8fz-Fq1{TiFb8rE0ai>eMj1A7xoNOP-!};$r5U_Q?qOwy|5Upv0^G zvD4=d%auws{v$?IzbyS*f3%+cNEd*@TB;4*WP4rd|@$J`YNx%*JI=0XI$xb zHMss(r?mixih#>MMwz0)D&`9rUfUCKZe=XGO z_=iV&R@HtmsPaIH_3*Bw^(J>CRrIT;LR_XFXF?!j@yo@OEcf~^BLXJCZH(GBwpXZy zMZ+U1_MYXP#kIk2H{U_~4=FGf-0|bMxoHuomA*GfBm|6ZpX5$K}Rn$;Bi6PV-ZX6uZ+-$UaC-02>Q5wcWaHkV+!P z3I*#_hs@6=73)_w&udzqvb>{fmKF3`o2U2+UCRoDCUgXeu zVH|cnow?G*%R~2(t5q)4EuXdUC(Xn@X*O@@uzrqVkSx2sCl_B;6W;JO7Q=Em#qx;{ zN*)`iG=AkyYD{@vQO~%W-yEG~OIkzAd|P_Xwb*u|$cqt0TVv47$R9Tn%|^Z4Ucg+3 zPgVMb`-k`TbUy12v9Wt{LE9p~G?q-d(zhAi>FcK1oy7L!D+6hI=FWfE!tp?^r# z#6rc9BHg*t;e(E&q<-ZV#y^)4*kz}SRQD`&^^jh-(hN4TKgeg2J<1u(Hiw?SgZfL} zt&jZO-Xy_WnUsawg)XPQ%B$efTYB*x`|~h7H*%*3IkO2|G8RIR$}DH~OY>uUT%@mQ z)A?>LCJ$`kJ~T?7WN;^qNw5AhapH*UGE0~oO{qs$MWGf|(QaK$j!%%0Oq>9Tqm%G^ ztblT7kM`H9z3#*w-TxPRZ`svm_pN=mlp>`RYjGWAF)wdeFNwuGW1gbqX+Kk%6AlU@5~ zsjVzxeFH#9p;b@3sM%GhNfR9LuH}mE&ic z*}1BTMi+sRr37LNc-XU@;@RzYF@gZY*5Bo z@1^O2-jVdibKF)2&luen-+&_l%l5i?o8*Ekha`NB4jpPfcSW)6AWdv(;XgndKgFye ztxDW@>24kDMx8IOaGn>l7;4qU=|>PNdUPh{C7i2%dC{or{%HfK z>u-|A$`<}`ntVm;`qF}MZW5RBy=3M_GFYHcXrNQE=&0?`k#g~{3m~okTRcpgGo2QE zhDlsWXosvo%0ASx1)1gku8!=Vu^3CQj5wTzaeJj5&wU;b#3$~+sOG8FrVmaYQ)!Q^ zzb)Yf@DTy$C8Uu^b?;O6h`(#k57B)m(FV2b?!U+ve8%Ldf!(kg^gd@p$dKfqRRg14 z*UUI$CP4<&t82SF@rrcD5#*h~`MGnWfK~mpRf|}(T2xbzLy#FsvD9@Wg^@l98SrND z+7b-D@ji-4V!F0DJeo&1XC2(i%uYr=ls2)|0+U8XGm6fLNX^@^ZnvKXUiSW1L9G&N zTJFES0RFv*SjzZa%EI4AaOB+;jQ{wtjIhycn6}}Xdbp`j1ZL}&ZL8_-_bbNC|0^1k zHCCm(N0eYT;O8l&^QpCZoQB>xe;&>Fm>{UZvdn9_FTK)-V_cn3V>ToYA)DC0>a`gE*20r$NxTGt5%Z0+^GaGWsq^B{}}RudZT%18adSz8vD1IU$RIyy7!xM{TiY^2_D8AFFCU3@6Y@$qy1FWD+vUez6as zd=i%h6qF5lLBr@A@k{+1jmjx$DJ+ zD`h856eV;p(tfz=_bt_619F)^ zRjj7=2vJ1YNKH-cl6>p?@IAmK6+t5g(zQq$;A^W;iT?3Hehq2{GhO%%FwPel-obFj zHBu&I0hL4{TG3^W{;`?y)d&FjqZ7Qa6oeHFl`mQMG$4B?*3c4Rrp5k1EGL^k;i{$j? z82XjWt7H{c5h@^X!xnOokavS&%R1{gxhFzRPX8=GZ$HK4cpdvm=uUaC>FwsR5%oT5Yso0f;;q7VWJ1P1qnZ45;aGkphheiMrUzyC z@vhv`NA;#Jk3~dNJu^g|gQMR80F_q>b4+3Pw(m?Dr%3)EEyq&k?}C`2rEdPM9z?U_ zX7{vb!qV!XNa8OsLXppqGe0WRWlnxS_a#K`K7K~_$I&IEd|lQ45i@^CNY~Pm*fHc} zL&!dY%^udY-4Yu!m;c8X-p@b{dt`8`Cfh5nu(J(rb#Rt28u zDT_V2LD3$ndW<`1Saj1WE9O*)TEk`&#+=cgZWOKg_80~59Y(Td3^f1K~c->z>~{es#xTB2EPgcPf!UK zOEf4XS$$#$Y+IDi!~MQS&KXva_o}u#*_(b)Z??;P{Og8ndbS45q?;N9YehFd>Ia)a z^gEZiHlxt`#rNYUgBEf)l&B593_t?Jmir*KOmQ7*p=x z2JpCJLPgKJr+y!3gRxT1m~%IBJq-sOZ5WM)tIN)|&lW;EN6k`dsK%J*iB(faVbNP8 zhSW97-P0y`ek2MTCxy9+o~RjPA_5hf*14KJ9E3(vM*PpL>q89;zsBla%4n+013I>B z7wA`&^vsqG`9iA4Kn62HfWsDLrHgvg~ z6md>_QbORda=IZkYUTq8`*a&e{%~}={BZPX>o{|L)?8auDO~ocOg<=wRbq4pA zlZ|2j&%$F9+du0tS81F0y%2*Cl&Z`i{2!hFhcbpgkfFZ!-+lO3MOzJS9V+x%f|uRB z%7XlZ|C0mw7V(cBjfw=Nxvg^x{vQXaa=jIEf$nL5WCNVgF=Bv>K#^4P$(fPrh9`d< z{!_UcD*ac6NnoyM{quB7o?E8N}2p??T{M8+MQT>}K zIC=T_T8X>e+Iaf;&~_2N(Ubq@zMucS?@0|KRx7(~NIRty`p@hCzg)(55?Yi?&C?%k&*V@w=Vxu-1plMr`|q#(e;=Q0 zSI`WK+xTRWQ}UnUpZ`znfR8d&`HO7)eZ>FEWBlu-`d^^s|B*ER*I4{tBIrND#eaYO zUn1yVvF+bs@BfELl`-yP26l}b`!dVg7M}OY8T^29xoCt7pd8=yIobV$9hBOh02tVxW=Zodl0vx@Ovm)dzL*S!L0k=uXebkBQ=uq%19arU* zn{zDP^z)V%9oMgp1=aEXrEEa4bD^g)`so@6cei*u$~#n^Cu=#p=#HD_EgF-O`j?@w zk0{}KzmO{3GOzR4g?*5PO!cwyjzO~*ffNwNre24n$-Oh$jmPB)?LXP=qL3~a z_R#A16E%u|vnrs9Q>=?Tv0B6WC$eQ#sI--yDWvUxOdcmrSfre%M{Qm%@N+WM5{i_H z-zic#OF-r|pWTV;tqF&A7RO6I3IY+culf$cDy=6AnczER=4{*5=qoTGhj}aM67^lT%-baq9J;Si&%48X7>`4f zR3q$l*@&2S)rxY{+Adn|SBSh^%T7hB zHP1n<5Us5D=DJC3qXf|Y(grc5vpaJGlXcF=qJvpIK$@{@e`i&Hbi)OPA`lDxwpCCZ z>e81o|6v^0tLSR;uAZY(otBsXgRpdPM8kYRl><^piqo!2V%5m-N2`fbF{Y7Ec>B61 zVt;+3JVInT8Lov7cNi2+F60!n#(3gQLVF5P;0sP zLbuABfkEz|91K>3Ko)vFb_Qae8wh^q+d86CMiGSjaw)uTP^&du2qp&*apX+w~Tj&3uZ00vTLVW8v=33ZSoVm0_R#lYJ{U!MB zk(h7Uc|;3U=iN*}6#p@TdZKe%~G1AN47hx$@EDeGl{YEw0@j zU)~CXb~$T4o7`y%KDBGYo?<$c{Ln?*(9y~d7CFyo*QEcU>?{NgtAY(ef>0PL^Zy`K z*K*PARv=0yOm}jKx$r9GsFIhz?FgxBrAk{reCj-F0(uytI|0@@0O;Iip&raMXLq18 z3Gaw+M*?~eAWzR4S@(dX3Vo$?ccjE|>wKsahB=t4B;I25&(G8Nw_ciJC7Q)(1x9|& z(ST=2J|CzDfK)Z;Ug@3y8g^JA^P7^@Nf@Q$v4*By)Www}(x?2QoD|3O-y8q4%q^TqAl_vT~OJb>929?2q~+oeR7PKH4w;QUc;qD+3XS#SxkBeHhzR z+oOpyq+Ezq3D;MN@K@lSzfn68<6C6TKP85?6X?Bub8{2#Z=*!1YEqZG2EU92JkL*h z7}2_|mIZ{jTJ4rvJ7&&}$B$aI0;O_2*w`3PPsfjh=6LGeifK8`xX_3QRk$PA^~yHq zLB{(()I&MLAj9>aBbuoLHnnN z6_I{`mXYUh(sa>_!`y*Mi%)r;_4ONXXUg%3AAIm+{US7WcDZ3+XI63EN;JEuCodO; z27yeC)@u^$ydHc@4C=X_!WG^eJJPg;x;i60vQ%E3-A<)WwW{6~HH6H^6l0ZV-Owj) zn@n<6ZN75bKkauUnlT|jy-?9I$s8enhCw)gr!lK5T_yQ`6E{!uPj*KKDeN; zaLQ##lec2m-`~AHX!d$GIw9TXChewH32c7t5EyH_y>gv9Dj?Ry)oSKpX6fhs!UsS0 z)0aU`S3Z!G+xP>WWoK!l4fjReAPFmmryVPa8qEM8*KJS~JK7QIC3&hO+~?V|o?hti zocj$0)td@S@R8OEx$1qxn{|$@9ufUXhsiACTTcVa=-tSTw@odJ>|93-YXrl zIZU+ikH0hA%_+mJvH)pEptIzwQJAvFj6UHpXpz>EvTMjDev4|J^jI6O47KKM;(bh( zXS$@@5WZ|_v!H0-el2Jwn?2gh;Sr`3?{>StM6f%= z_eMzc;T?S8dr`YvPp(l%%VLRtPxaX7E#jp+iV=Gnkvxt~oF(Sb$N=gA(^&SlE2a#$ zL&14BXF)~ldPvEVWZ=}xGk>truGyBE(Luiz%OV7r6HD|1HG1dV4Fs;UX3Y; zg1gmpEB5j)XBnDW$2n+td$w4Caw6SCvq{k{Va)4~N4RDaMm>8xb<8T6JJ<;!#b zqH@fv-5K9;4g~+WA*tSQ5K#t+;}G0qfYN^Zphy_Hqwi25p}r|l6cKhj=5?PgDCJtl zb(&Wr>~)WpxvA3oe3#iaZAz6IuLrgV2?&{6ElKvho*Me8r@jZ~M}-W4^lyFoVV$Z_ z-s2@H5z((QsO;)s_7xz>daHQ2KBP!SI4jgo(PA{as1gIWC^i7&Q}b`+OD7mL!!{>F z0GQ-(1rqy$N<{jx4zhl1?WZ9?$}nKAP3vZf6+*(U-;j}1KK}veJ*5O*Cs2*upR*6X zmrUi#FW@7enFKuZ&hm}9CobKKNaj$RM2O{@sr3di53>5;gP6{97ZEg8r|*W9@8K~) zdoH5byXW_Z$PvO4rHrG8+whxv z*d**va$B=nO}<>NH`SSwb;uGbqUiruTJW(i!vCK#<&e^K(xFiOYMoGyJ2StGn{Ufm ze7dL67vCM!)~5=SN@n3F-|O$FYVtFz{z5=qL8+23$g*$TgsHRbowM*8Nt=ODd$MFc zIiW%^RGyeA;%;~=dA8NJ6aI4eIAz#yw1D+>o%^cqGwfd_`^jlRq2kwPrz5i7UX<~F zrVdd_UY*G-bu&3(F1x3i^L!8-R)9jSrQiCd31=jSL{r1usEhRY?Bke#il&)GO<< zw%_UQh6mCgC6mf+o{t1M*LqNdEWV|yFw?MsC)ULwAWuSeE)Vr?#KlacfrHshbDWE^ zvq}(DezZ*j(SK8%{)_p2AF4?19+(;wypj`W!;>JQr+K%NXUdiwzdkQWBj^+vO)1oS z(VTa71|#V}ht-kF=)OKc|4z#2aL_F$*psBH!(~yZNX9MfEX*lBSiQ+quaO8WjP$O! zk=838x%LU}`&_ISZaVOm1gv7-5_!v|yku<6hS$)&LDg(yZ*MPR{zhRhuRZ-rwKyfr zYZv~C{rm<8XZ3tNT1^#2i^*o0%pulW?As-3VI#S-R+^K(YOa~|{oPZWq~K%*iuXmm zuN3~^t-h#g6!ABmdyYnX5>D`Lb88rMW=R2Txj4G)PhfwJ&y${uXgj^ za%ZVPVX9^I138}!KEqg=mP#s`3E)a|!pMc+{w0r%Ymc-X=d>t7TxA;Jh4xZ8(NS^tvV9-A~1DkZ$; z%g&6SyONs2(8CyG>9ewubf=2056yCQ7Pen#h>}*y5MT9KhC3}?r9vD9WK?U8`@6>y#zLeEVZE~S6F^AQJ?Ovtsg^U5c21;ef<580oF!* zDxy-f4LHlE>y4nF&LIsiUw&;f?bi3`SL(*dGPnl~d+0X#3K`6`85YSA>1XU|yp^-n zt^d*a6h6P7<1To|30iIiMHG%?NVMMxL?w-F!gm9sbx`UA6p#GI=TC)Ff_dc_ut`$H z(@(w~OeWXlzKpL_mAbFLwF9F|z5&2z+M9`*VwT-mS7d#mubr zjmFHlx=Cu1kxkSh)GGF}`GLolk;k`9w0?IgGuZEzp$CTjiv*YJ=>8UYr{3yVvBfNc*%kiMWgTvIvvca`Oy(wA=p-@8#ODj6JW1V~0*81zL?cwB!VxO)7iU478q4q6d{(aF2du=wQ(N zY0%+_2#1ZBh+F{fd2gDa=}8;o$*>MD^ewsPN4C_u2aV17plA&M`qVpt}+u*8|E4T z>RB!CibXJxV@x=cc~;3L>U=8Se?ZDj!7Gz2{cfFoZaT~Z+>Jg8qR;s_>!OL@>naS_Eyw<85KgsUuvMVn^Gk|L9%y5RJB_(y+%ITOLON`3O z^NergJoeHI5wFGpnFNo0R;I$#TdhRMMOg8zd&Jnt5pu+7{14L7&U% z#`lp@Osm2SKcxb6x00EO#QZ%Id{g+NsI%sjHnp|w?q||(jAyo%&uZ`ApF}_;$^470 zBZ6Q4MvW{{iPeWol4YTW_#0eGNuMiDg|7bmF2cX+OcZG%eissz>s5pp56$)~K zrm9tW$nU$>zM5DMb`YX}Sc4M2+Z-Gs&M+JPW6UjfdJ6qv^ggB>-+7Bw{?^?tH<|{K zGv?(h%Y4lo8=+N!>gC30wA2c%^MsG7r&Tf>i){@EhFCWyf0V3{lk%`$&EaN%7O9+H zag-!0(I)JJ2%aCaUJ4+6^-8px(T~HsG#3=Uo>avqa5;*LIf-{+g~^3DYE``I;Si6nbw~_|)dCn)U9gjj(jk8Z(n!q4E98v#{^xu>$NN4T4}<(N)M-!aUXqtbCNHUDKQMN+nGozx1a4EFE z?f?!YD2JX`Ek8ar+O4Yc*)4z8ssw6T05Y|N)61PA4G(-I4);<>VBZ^OlvW z?NXhNeY~5(6=>Mr(<_8SWD3Q;bROt6Sm7R@X%v*qXtW@xs*bsll*!)f#fY)2#t$&9 zc1zYC5_ivZWNcHRs0=v!Gqhw{L&JJ@_EyPYjy<4cW{q7rTYV(8y?;f8Fs$59;~1qd zZ1p1-$vSHoG#S^>CR~};_~GQ!s=pW3UoMcamWqr|GZ$4lzsW2+lOjZ3Z6y{n1jWO@JSlEK0xKT z-dIMl{Xoz|gvO}AefPqxD|zw`UzW=4sd~kh%xD*jp)wvon zmQT8NApY#KWaw<&5G3@&$NoW z9OK|j6(WAO)ro&p%-(*MD_?BYScW-wQnD_(A5J*l`Int(jJ~o=HxW5uO(zwWkG^LF zsO^XkYpaA!9?-aE4=C4z@3J~Fkl$J_M>nt4>o{wsRdUno_f5f0%H^%XqECFJ1i+fj ze+?O##dBh2DJY$E^p>CErBi_DG~+kYj`=zI?=_UrP+uh@%>(VOtAfyt8RI60^l=45)*@2al@T$v4Kw;X#b zZA`}X#gluk`xp1bwnCPiI)pSrzT)=Q%Q+Dn$^JXY{1wIw69TQh$#M&zf!O>}6A+S) z?5ldq?#QHgufV$)FfZo1pxEX&k+3_6B}zEJ*-qm}mbaNuIsYMSXR{S(AG$V%@@ir4 zn5U07$VmPzo5RE1PEg-PcDjH8~<48J>ocbpTxKe zdZ^NFk#;0Dvr7*f5d@eFq z+LHiWN?&K8^lgVI1an_0IM1k`3)Go2nEMYyy_~*97cV_r;+(Wvlx*sGzN+pQ4YcH;Nt=$uwWe z7ZYexbYW1J@pvB1meQQYU-$xU(EHr2IOoiTIHN#ct)bh8t7M3;;02}ecScL?j(JYV zD^_HCv`J#OLq*=1JIovE*}=&_Ga_J5ACrDH3Q9fH_Wxi*|7A2WnSnoobc>Cb=>kU+ zn;WwfJ=Li=5Gj|$0H*d6JbAMOE!9d4ZHHs4=zHoc=C?kP@j#2}+pK$honT)W# zQz9L}SfYE!SH_?+p=A^hX=bDSrI58~IBm$%TV4L)OJb&7i1kjHi!WtXA~gfU!K zt68;)x~~)ZcwiIJ$0=n91|SNiZWrBm?Z(`%S$=JwY2cjH|#Qj2H`T7O5!b2c@#|6gl3wPK^LUmS z`{gy`NLIywe=#5ZDKE->-=SI)n0bp3zmr%kma!MPr6Wu8rkuStQ!zrfaGtC_%Qh(C z(-ST;emsfARI}CB=d#Qj79&BXk&f5ASWb5(?F)lSy!qyJM!iji zlq(o;Z?QunQJY-B!KSus%%DoU=-Ow(v~6{(p#6kK?XNUi-Qq~4S{~vsUh^`B{~%nd z+WIliL0|SY+6duHIT`Pet{&S;`?YTqhs2(JXZL_#$w!Ic;x?2sl2RdMEpm6(QE=o> zw)E~@^aU^I3-(_oyY!>Pg`>b)%WJFQKsnDglUeX|BK}ZX4`mTjT>awGi|XPY8)XGz znC(+M8&cf^Mi&r69E$z8JXkI|S|}SHt_IwW2)59EzQv>bgxr{N=)aIdwx2fZ zMeN&W{H%vuNwZxtQ8U;4IHQa-ZjE`V1A%XD_q32)S|Zhqxq=K99oKgpf+f2FLu`e| z%Z(~3(u2{P!lJgDoS(Bk$2Oedgu8fy!sXx#^BPO?+cB`>@edlUQg8qkK%jE7= zzmp%jzdWOi5j4oHeqLAqY+_EI*W*h1pc*q8up^4x)8aNC(^zyrP^Uvu^fG3d2xwz| zpOgNbQ45f8ASO@`oZq(@Ul_Wa(vfelAϓXXw+<4)8TU^>%!sV#Z9Q8XYa99c5= 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

pnNkHL6J`f6q`o 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

# zyN{^Msf>cr47WqG07q#kR*A{x$tPBK&FF|t?9}L%Mx+ffOk&DscdKf(>run}baQfW zjUMyfJ3Z78iS4%2z5a0XNw^Mz{yI^0hXTkufG~VIb8~zl|9$ zbbIS(A}(d8Sp~@}Xw+*b43dX4nF5_@1b4uKlbf0+%6gtZ<%lkU(QH(dgfT&b2E5i4 zNCrz7j4(~w-Gt^lb+9D&&m(8CZl4{TBhIRGy?wuN@NKA%pN3+aiB{x}*eAP3FQ_A| zrVltui(a6t4xxEb6+Lov6`%HRdBy62Wj0Q}ys)S`lpLE3ebo~Rv0pA$p-5xW8S5x# zohn198r@vyDYNLfqcKAHfdADQ9__KF)& zvd$=68Q1#dxsk~B-PpsF`9l-8v7*Rv&V5NU+OKa%Nu((lkuCU^kTPfo7`S#Q-u{riL$Fy*?Ly@ZL9M}!_=Rt9zt``C5vo<+^r0A=H9 zu|0+JTzSGIIAiuD%p(bi^qFUgB~2hiSX4xOb7yTDcMDc4$Lp-+%X*Z@>wuY7pLR2G zYqRi2MUB(F(-Ms`+i+*|KIPyscT4bFG2DETPyT@ScDZpCxVlPwKBB7-<8QaU2>TLK zhpW2JlJp2n{-WEWvDa4unYl$nIYDf0&D0{W7RD5^ep4OYYHk6d`9fEfbEazfk$7#> zI%BSvSuSt*W>+eI0h+A15HUqoKb)Y=_B4CTLj{p)PYlOv?VVQRTIlBM*F53@c=Nlc zWp0Nk`nF$A#!6@p4H5W!*l(jcy;2{@IkRZcJ@NDD#jon!D`4PSti4vF>m)5(jVhF^ zoA&Cop7@$$r?+CU$5)IcnVi^hKwJYkoj+KNE5PQ`+e+5K)V#jP&5MiH$Se&zEB5_* zby8g`aJ5aUD4gp`7bV&g|E3 z!Yb5Zv0(erWeqR(^$$H+mkj-swnok_mdKl6Dwcq@zTs+W^mj!rD~Du<~iU*=cO z=#8D0hT4SD?ci|82=`6Lc2`imlGs>3v3U^Td0jMG7}EJv>y=}<>qxjDSw%0aUkzdC z0j08{guPAldZc%@`EZTt{m}&XG{fh)J z07(0Tx{A*&qFLE`E)NedrXIS08?Yj8U?E}mH4~?lui?^^b1Z$K0vrfm&cY}(WFKU!q(M+p7;ADaRHoi*xR!i29%SqpVp~}9p{rs|>S2TAcWEnis zYn35OR+iGR(%;q~D$sjy20<(gFF;A8x#kx9OXv{DytXdOd!Zg0H-gVrS7V zXx#Q{ie~P70bQ)|lwn$;_u?~#bIU+qom3CD# z*(W8Z2HJ_v9i|TeTEER?RtFfDDQi;|>+yXOBlgKxRiqGHafS4kH?v&Run`XGd=r2t zn0kk@RzQMyt!&(X(%>w=w58bC2>)PRw@czcy$exhCaNs(gzL?x{*q%AQ>_bf^3n_G z+JaFZJKUfsL3@}q+mhS|AB|t(gM4*B98Ht~Iz%^XSRjG?D!KnTa&pGSHhX7mFC9Cc z#}AgYOrF?5S%?udH+awN<6_r*7ViI9pYpP(d1jr@%PQ6Yq^80uINYG|2viMp5+jR! zIvF=o{3*c}0=Qy+^V~0Fegipo_d2oKVM7guK zGy1Gf4O=bjzD((ssXhrj9;75VKFa2o6JaEK*vT?9K?CN~sfd^YqUa3I`w?nnH5~U( zVMmPJZSiZis2b+9gwYc)yNJCL@wHp4bO?92Af4z14ZbD`V#Q@7tA={n6F&Ee!tP~F z4&wyH3XDryZld}jD@B4h%>*Vum9mY;ifyP?D(<8|czpqFxN zdAQ0g)YOeyyHd4C=dmCy>_>{uVVlXQ_4(>)CQwScELwV~NCX0T2(orLGng{c)Tkom zo?o;3>Jg9V4wF%DA;SHpfV58)V}IIfU5lrYCSci2&iyTygS_xb>+MNX)Y>!G+#ix6 z^qzL6{+$&glBJOI8?IQ6%~nzZ%w<()`1HjbFQV484vOFnpD^8g+YF>d&jsx^=TD7i zuPC%a3j!WqWLS6v$cQbj%q|&1dujOOIi8|knlX15jkV>-`?a!TgIlr638qLXpY@hH z0|ZmUyqW@`+U_Pc&MWWiU4psCP%l?|Gaw)B%VnztD^DgEP2sj09JkmeZ)iuv+g+ns za((H!S-2>tF{s;jOT>gbr3#pgHYJ~ny_DjzQkCwyo)ZT|nn$U9bhm1TD)lLhgK3sD zGPWPwy!ko|aJ5odMIrVIL!eivYCnWU02j{6#{`aW_YP&l9m|w85+Os4X^KLWOh0>f8Ju!%B>97i*(c-!rn^5S|Jrzy&ueHcTrB+1Bq5;G-E7SQkmMIk-cq{ zy+q$))!5L^9|F*Nz97n@zTZ<>usZ`{%%qlx1-aY8sc7Y=o_A#bX`~h8I?$iOn}mvxdT( zos?=r_5gobo!+xOwG7U1q^6dbRZ9R_rTHXHq31271Qm4+C$E&3Bk!g-qaO`Q{-T+t zsPsC&s&|ZEcE z9PdLD`bRW(Q8p0!?yOq5C`5$L=k)kGE0=-Kk?^;^!Q_$IBN+iT`eW?!h2z!cAE0-K zc#CUWYOzuGQo+q7EI$$xjm&FTml8pPh^lj~!}UnOt6?(o7^>y&d~;H2%cZ6=;r{mi zTtbc#$X75(%Y7VKLNwF|x~kmPvOsGVC`yx{^SkH^N95l3=wgM~$cPZ1)bM>`v^ zN8gkhqUWkrG~HPUP+5{JJ|;VuGrQJ2x@x)Aig}dd?A8|prEADc-_1n}Lp~qrXI~?G zLnJVwpPw{*z+Bf6UJ>ZA)m%@0CLNa%tT}jH=5Wd2^-^My`|6T}8qJ$IFQp{AltD=+ zy5Fw-Rd2$6j-LGi{YWbFk)NaamvqXAmcZ|bUbcj6s<Uh}6-r zBPZZlMy(s&rk-QuE4?I$v}}ct!ZF+tl_0y+q0v*29!2q&=Y-_cL!&P9VrlkYi zw5rPHe}x!;#PwZD1Ft#P)ugzsC8TgG4K@L16Ib{fu*d85PW0xsX)F5iheW)}+kvZl z+YY$MvtIrFe_B4zWf_ku9@C-~)BrD||LtEyCbIo^-CIb@x*zh=Lt@}RXyIQ@3OER3 zJ(pg@Dz=6)$2GW3j@r~u?^$(NJej=sk|1FOgf%9%8&>sP(-uF9YU?AsJ&#J4791~+6Ai=-n`kx`f zWAE*+@7k1~tbdMfb;4e*?(!8ZD94_Fq@}eNEYAveOam zz86pYdHEhIZvCZgE2$9#xUIBx6%Fez7&pk4~CV49`hV+QMQZfM&)M{ z^U>?Eg4Q?cURf1ycxA3LCBRljCI@Yb2PLkjxC_1fyW#_WnL~BMJW%AW)vM|l)`KsM z_%9SH37{tLrk9VNj(pd@ju$LTG3J>{t%eBjS@#f)5^mmOcgkNXn(X`i*n3ad8&g(e zzLzHq=d2vL1oXoIbc?^qX`5%(v0D?F4WnkQE3X8-F(LnTH@Zhvj~|yBmTRmq{yWKB z9~0xR|5#0nY)lkl7F4mI<$418_ez?@B-j$LqnJ#OY#z_Tuk)g>tvEbADkH}RK>Kl`1)tE3R$b@)if zIj)|hFz&y8@Yg33uA`swLWlG5LL=<@e(e>A!n2hi#K_cyNHIuAr?4qN*QcbND(a;9 zcdVppM|ybuKp20xhwy=*?RWP;I9QepbQDM~1zEk$VKQS_b@v%_d?mOxzuOe&F7vJ5 zXS+QXb97Aucpyvd;0J(mm6vT&iZL{2EE~(si#v-l?z5S4&?xKf=0zrvzSa2YlKZvYLCAGbd$9zJqDly;4>vE6czO@af5`a~q zy=AaMH?Mpr#pHR*2}@zXKPP$NMxJEeo5bT~e6rL);|QnbS4>;+eHfT9TMDgc=azNd z=&HHp>*V1}kGR`T9Bs+pfK2m_^+)F+1bin&QG78@Iw;OiY=VDo?e-ZDBBBb>8ZN^) zd}$o=nh&1I47zDuRFkReyF0gBV_$OnMv&)s5HS3<*)Qa`UEer=C7`bi_Up>Qd`wFEtc7KK=}Q;egs%v z(pRrW*TE6?6KvwDIL^BL)RK3tlmqyhSPU#H*?S7{u%*NhhO^W*c)EKV4*Ri{sF%&a zY!bU<&x3aM$Cdi8F`4bu?a&ixcV8)s9bcZEgS7r!9ux20G)=MsBfG{~A<}2aW;6Bg zGGRwMH|Z{HtB+H7o`0zyei7j1Y%>z+{Z!NXu&sv@ z+t|ypKX*Urz6U@o(UGr#Y*H-Z6;pDV9Q3~~v#(Kr zY)h5ONdH)nD^oTXuab+`0($}@#a=n10lw|DaLSZBx=XoElK4@t&HpCEb>ZG|oa%oG zP%eeX2H9(y))9{h3UIMSS6nVepo-LG>UDLlPUKnBdgk-|Up5##A^&d+5y zqvYOk{nXK^?J@BBlX(xr{SMwFI?e6z-rdgP{2|=!v=3Yl6kHp-IR*Uobsbmr0eRYp zPqg~ZpWU*}DJS>E-=BGP_xw)``w5We4TIf~yH}jL+Zh5yE(HA`;61uOo+b>aG3Q9W z#?L0ZioGJ=scXjmrH|wwQI-7Ohtq%E5U1JCnUY+Q5H#AQW%+}tjuYdL?_TBstWaI( z*$s3+IR5LO3x&U*^oQy(r8I|s<3mFg8 zxb&V;>0T^t+J>S_Bc%z+SG+Z&%3oc3_w4mUy|>q+)XN*@-IM1hR^h_Jean5q(&*M9 z_{7#kUxPC)3EwoI2n=C-n@@`K5&OrRDLWfb+dNCj7Ipu4QT+R`V^`n5G&{!d{{L&% z(BfGNDw_lv_LZEPBCMI>4}J@2xo_;d%9yE#%x$rl%J(FN8hf_F57s%Wo&qzBLc}Y^ z)vTxPm)-*!4{7-`P@ECF$f+V|NCR#zpE9kg?m6%tFu{*~d5^*3%;TEqZ`@26&aqX- z`Ie8G=kXyvv>(O=C$Cz^+#sS7eGGI!H&z2K9rIQHu58QzIF+xsO9dd-gNo)&&&4fv zd?@qk6NyUOi#}n#_`6N9a1;F}>E#D|ST$9avu*SBr{C;41k|MMn6}jNOU-^&4}8{i z07loZjWs_>USlRRgo)T$x_!3O*U0GBn^vnA;3Vy9kZSh17n=EjGLl3_}NE@%dZi|1GqXz${47Oz`XR0@)mYFheU$4O|QT6e-?incEv|bIzY*T2Xu4xbD@xes7OKJ_> zr@FFZ;#5|~$~Wu-Q3O_Ru`9BfOeQSjtF|M0d8IiGj(i#w59x+HI`%MB`mM@2PIKMn z=!Wgn7y&G(OE1b5tSj@MfOq$(*QbEh2;da4E^qF!Z?qk&urt#vi#W0m^Fv4v`Si`H zrB*fZ$f}`-Hpu~U6`))*-zw1_?Lq@a!2^spn-gL%SD>@>K~vx1Q1-4?ic4V_-8Bt% zdteesT)0evNmw~Ff(5;$D)VS9H}g7FU3Ph#COFpeVacKCP6Ds}>fGKn0$QOXz5r`C zZNZI4J>%<^N_%!pYQLj+f2pI!lNUwu@aA4^h3D6ESkjx95u;kCEVEh-DE*~zrNU~c`1rYvyXdu5>h?sLVf zSbP1x`fYe?i_3pw0AAIaee=*nt!w^TdD@Iy`1R>F1z^})qY%|W*d$8+#zpB8@Ctzq zeu}yLoAovY7dcijqdeIT`F63=Y>-E4zz26@Oj95RRw>g za^?&53jAzr5-wRe{F2)K)1^%u!c5xU-M_*w=7#GXUaj0`m1uKo=PunW7;A?cpWt{! z7229=H<>!9?{HfqEo)I2@vRAmTssz=YnWRX@n7uL7DVUbZQt4qfu zB{v?r4Q0-)`l`0&#S8(tv58H4T%cSkPnOqf)DzTwt*!IOfwcY|59DEmvHit* zhGZ^Bb{U`Q8A{-gT(K-{+Vn}2HFSCC#!BabbL}5!S+>|((EdQ)p2J{dwnua6Yo_Oy z5iFdM^D;BQ9x&q`wOlnQi!h;#MiIe;oU|ZbjRo|7hmW~+Gw)xkzw%s`{uHa{Hd&d^?h^aXD5pE9>@3bYS+Gh?mL8 z&0B{~JM;24_79vt9jFH?4C}-K@kHPn@E27 zwO~OuWd{-=rM%~XG2W_G8iuw7P#P@#dG;X@o;ay5pEV|Y_AV>uzDx7eT%)6YYsG~8 z#Jt&ix=f$IkEv+6(^_`jr|34Aj2@WU+QKfI$+)R`_{Cj5zJVs>Oz}0n&(?uxK~7_b zd*|4P$|;*eeGcyoeHc1_zLn@yy0{V>56^?p2WcdYF_WqhS#j^C$xGoM97kQoLycT-hz&4QgxZqF|q;&vrOq z2e?)^PIdG3+zdumVGE9xl0`299VG0t$+r&-RUA;ccd4=9 z$3~kA_yccGI$O&&YMo1mDS{Vsp1C^sEs(4b*~^;2P~WbtDzcQV`!B>|#~V{<(>HQF zBR^p}??@y_Fc(p)E`+RE+ckBlT)>OgAH-dxrO|xS!->?U;uL+iImm4Pf}$oB7+!l1 z^!ie=j$Hn;NSbFa=27+CvB{Y`N+S2db(+6O==X3W(kk9snaMM7K+vF{5Vzpd6mB8~ zJD(9WPD)0}zU!iPEG^Ba?Ct9Fs;KlnC0vVM(He>c-?NXb)bg(ek`&u)ynjF-iKr1^F~PF8Sl4CQo(G)f}M46t=Fwt zC2UZek8+rWzE&FqKU>_Ol>Fz}jw}GLTd;a%8n=1K^fu)>7*yN>%G+6FvfJ_k3?X0< zZT0@uDb)g1nNS%c+BXE~0h{m5A^`gNKZg*MlNxL9kMvg3TUL))*1m2W+ScEmdEU~p zEP(=MazMIrD=Q;<19zmi6+?na1LBtx?#{njbD5iNV7+_`x5WJD)Il1dbXY9Oqc@|) zRo1g_vo@l88@rzqOzUH7htRk0sl_btQ@~iN&|;6HV0EjGQ)Y~yg3CAF0*L5mH||&6 zBZqa1?j*!tpfM!h-+8yjB936!I8wjgb`k@>819U?u{z;EfzK*9i?RNYtvz_i-@wo1 zqvMZopOueuv~Muk12O{R_of|CaLx&}7uGvyr-GjGSkqt_`MB+@d>!loBy1on%gE#Uhmlc)j?puW;z9FPk?2fC zqq%H~yn%BV%!n*4_nwZPx-E}r!eZnG0Zw#}^E8HjJs4h23(ANXR!oPm-G~z$Jpyxu z;xaN#kZJA{3mTOTM5i=ky5gG6pm9SDy#iZ4IZT5Z=U3$!RU(9>1sZg%Lzddy; z-a9E-E~+x=p5R%IQo^hz>yV+(B2N(@OClgc3A~GRwni~^1Ea)7!xwz2`+aiU)_qZ_ zDON#=OJdhV3Si7D^?v%GRmpMA@h$f$HpQ%f%{s3!j=oQ4g;U0H&tXgj>ShH`fN8K3 ziNzdQ0Y;D!&G9006vV##U0#yMu97=>kE*k|PV%7)p4c|9Dk-#&oL6k!8z-Cf1kil^ zFNzg3r+%~c%n_eZj4WhsVD-83_zmmZc>FHKeWlAwiHD=vE#`T(2^6!g%4b23F1_LM zy@)js{Mw#1DIE~QpzMzJh-NM%P!P2W)UQj`wh?-I#iipKff1UQ$?*F^n`0%02^a7| z6bsYI!u$Ibw6_Ml=>Lx54vqBgG;kCD9CuJXO&aoujPfZ}r)dji`Da%K zhKco-FaoRJr|h?nNUo9jm}DG*-4C9!bS^pQ8^*KdNfmiDjYUkj$x$*j&7pg8@97b+ zHoe4A_abTdm-!S2Y^b>0x-7C-{X`!pUEHL70^G4qThZ zTdxFYtBjwBr=)={xwXAFCvJ^6E6wgc4KV^059JE*usIBt(!w>%LLXAXdMiEE5AD2C zY;hi*8j44-U zd(>KSr>J4!a+zHyQ(=?1QX0&kvNy-R>hU6AtO~(66Ezb=420Jw00cms`DR7?M9beH zvXY|RrVy^u0c0y&<1BV8&^v#zw+cP37)iRGtCpM2RJuf=F;DI%T~swkkNMQY?|=}5 zFp1)_ILutBUqzcF@$S0}DDj{w$0HYDn0b7WL=%BRdW5Gj#@gU)0$MXBZS1Mn+vY61 z3hpU^O|sR`MYNXg8rDOT#yuJNa^9HPlKQiK%9|qB1Y7lv0!~J%6$a6|8F7R4UwkI*nTMAT#wD z%N_~JRO&$@2swPQ#5VFa+OqU znn~Oje3;8Y4#nH}KF&uKQm~y9d`xbuUv(yk_zf>0H$58aRYqD<>;e)MSSl9J0a2T5;XK%GyRgs}!lM$eL;F-4}zIr@Zqr#kmtC^xuM;}s!Q?s@F8m@Ipgxys>41CK*i6qS9| z7uo~0f($t*8%?DEv**%a4)pCwB)A%I8)cf!7arLM@c2rOfW7qB%8T%ec215T)B6x9 zetZr}j=AER8LrkNr?rJ=8XOBlZX&bw%fF>O@u;yIgdBkVOpa159fFO)}ckgQDYE3%FFaL4Y^B7Z=EdXmp(H+6sWSrS7JXhS*ZZvLKo*{Xb_Fp-mb^7sq)`l4yosk`YC@j z;<515Ja=uvJ&5$~dIY7eFVz-R`N~LM!udfd_eqE7brn!>?0e1vobOj|)YE!O3m@2S z>*YhSMHJ4WJ!QUmhGXWT{^ybHknM%^Ojf8mdq2fVi~9uvBlR$WDTgNbS{~(oEB9X4 z)`FRBMLTA?3$Zbi`HL1Ff%1JFml{Qbj-6qhGAFw~lW}+UBmVBZ@$8aq#h8AIPQJl= zhKoj3V0nGZIQ9DJd!~^DosI?={csAT#1$|fL`iNv1==yn<1<@sm%hs?vt_sHn@k|< z*|gt;E&-$FGiL{+;R=;(aSmu7;8jvPv<6NPii-j!O2QbF;+EI7 zO~}pwX&x6y>*!M`L~f&Xw+f;anReE*FiC2rfih^FFK~6%#+Mb#9w@xW{Hw=3Ts=>P zZ!583C!)K>d3>gZ#MyoTTcW5)VEQ*0>fRR%y*~jA z*-l4SwJVV;9V{`U4rBIMUn%q4#Ur>O2D3r$h;hqJd_E;f+_ph+4ZRK^snPHE)J5a;u7#^KhY*bU}y`M4=tDki8^h9$OMFuM0AKcya z+@46;RKL>BY-DmRhhN<-tC?=!>=4})CBqPJ-s{-L6)H(-O6g%b7Qx7_rP4&Cf zbf7~{EvV!Uxg_Ek-7A&rnjN6mWFPeAvgyYP7R_<>mcqW39fL)Ldr+P4st>Eg^0>r@ z@Ol6kT}))2p|j*I-kGiU^gVwbxoDN~O5I6u%l z_lZP<6@;L>p`a3(SCo%l*=O0dH6`Ejo`4gUuHr|iRA9<0R}yG^OcxwL`jJW6MLI-Q zdD+ij{P3`6hwM>xQj2Ok1us#hjBWAJB{2#b$IQJT8McNl)i@-X`3p=HU zaVQkWdnnLJJ;jiXYaqy5#G2__mqVFE#YK$cyy}_;!n{%1L@{I$%>*91mh1Z1B_LHx=&WX#bs88V@o1+X@VApIbdz5`O)r*9F z$?8bPvK=f;9q#uO6&`-LaP<;^maKj`^4*jLu4oKp6*VQ;ZR5OdpQGJrCFVggSgjK7 zZdc@s8bB>_4+S$gLbcH}*~UQ2?}|6oG1%JSDe~z_(Fdqs30bh^#qps( za8K_hZ124aCn9Ca>S3-QbN!P4ZvaDDK}0QA4{B4OAf-R(42u+|fv+DZy^h>AHP~rRLry$s z)2n%l7n5=U#W7r^5*kc6v$(UAa8#oj&;;09^T`j;ez*pBT7%uI&r4)f47GiT1QD@m zb83~wFO+3M&ku# z&qpPPWC-D%r(^SzvM;!%N#jG3K)4lyAzeNw!M;1qJ=1f~ZEvS#=QjFXWN*XpRuZa> zJRaA$&a-2<5hQ_$9*pl0xHrRRm1g`r;Is;Qlqp3__YnW#G| zah2Ol6LW3Cf!43J-YNpAi2#5UMvOu!@cE)9|^6=R)keTA%7g3bG(1K;2l*CYj> zW^2X6XryQ%x|oJxfhof|C_sH$*63}^<@y0>#asQK30>gcM-_Ejsev2F6+edf7q96V zldQK;#7=&G&Uho8eatn}U-KMN!hkV>)t==lhpBynNfs$y({yF>Syuyy&OHq@@|T%? zp?^07rpPSqO6q}L^Dr6FP?v*6&UhdO!qNFYKyL4K^zcp)sWHzpyuu4CW#(?!l=l>J z+(*Q!6dPzcOu@F>HIWAq@t68(x`(vVkc=k@PAQ1E9ali!F2ScJn<9g*9~aSkn< z6t?(O4_A^9FR?;+2{SmTd)F)FdzjsIkM2odi74vhq672(rh@l?aHsco)*W)!ceQ<^2#z8+}1glujF>In#^i+aov-W_}c{!e; zT0v77A2tCJ}_J5LmVZ1Hk*%!#Ni=|pM>dL-#&Yik6wh{MOVP!k{i5Qr$s%rI4~ z5&9-il63J4OfE*zkTLC)k;v>WwlGdoEUM7J?xH$z_2|Y-({ZtuC83(aZ!fM{JK~gd z65iqb7D$u2=i5EFK_gp!G10-|2E_uN{B|MO(R)h z-M7om8;7 zHiWP3wn&wctK(h&5%g<%<}E*3YT2Amqc2f=FJE#+2%<)5$xT5NkfDyc3hve zLAWat0y*+8oNrM;?hU!$5k2dp?w~+;z@6l|@8qJG9Y5$WxZ`%%uycm|UO4LILMA=2 zZ9d8EgLs}iNQZ!+dF`vE^a3jYloxwGm|sv+fUXYKK>Hc=J;)DP^3_ zKr_EIK}2|C%h!=`;f>Koavew*SHEck_dQuu`^E2iFA3$7dla3tTuVEh(gOgF$6wu+ zV@YD@mf-IH_Qe(y)%nQfxnf1{9@xkI?n=I5A@B5x@~7K0tXoiEwyI7F?WF{;vo;X_ zqLFFX7!JHY{`Wil9FTiQH)F)h>FHKcYxDNe3*+374_T3|R(Hnz>mVtLOyZrJw<@hY zG}jJ(OQRM}BbTxVf{j`qWDTME298tlM}C_tkW?$o>plsj&#kXosNj%|^U6H^1Cgs2 zgBt8AM^q(PVH`P46n=TLUJamjLASMal{sZT{&@2zVNB|uU4`5CF8=; zEMFQWy&lRW4xgG?H>|4;SaL}5UWCuaGTS++wMtZ>K{JvCsczK*H|OLCqS}LkE;uFB zXV}$y^W;j{NJ`C}(Xtnepl@_(q#KG60dqxQ;@doEu53yK#5CJMw*yCA86pbgxjr*a zjXwL*N6O}T-TeiUOG$^V3TS7f56dv_7xz#d=bn;?Rpz}>+5R3CsV}_()8^iy&{-Dd zI19Gwp)(%a=XC-_MuZ|*GW809$OZ;>{tOzl0KHBy1`lyhhKZz{VYAef*hr>Wt@n>}oSu`49kWJce zm;^g@^WB$KCh>m4wn3wSoA*rsKhJ)*NX{Y{c^ViQGR>}#*`s8Bu(6P&kUTsb4cW_) zNmc^o*d~}v)DM%+x?mJOi6vQS624&Vvqo{wbVJ1l+X~Pk4a4xT>71n=+m5~Klt~(f z+P|u#V6BG?X{47t_$7DpZ<}Ai>C*QXd<9Y(4AFsJr%e+ImhKNff9U3#t9F2JAF?fQ zFs%gGED?E1$JYmb`_tuK*&jEo6ZbjX z-bI{Ow6YP84o|J^;~I#TM49k+kkZV={-ucI09H(Hb0OiU&?4PYu@+3S={|BvaDLx< z5iJ-jeC|7?{S7GF>JHlKj4~o)nUJpwp|9!rlr7va-}5~mpFFiM+H8Dr-l8g?f046t{EjVr`pl1#JoZ@9^+K8TLY>90W>`L8 zhr;H)5C7LY1m%`N;o>rJTUP(|fgO9m4h6E5MX3&rqI$2yeeZ;k`kc&V6(uU$Wqgs+ z!?{!9Cjj^afUutDM9?N#an8MlxBA{Bi~owb^~d3VfUcK0Uo)P~_YgQAjd;h4&5dKL2r4p6UX?<_zZcqz`w9BjyQbv7au> zxQsoB)QzaV zDEPf5`-DI3DWC!s^0uAot(6+8QhL06s@9Vda3l_L8$(Tl!Wo%G1nZq!gUkuG*m$6` zTU&meos#!TUew<0_>)I+k_tbiJ(dy#2!|NnmxzSNiT41Rfbi^)dr0=HvfAc#L3GFK z{$#^|(3%;^c1!qP{IBQ+26qMh!lwAekUoUNW71_Zf3Cw1RZbAf|D&9ckT4t=sVTF3t)G&Y#IwwHMrB#q{Lu_Ug*16 z{UPhRM;Xr7J0GEIhJ3cHXGm|8^^6UVBSc1Ry!w21G=Q&j~jVoIy)Xu0a3%d;6H zTs<>9y0kw;LRnU{vv6!)k@VSRn&YefL6_6lxB-?|$kycGEeJ2wjA{Qp$QH%%wh!F- zu!m~)I0yfE=Wx*itSmmJF>9_O)ThGw0RLKi!>r`{0-v%y+gIz{1PiL{sE_yVIktK_ zP^N$5Ua=-8kPDQ^C`LR9d!k4ew)lOe8Om&{cIB<{IO;9^j-;UT$9{H9E51F_+9oOa zp-E+5EQA-ciV&bC#7#ik4(xCDrC?Ib9>H_9@=7bI>AzF5*!&mGT+OcGY`w|h95tZV zYsDuf4luP4a2aWTl6;OlF4KSC+*f1Z2nPt=t3O>3e{AWG z4Fft1@DR+hG%x)#K{kM1%Qp@&`RD%u0Rf8Ws4g>lo%+evAJ6~$zK$rj%K)eXKj)GE z+Kc1QpQs)cU3Ys>6np(MLH3V|$D72hf85B&NcGcRxsIxc&FW7+mi}jg8~{g{Lnn&< zU)Ze#cvnJGB>DdrH_gB7_7f-k%Wi*i_YX;w{ePO>v^JU^jy#4n`|-ZnB{XT7ua|0> zcL|vu7+S$g>GI&+S{aBgkN;VoW~ej^pD7|Mc;YK;>0nD*p*gx05xPZs*EMVlzTt0@ z`-^I&4)P?742SZjujrXyeS(j@gzt!m7Q3bWK%5iEtNl*}^ZR*U@T(4y!^LuqMr{lx z$p>f^uKub@0>F^yb>(Cc(-(~2*8MPFDv<$+nib~>5G|fjOW%PmOFrfSlz7gCd0?pf z-!f+ZTq%btd+d#EHT*`^;f=C_IAYaArFo@K^e;MDqvht;%XAUl!~BnuV#O&Hk97J< zF`7PK2zp;Y^bW_q1!jDQ=v8QuJI+&pv_)!@wf_v_etKD7A3X_KIhap5e4`67hUV58 zT`y~|rG4y8V}z0-*}KLY2$k^J5W;`-K7=WtM|(SHldH7amhwA7GS9e?<^7M!shBjk z`8~KhrXc$nJu&b3C=Y%Xod-95q!Z`Gtmy`gC3(>d;{cRzpLcm*wjTn&jYG-UNNcBj z+Y@@X@9#)c%@-VXx@&4TRGv3(E)yFSDc zkJ0;0$qx&vRJZx}lZ8(ze;Z76_*Secw{JIzVOBq}6tbrP`aj!Ul#YG>A5HJ~RlBEM zO~|8XM%3n0PDIbI?_T~h%IFXGo#G!F(RW}1^gVRqng^eZ&;9CJSCqN^pAYq@fZycn zM{d{H&5LJdL2NqTX;>;J4x4oUt%u?hd34mTHyJ!-OdJv=JKD!=cN6YX1Q<$j)TiVB z`Slzn3j~}1mAuHC*-aWCnGff0di=dE^O1~2I?8|+6l#?3Q1h3ik>dhMlkfj`Ff9#e zs#)Fp*uJ56RM!hp^&TJV-_>7ax!Y@Wu=8z&LN#khoD9>b?Ktgs)hi!kJb( zy74G8e zu20jp1Ia$VFX`Xw;@N2LUKW#m9@AE$g7X42H|6?#t(@NvUSMcLPyLubz1{M*P zHBI%K2l*D?@iD`BqJPn@#4~f&BEBg8ml>B@igAq3xNv=_2{44{X5pRN+04TZ;Dzrv z|Ek7i%TdmFt^c#m|Ko|37cq-3{6pU(CI0$v93a-on@*Vl!_m!r`nd4hi-)(dv3>s! zA=UrkHCSmHN%z_AS01!rCu!8T`U^i3{{H#)n#Q!Be9{o!S=KUl5I zzTEsT-yv-%bWLu^d~E*NXq~0zG~3&bsUe!*t<_UV>{fiBo33rj7yExXjDLHmfA0NN z4c082Gu%wM&0lu=Zw0G=o5KHm`kBZ2+HK1-`fq31Ed%l$$Ma*_{-zTA=QHF=vOCKK z4Mq8kVV?wuIu=KaYMMW}{@?!Lg~lH&!@6rID^irlVKEEgFbN$ADW0|antFMNRnK&5 zIF*pm5ev?Q9LyEL#_cB^J0weV8BGQ$J4)~BYY~6`mvDi#_74>NK2@H`G_I)C_D`e2 zITC@#c(}ZVIS)_#XtF3Cf{_wHcdaOwgqJoIim&}Ecl7`Ld4|$|1M;UWWnfuA+oe6X zY^y5A<6Cz-L)wKLudQjP^9kuUe#K&Jw;o=+sbBQ{zZmrSn=*fI@h{@hY6EZGKd|K& z(yzx0loK~nAz1Ks&?>e;1Jyar2|%!|YOYqy4@c7kQC zz3S}Q&|&iYQB%Lc=+O6}4nKJmCS4aO_tI{mOR{y{8#TnRKQZevvfkXsbHmg634IKV{hytr$U_%!%aY?K?w$h!tzr5nTUf+x0BGOd|%X$>&H6fL+V}U zT5D!q5IaMEak6!d+C|dQoyyPa84wR=GP*-k)0;E%pYi7v6V}RSa{S0rPwQsYp-dh) zef)4Xxm>g!FC3p`Vlc&1D6iGiTz@WgB#Rh#Sq1jW1lT$`S~7hGd66ShiR9AY-#c>g zv7GO|ha9QH&LB-PZNyh+JKe|X;a@La+(jH5|2(1-{3eU`_nYBJ6eJHp+^N=Vi z=eK=NZkIY~uqMmgk@{ee*t6dba;mHJhDWwuJ|5sE=WSkOm8rUXRBl2^#e48q3+}-x6`VJpr%*t+h%h<827U1SD-fHz4`Aa?U;%9e07TOz(`+6)5 z?TesMg)%O8Ng4+IcoW_?l2bCSsC}mj60zRtLY8}WJQLOYbRYE4g0oX@OOVC)79_N`Dg9a! ztJK;3hfggiV4Ldv)oI7y?%B$mcwB|B~wEibKdmI?1_eIpNP8to22+%u9TviOSCHu)i=*T z-izL8>cF}@ii%j%0v87PuyZq6)`sa)kuRBP6hwQG}6mJwhk za(&ngEQ2Owu*}neZf>>tuy#|kJ|8P}FJ_TCadYgxqydXc$ei8j1*_%TeiYQG`Nxs{ zjAOWo`}ihnw|nq+{;;`vdWGY9gN%Uu%#={j(~FcPqj@$b-|zKKLklE3if^RMV>}EP zUx^s}+{!(|agFor*^R3|uW>IRJ*-^1#>VEmg&92o6x*Yopp(h*rhMqs_?@2tnYikX zW~HM7F=uwcRSB>Jimq;rwwj#&u2MymUMs2X_VDB%(qxgJd3Go4s){r+vrPUd4Ph~D zK%Gw1y}v2oMJxySC}}%le`u6vXYmQDj)Yhn{>v`u4tYW(^Wg znqPH`f&Jiy_ve_6h||RD;}Q>**Y61^E>Bu|&C_r-4ncFi4Xu;^%C@r{@6WWagK65_ z+f|;~X%$wnCB=SgIm3Rl`~x@d{zF#qAD&i2_Egvj>2WQeWerQ$ld{z^UuAU+nA5yxIZ&pE`{;p?P>}KzcJAC(DfHOda78+;Q`)9+ zDuTEmvyO>O;r{wi#%{#Pjj=_)mU}N8pZ}0CS)TOX)VPFx1P&j*t_)#94r+}iwT>AX z-5^n?J~NqrL4 zswpcb=o*rgb@yM(%7H?gLd{Q?KfIjOPMX?x8D;hYlmvm&X^6Rp$77mRR3;Ux9xSa- z3eVdNzHJVv4}^dyo$qlgR{hbVf;32J)&xV%9lj-0;ZOa1-R+CxK2$F-`%h5*CP{y2 zx-NGkJfp_-b401^XujZt65Jg)kQZY-VDi~jZp8bulek<>BhF8D=#fj-gHbrz{Y4G1 z{fujSM6m(FY*rbS-rO~7m4v?v&t+DQ-%WPYqlD)TwB1Pwk2h_R89#ubNrs=v+Vv7C z;oxd5igvsDAUXIx_meGw_5;jR?WX~+@XpQpCcHsnWk@Ko*JTznOk2o!tQU|+9GYy> zqcpVhIm$Wtb(U*iW{gfT>b-5nvO|Z+^{l3Z`aujPEoUQ7e7gQX#T-*^ij8lo^7v!u zN0*%#_2y3Z-4rJ|?`6)iB zGz5(pHHRhzOcY7@v)m3w4g)$KVf=3D;YIg!%YM8gkd>0?=_=hB^nxWGn_1HDD>b52 z+IZI77o}A=eCxEj9IL11bC!C>($kPbP!bVx#}1V1BCXm`t;GDfU}LY*e@*l(_}Rg= zYVEl2XjUz?l!Yiy#IztAA0g7?9rdU(Kl=W-n;A-$tGU);RJE>YwxLh{!epHK#(Lv1 zEcsXZ0%#L#jCXi0=Eb8c>)z)D5 zXi+td%{u|D_6$~yxOhty4XlPG6H(UmrNXNpWX)_mcd{87{h&Jx~Q3%KngcX zsBHi9iY470)3uc?&#t}{{g!)i97)oZ`zA7Ev7oBh`MX@ia0?#6-AVg)u15FIV@vwd znu2&H>P)29`plJ2GLD89rRg&;!BG`YQS4@E5==@eX?#+gZW;S0H;~j#hgCc^)Ez0` zZYQR%cTQ4#*(Q`rb| z(7i%xu5j{d!`c#e-r2=m@n(3sXS++|p9eMf8*~d5 zh1&7`SOceVvuN;Lyt&hwn1OxJ+e-~2Wu}a1gu?`P$vph; zOiyN31uiI7)AO9+U4qxGQgQLJY5s|J9}{!qb^wOBbNq=F0}dqjwgq`Xx^4{0u^X&> zMp=kd)?to85)CJt0|$;UAt;sg>R`BRM$W>hPbox$ApqN``gpQk9q;;ILsX}^Yo2N;d!(vfRp?ejH`2X z(=YWHR0GP8*xa=~__)6+a`#ccyD}Ao&FjYkX*MO|eiv;s0CpAhU#~?Fmq@lj3pa9y zKe2CbTX=p56j9$}50)v5(~dB%JR>fOnFvsM*0N;(r4Wp}IA2NIOjKU8Jf5CvhNf^q zsgXU{2j2C*HF_kQ$^uhm%BS)g@x>sV%FzQj_d@Wjx=lg&)tv^D_9l)ThY`CuiYg5z z)%nhGGY1&}gVRRM*b;NCZWm=tIbU@$=yPdDcInw8k55w0_ zqcIs^8cRfBNt&$InP3^&6?n9?1Xu`1;P97zW&K0}bMSkl1yonwM0D62O$W2Y-+wwAiJVBI0L!D@;Vw)(v*gpj8%$MeCp z>fvuyj;RQy8MjwSJw60ov{vkILydT8*Nf_Ko~EeLvk55!4GZ26K&5J5Sp<&ijx+sp zsDV6e<89l?04B1I=P0k4*=}AoFt^e!&t1cxwOE?5_|cJWFXSmOODA`enLy>@@J{O5 zyM}&vmO{4IX-B4rPJaj|{SH18NPgRj7frzDuGH`*f7dEZbR(~*zb^cxh3Fn+?RLiEow1SQeG~C) z&lc&>nti!HM99T$n|OOXWHkZ%IAOz|HUDq}M2da?1YVFKziU;;7BOr1`N|X5k((96 zSIm!{c&*c`bqWHaj&!8;5GFm~3*-Em3t3AI%3_?6)3(+d4fN#F$dU-SYBfM&2H913 zH=}fH_1Sp4Is4p%m2Z}uL|O5bSr_@GqEfD2(8UDCMmYb>?DJlM8jZs&^rAc=F>h-z zjx$6p@1Dw&aDD3y{>Nc|Z4G9h$rD8psD3{B#As7Sz&%`* zEkM=%8>RhnB#oLBT@b4bseR`CvuSu!PTdFGR$?W1ZJA^8Qn~02?m3NDwaY~Xj;wgL z{b}JTAFLgtee)Sw5&r9lac#ay68W~{=!d3e_)xq3q92iK#E#tG&LJt?#spckX5F-w zbnIxL{BB`#|K#;1?b`KH=b0DltRbF{b|0DXuWrJo@OSwezVZEB2(d7-&*k_KI9Va; zBq_8>8GJx-D5LDy>JMipK$-ZD<#=}6H?ioGVfP8`XpFo=Kf0|T>J?lB>r-GPKi9y^A zR;ZfL-ul%^Q8ZH|-^#pp@!AN^8!7_vctZ)BFprg~NN8I=g9IgPA?K-&uy0LdLdJQ8 zcHC4}6CW#gn?Biz8R9Vaw5cqij^pVHaR$Cv5bx{MbRI`&$?l|1U|wn<%Pujx0kBr}{ZMf>%s_&fcVC(F&~EM(0nn=jdCw3S#~NWLa;;bUeF<=>cr8Ug5<760;etZ;OR?zlvnru z*OzQV1358`M_$dl#@yJWXYS0c<#(sa-bFn(KGewcZg(3i_dv3tFK$~?rRu)%oVngE zUHau?qgVpA%AMIq7ATD4G`&>q-`0(2$3}cTBL-{9i=m89H=?g+!VoDy{#PwZf)u{xHK%<@)QEpg z$Ox1W*u|18vJD3BjRX_tmDbUh;ce_+zj5a{`4KjW?elz%l}m;crCEcpud8pmSLS0} zmF=XP;OvbF?UZfUv?{Rz`sFdV$J$>`{tKHz7R8>E!Q@W=`mB51qbSi0OtO(SpZMXC@{2Qckr%{0;RO zgDhyf*;$Fn$uV#ZNu0(tr2$q4kT>33A|8tj*h={;mY55xHC{p zPIVmWAWM`3_5Jxs%#aWK@`R=8WftMBofX$jBpB!4FP`IgQM{i;v)Y%9qe)F-SnLn! z>oW0H_M2W+d5$QPP>zU*Jrd$VtY!tUXli^q*$rJ175>?(>A``+6R;!wUeDr*TN1B7 zXFKE{IMA}J7yV*+!@@vOcQCGBf{v{TuuYCyvn!^-M6P*IW4^*T?xXLdO&$P*o+gd- zxioQ3SDumvI+cnJ%o+&Jed9k4*tkS5n&t{V7Z_U=MjI4oyA|=_ecqgjo9pTK8980~ z9lpq`wF1u(T}O4{6*d6QEf1T?oKRzT^~!K$%Ih$iw&sxB7sWX_ShG$VEhPoEPMjK!V+vWKy15uwB`Ln|CM=@RPGtk0F@al&+vP-7OL1Se&B4i zIxx3v?wsVM@s#bFv9;KwdEYx*4A%=yGWAV}{B4!R9TVhzR#edN+F3;eNqnccx`H|Wb_pHKp5+jJ*iVvMV+0!WbeYbqWbxf&d zX~&ALrPZGWuE;EPSW>Z;+YF-@lFI2xq{4ak_Rx1v9=+qI`ARx%87pes1h6lsXM841K72luVD_8?p)`hoVM&ai^LNp1p7-lQkuAf zF@d)%IG?*)UlcPBTVxteC5`rni3m^SupWlO&iVDXoFXCAgYFw%s&*>7VjcAaYGFF0 z0}wKeF=v|=kYCzCj9ddpo^O%q_fg}yVv;bPU86Y0w#jo3J~90~0>k$eCxLC+x!dA3 z;`R_A0{t?ozFc0?`>^{s*AVIcenoPB;&IR zK`6kE5glrDHHq0g8|Gjk2w>^tQ7mz0FAQ`631%^ty11PnXFLAX&_T6bUq*56ybmK~ zkfPfo#Wt|m0#3)xaOC&?Kog_9r;YkQa5VO!p7Va&u=%`7ET&{a;EjJ2Gn>yl_q{bE z3oJ}8$lY!sKnK51$y__KnmqFdgKCTIsod_0<8a4>Ex&szd+d|s_M2TW{XA<~3ye?- z$oVP2<5*b!EIXH11J;P`B#$bTS}uYQ6TMw_2&%_k0o4eURe08XGtN!<#Wv7LNMq-P ziOhVevo>kox6avVwENRGqn8upWcLyqPf>eMe9=;(CUqKSyBWq1D;dF7q)0>^9xfAlp5*HGu5f73I1m7*f~>z)}$@?_NfK#^5)Gz zvRZdJ*MlvqG7MLH9CU2advjR|>Vog0etA7B$H*)7lb(9p;Ol*%?&M`y2!aV2XS~FZ zLmB{vM^p<6#l??j-aks#GqgURSeB~i|0dJ< zRzB|SC~ma*joNXq#Jo&q-fh9-0Rx3l7y9=G*b+5*?$b5+nVsL#v;+vT^_`%dV?8mWrw0}0wvMK zc^Scp)bE`?O0!e#cuO{A%J%pKN|w8Qj6+TRWA$XicgfdmQ`oIueeil>cC&OT??c{m zQ=fiuM#ywR1FMN>px=nL8&$2mytx#wKFT{sw;!(!6EI@)44<_+qX3yz`Xy$`7G(vO zDVj{03(*B}KpZ09xr*FiE14SpoHb@>eAPhF$v>Y`$7V&hR_FC95Bl)IZR}9ArDE^X z(r0xT03r{z7G!fOOyPLMP&)vKkxox?PgZgVY;6YcI&Z~cfC_;ueLmMV4(GBvk1(8! zn@DcXeA$6QyN8_?NIhe_D}(S;{*nP^BB_l~mTb`?E3<6<1^!D)JiC|Va7a<-Ytw!e zQ$3i(!9=u-sEdR?ntTnrRqq>7(Z<6&4V=f_>8hJB zk3!5wf90FMph;#oXDFZWHRYFtIrV7L0WDFp=o;WpaNe$2KOU+eia+I;Wr%%~@-|!F z=&MasJnN5&tTz_O6@>0Q0Icvlo;^yWt~t{?v$jI7+4VQ=lfG8l#+=A(wgU_vG*-*p zG}O%D06+&1=v9o$qFxt@vo;n4oem3ROi+5+bpWbJf{7qHwcPDy+@7~Ne0QKU2hf}bA z@Gb#t+$NG61$cn<%q`68q+GIy8M9jn;2I3D17ZQf`X(Er&O5pdDTblY%Yi3Dx6=Hc37}?jqA~u-R{=_?}IN7Mw#?tVtDJB zvaDm1i-j~8)tv1B=o|Vw?^lZ!LQF*LD;;c4#dfrm}2kVK#Fl-E;`eIV3JLls^iMy{h}lT`D|L{6XYl7q#Lv%O+lx zt7^eNeeU=+*7~5_pZ*Y^^O=3iG#qGd+%TdSj_*#OFH})xJ1LX<6QDi3;H0ex(d>_t zqBr%O-Onc9DExl!_v?T2A!fv@>$c*DHzK>{Qm3$u)87q>&u+X5qx^cIqxh(#bb`mx zXy*=w-4aXI1}j&LxGxOfDwp5}?i5YAQNr-ZW4XcU7lsof;Zo?LCshHj8FxR)&jtFI z1g574Xw`~dmb}tBb|&msaf8Pd9q{9HZDSUXy-HH3eKm(+v;4d&LdcU&GB(s1b>kQk z$Ec>~O;4pb)qNnNZ}e$4Z|t@Am^KLMi3>OA42xz9lt#mDAn)vgQ`=5{iVV1R;nq$U zHppw2(gz)s#eNKC`FI2ILTn;|vAlgSU<)Xgw#? zrH?AI5+!e*E&ZY5B@$95qq%lNx%^em2Lh!x2{9c!ECa5cRjVxtTm0GYTMaEB-rw`o z2_Y_oudyK28EjNa?oVNR=p`{seaG zHbH;dF~hvk8%I4MnHBPQx!wJHgFoF-5iEbn4-BI6_M|_M{ao*vtw(D;c(JDwA!zr7WKkBrpc+BRMxYw|6KTTWpkq5Q=K0|9&&%9M%YWdcA=q#qzDP;W^__ zdF_aaZym2&u*bZrX&d%gtPhOX>JRQb^=6lLa9RyAH>D%W-ays47!JbW|)6+d8j zjC%y`$f>IxRfzg;d0#b}t7|>4pqkKajrQ)SGs3*=J};#TA(#mo$F6V1jg@-9`j2Eu zStCR@Wo$x(5Grg*3soDU%f<`Zjydb5yw&lGXz(87j1^*AG(BHY^3n8l?V3Up^h4uw za|A?7uzy?SdKw{RzwAl|2TKc0lht`5!1nOzHv|6N$-v#$G1;wRL4mnOCR!E9JCkZl z1?o3=A=K4c?M(>$$nU^v8oTEMISS|9qOO3zM&f$RtG@$3-rb>N7J%9zG)IKya_E#@ zky{+>V1WA}_C5exQA7wjM#a;9SNc^Trdgfjv96Gl6tLKj&fmO!D=qX-CCZm3KT_93 z*Xyhq(**Ga(XufZrc2;@C-~6~?kssh)RIS@`^7bNH0}-FTQO{*0`R#YLLQN8r6Y;` z=CNS?z}s3ZAHB2i75Kb3tJ2M{rq_2+TeLsH_y`lZ?kLn9C z5d#sDweH_vWgrrEo2~|EF$PwZoK>u~)`rTpn>442K7r?K-9Ce3p&Xwj9+CH4w87Ul zOMWO=6m61De`WVRc;GJU%FK_~&-L)~ZFnB2Amav;8UJGodwZeLV|FmWB``KQYgXaH z$LE?bl_{fYaD_xEPvxefdIE&B;!m!ulK#o z15d2p`mqRCyJCbsmG{lD!KW`rw(YmngC&Xv-=X`WWN4O97%k%f1-;W3;BCQ($ zXf*m7aI!(Afy(RQTvFUlcg@VB1)Hty4>SRdR*(-sB}Hl+GIRpD=JI6{s^n=Vb4v6b zP1!i=rMKHpv}EnGL`1hg#XvzJ#kK36YPPoN$!PeGjkv~IM!LkYM<_isI#vhv5yEIg zDvTvLOdT$LxsIrN+6~KQkZvkUAE}|_`@6gvk-iHo-F&|ra8C?dUeM!T5o#g%O(UK1 z8o>?Kz#{Q-(r*&@ric*{8H|sH z@VgDOR=bi@sqv>0dr}F2n~F(UFOAf*Ig%^6FJky}Yhv5w-RyQI4tQGE_5GkRxC^j+ z1Q1-pxIB7m6ET~^%hS;#?-W$G<8nZ?c!*{<7i(9unM#Tm`K&lkj=X4Q(vlo#@XIP~ zwMiZ=f4xnJcf#3?>sxIMJZS5ZxuGQ+P1i@MDqU^)lpKy&qNQ)ykmyRSx4Q_b*DhVm>rO`KN~?_erV-lL z+xvg7fm{9lJNtmFEw-B>O}YbtP>P@?@LbdIN0j(XygEak*T0iW;_%8qv+TCzQ<4@6rXy^eB%xmZl_wvIY~~52CX+c z*J-bl3uU{fr%Pz&gNjkY%Q2@h0OZnu{7&#E*sE`oTW5C+29AAx-cv*S0E=sRyu_s3 zMBu`l@*{<=e2_0mw;l=0HMc!{GS%tEw_Un-(JH~XbW~4rrj_0f-KXu%6^7&1RZO4o zi{EHN$Vsv8E``$EYoL|-`bKo0?%4%d(~q4Cd_!2rT{fYtFQzy}m!%xzlONSbKbuQu zfTvVpPfCb?Wt4J6*0%YGqjKhPWaZEI!;pWOaq%M+yC|=qwv!c}&C3QPT8`S4ry^iz z8o*Wypju9}Y-($+1H3#q_|ok{XgPTc*=&B%h5$Y2YTNJp1Ov>wcVkn;%p;|7vtK{b zIL)fF(stSo>#M7a9P}B=lAfK+Kcyd$SBd%US7uEREnaR$lT@7ECyd=-Z>d55ed7|C zk}t&U`G)(`B)S?s&{R{0?PqGIzK>;Qvy38WiVl2LSQ`vB*#KYolHn~rAhT}3mNm+zhU1iabM>_&;_LVL z`3b72hu*(72br}w7ThaJAk7+?tj)1}{Wv#$Dm0JKbf-K#-lHaS^pgiR3C1bx9Mi-; z=Wol3fv@yJlOmQls=y4413qs+!KhQ?0wu49G#WViTWJEZ+myQAa88${=e8o5AIM63 z^#3%^{+WL*OMdHWssS1sb0%~lh53=AY_l66^m5X#xBTM@2$zN+)a}ZqFl~M+l?T2K z2dBGt$?d=mh?_0l#x)q4SC*>CbU-E>)5yQKWr2}+3mmd|W{p&kN>fP7s7Z_2!9Lxm zDC*ABdE3E_YQDlT=&y83a6$5kOpCt^*KdSqU+LBe0K7e<-qF!0(6)073USPLgoP{t zlC=jg=d7+nUKD)fbsKVWvO*xUv%JGc_?#;XK)NUEe2g(#ZWJ5v+r042$<5{(#t|$G z2w2M|OkR91`P(2Vqq^;6KH>9elOA~h^uW5{%{}!+c*Vl;Q_Le+E5s$gdK4Ogm<|~a zdYR&Np6F%*Csj#T_GO=nwwrNA9~6q2Ot7jsT|DAL5A64}jX^>cZB;(jzj`|Jni)k8 zs=7UYcuJ$bCv(U;< zpkl=uMp%L{CA`wA1(pK|tcD)15Liii#Cx^tp=vmrF-lC9U8lo$$U`XT=B7@bH*JjT z_oEbC#D0pGW6V=MnQn4g=){@95^!xWRFW1g3)lnndo0*ojARAF3Jp9SZbn3YI-^+C zulPF1U+R|XA|TL>{>EewXgf_r?d-3!)ZVz8{Ym*EH7(T( zeLgWX5C~q*K6MM(WP;AYS#7{OQo1Q-lTpgtX>Z%qjeQ^^+2ziRn3ki-ss@@y1~!+H zemQ0( zhF}+t6QmenEZQM!dVNCP`nNy04XUENg^?d=m|{e$dL-ror1m};ehgtLFWg?uyWNS8 zg+Zz|TbK$MCf;iCXKIpL2$Z>YXizA34t1AI;WAlMtZ1si{Q`1#5lS$DacS1VqJ4|> z8-cmQt(xyxf?LVp7sKi={>%a}jH2o*y;%`^|X?@cX5Cx)Nkf;w^D%3f^aMZ8#f%J2u%rW$DK2b)WrVfe~7HNZFc2Hf0Fs zndchcvUSOJ8Rofd3`*f@ZX2#@S?jwT8F7Ya)}Z9}%8)IK-Al1{1FRN)3S!fJ#HoU1BDgZ5|^LmF}u`dAWdMUxa{wSCRGZHdnNgeeU&uS zEM*rx{HY(~DIj1qJv!C)C1jG@6(CqLmDleQ&x_dA#I@iB;#=$Z=iJ|U|B_X0qxlY- z{S?U)e}gDi?ElbO!`I+htjgL~n=?~^S555S!ESDb>j8X_HlM(Kc?f0xK-eFgwzYx6 zXkQ%fM3XekLs|V-9vB8hTIeD~Z0AplWF&@+bDe|5Rel{tNzw^@;I_T6E#T3E@H&hg z3|imC=bj}+i1<++DtE(H2MWKkOg$(V(Y63$&u}+WWOY>^{mS?Rg`>&0I+7@=hk2J_ z`W2Bcn=AyMA6zk3?PQPo-cjDPJD01=-XIiG`tq>8wXwzRErydn zyVLtPn{^RB6O2|7gV%cfvud7!5o%VN)Vbz?&6~;=+B4OFVV!P5JqBUn>(92qI37n&p3Z%E%`FP>iCv|WjC%4eXg<1`NYnXqg_PPx zxTZs`uJenW?69zPoX(zk@p$(vAn;+;{d}LfK62A%K@EV#0XKSeB%4s;269#ARaHM8 z%vk?;DbSFhg8#_p@VHnS!e>ZpWBU8A*jjN zFl_(To?$D+-({hGW9x}EquEjabXMMd3ws<_bC);c&?xH=b&paJsJiz$VIdq?7x{B9 zIJ35&nJ%4U)|1GALBLgce;V}@{aB*c06g5K;#H4r^9j#L_fjiGj<*|cl-L}Dm{_h& znAuT856XdiVT_mT7RDwMJtF=*vdm7&v(oEpV8b>rI+SO>n}_8HMfB&a-f4OE)KARv z16^y{m)H2zZ}SA0Mtv8*9Brp21LsDnkFkUuSA`C=`i>86oZp0wkef5LcN_rm#ifLZ z6OT?_V_X6r&UCzUD-CECZuA6RH=Fr%lwzd=ujxSvw?M{`2Zra};l19$o+T*ZIQf+kQikl~W#qE6w zA?^OCxKo9g+qB&+UY;?fN&=BO}8l)itsW-U)IC5%Pt?g zwbHHI^E*m#i>qqZt>r{3U2e+_h!g6xw;zQsY|9Q6Q#83QDC0!u*;&U&9-Y<+-=3-G z%d~T@!&z?wlkAfG!qYGWGE5JPqGkYbd8rg!8GCtN=v}0^`)-HMidkVldmJJ3ka2KY zoGCJjy+Hc+xiF4mm0piMBc#QkYvZDW)Hj@ixwmR9D>4gkS@_;GQ@KIAn1i+%VrR0u zeK}rgDyMqFnvf6(nrr7Ki!Q7P`OVwn+n3|m?84`)o-3=#G*C=?=sqCg&lJ%PUF1P# z*07o6`r@RMq5bh6PZUXpFIYDQl(%@5K>RDwDLuai4yBrX%kI(m(@AZUjFMeV@InTT z*4^Ku(1Cd!_LKOvL|~P=x>>3;$}BMfSpslv*$l6V;8gF4#~54MIrQ<*_jnc0K22iw zj=bF{B8$|-0<$P&S1@E`Epqfr>GoabXS&+ti5+!hj>=wDTmntPT={8j(`0{};L~FX z=VN|a_6y^^zL|Q`m*FqQ$*EvRcc(wdE+P_GY zMufiKgnhH~jt&*`C0J|(%C?Gh>RhoqiM&3P8u7wlC6GJkmSMV7t-;V!#ZwLS8gz@j z&DXSU9su55(E4!Bkr0^~_DyE9@0Lb0TCDA~uda-Oq&k~!KtmOIKkd~$v+<-X^IY~? z=hF_7JQf@ZO&e$CA_Go`te?%!ECfTplDhoH#)I3%7tBtSm%0_=2B|BaWAwMLOIkzKOr#1(J8BRg=4@^(?d6zBMDBK^c;n}-V!D`(MXL^@{O z9rI^9vI!nf&0?=gUU|~P_t4RO@K*mb4guQ=|Ed|Bo2KC8Jrju}cQ{1(463<*$&=FQ z*}Uk`s^Vg1Sdf*WR-QSQ+hRK&X#nT*SF2R&)yZSd@TM{_x|H_lm2NVv>YJI}^9tM- z4n!)4QvT7~iuE5cNu?tDPmpSdpHG1Aa9LI4bDr1=H%2raW;wB(UiS>4)(2*kAAdJt zP-gTFR3`^^bl(40CU=|jIo|6)`Zw_rRewrA(^*Cg`y79%s6r8v1RSkrb)|CvLtoh} z2IPt~9z-}(ooL#RA=@;*aKyznV<*|&!(Ij1xLlv4N@U0EsD))O)$@x-J9Rfj)YiU( z7BeUR`RkJrtF5z8UX61L1lG-H34KXNMqm z48RmJX9F1f+>;xJz~y84{ghI>cqIg98(;d?;xmG+c`!x3J&4uBNvp=(uZgQ!GNjC^ z#O*$%4>Ov{_?VV)c7ePO$Ew|w1<(aRCGd*kEVHp(CCCT9u3&8V+&J27sw zt`Y}*EbiSV*ZQbCC5W<7JoD;)Vr9g%gN)#vu+{RU1enRj+-HqWa>udoXTqWXk%(R?IP~3xl}rb+an!o16QGR%(v! z_xyM|p{9oWK4M!<@ln$7Y4;$IY)h{+eyCYc@kndS-+4x0aCAL(wvPO9HCb1~Daxqn zYcz|HRLh+z>@y|&_byBjXEjx2p2{WWr%DicUvI|@FOD^BRNg*P!VF)`leX}z&(8no zCJ)?4{8UdEN*}zTv5qnt0Z5b=d~Hc1^vAN)7wjwA{^GK$E>~~Zy+^AmiScTC7F;MA zMT;sB4`fyA@w3W)KmcGb4X!Zxc*A6tUynh#Yr(?O^cI2G3w0F9#9|Yyv?)8-S zMB8Fkxzg4Ah!kFC0|co{*gGZ2r`Tc^{MEmQN>* zgP2sZPG4P|$J0h(J;|zZHN%tN+e$q)Ic^^v7}d_9_E9OX_bt9Qf2ynNOS0HO$9tUE zeqg;@xb|E?xPv3vRn)6)Kz2G) zwp@F)^UU1xYM?YdbRP;ti*PIBR|`u`%u?L&O5yD|PSr1RXU@`Va*$C0ZM%3PAn>Y_bpvS!5n#iar>cLJh)}C{;MMU=JyGzXt;}^?! z-s=S>@`l?={rH^P-!xr0c;;i0q7O89#H{DLX!Cg;wkMJY=Agx6ri;GC=_mQD)DY29 zbK4)hI02mbL{LTgA*r9-(`)W_c)>s5v?N-GSx{$0^pAIJ*;WUkl}p3ib^sf>H~(7; zzArrN zxxmy>p(>hWHY5`Sjqk!rq-oYsD|lbt8b$ZOuu>a%8MAB}ix?3|Iogwk%d4>nZP))yu|1b95`=QBgX#*7mX$ls4x6(VI zSKaEScaR$C61wyf5D*&z3Q`iJiG)t1ByYA{js|0 zYT`rJ*!rEPgX3Kl;5x_Y)kuroz3&S>ZqsXZqY=S!#hao}>&xD3ewd#mBHfGYJz5z- zlLxg!R#CEJ-l18E2Ak$;J4So1?|r_kQYiMK_S9)o7KMkJ+vNEfYK~}jG5T$arv24C zAeU4e#b8i$okfvCLQby5&2h_o(~#xn8fNmX;3P`DhApq6){EOj9lS_((VfwFHPuXBuZH|+0#WpbHYycw>mZyq zIEs1nc4Rk=ce17}Iatic0e^*1F7aWq#f}-CHSCVntfo0^~CF{$`J3s!9Iy3<}2n`F(}$Al*py zA^pp<2Izfi7LymN$hAOv2y1svZ_nXgv2#$RgGXin0lqput6;-f26D$;`_eWU)EcoYZ&g2Sn%_PyLU5%ry}RdS+3GkN)FVSg)a4kd zIK6`=>(09NH}PkiH2_!PMD^Jc(7mnHVpiqD%kTL%N0AdS#u&K-wS|2~uQV(2LH(18!Y*2b6BAaVzX z_xz%wEKiw|>;zXMD1}GHPdkH0{iZ@n!gHGeWH~VPY_a_6g|@pYMR#@+v*=|y6C{fu z8S|GbgAqLmV6mwNVpbofzN2<1l!meFEa7$rJwTFh(bz{-oczirhHYxAWaAq{|Bc$= z8|^AXg{<5ff$84;`9 z$#r7}xSMp9jw$0D!5?mXCtD9CyJ1ydw%req4mCryFgW3({DCA$Ssqu(O>D;P{BtCw zH@6&8cN0xZku1(BRY9`{p2b*O#d${Ug}b+)i@Y-DPZTOKh$Cmfx-DL>Y*-|A;jC=Kbuos&I6=y@Kc=IVYl&P3y+RLXT}`|XY|u07ri{nG zR%vC_ElU%rl^d>g3%wh%_I=0AHpv_TZXKJW9+AUw6I(A_#fYH6Tb8tyeOt)#(Ju!U zG~(cwobD@uYnFJ9&+KJ>60Q5r9!o_vp3^CAX&{sN)jgNkR1%3lDN)W}2AFb4vj)GF{~}@`K&=bfZDbo1$ZXF|Viu(2RN>)!aGond4h` zl?E5rnk1tB;H=4&Apy+?EgW%bAS?DtzpUQT-=*BFfI5LgR<;RmqtboDx_HuwU2`JI z#+II!y_PPsC6Cp8+d9e}c%ZbuNs)x(lrLuOire{Ls&WdFH2Fo^J9RE;dZCuQ-*3(e#+^G2Ev*7Bo2xV9QN5T5{brk!hCE zdv@HHd&fv)l@6Zkxt5aeVcZ7HP@zFc+Ri_SJ9u>`4(}?98X&qo@DDAqo!5bBm1Gi2 z`LmWDw?S=EEG}I2hBZO&OX+oW7op};?xQ=Qm55}b$Y85r)u4hy0t2Jq1L%0js`*B< z2@vlK;~W+*M^JY}zyRXLa?(vTV>9qWkyHRzf9z`cs_>Blj*Iyh6kzHAsg$u((95kY z($oVstN2U0U^_HX49^35h*|V{7{$Z$3x*rOIqI|z*?3o0N8+Apeg5zj?+x{lZ%kJ#2|33WKl7HSb zt*UQ3mhj$^BLQ$g{>e7|JC(hKjSg5C0BG`a847M zqljjk;q5<@>wo`^n+xEc+2w6cZP^iH+ySjTOg@=w?Rcpf+`!+Hm)NJbZ>c%(IDKbb zi5FB*3QBx=GUM3s!+zI&r1ZzDX9EW^UoG*FeIY_naTG7J!Ls(^6sbLrsP#8PFJj$l z<<>BCjvrC%tTj|*i)N_a9>8lsp%E;llll&ayAGXFPR%ca7Iu5O9J5+eGR=kD2@BXP zn*sUf45?B@W23thHHi2F_oqTh5-8NnfzRQ_kLQGLiZPIe@Bsd-m1EyEO0${o-yN0V zOjaDOA*G%0BEQrjn<@LQN0G#Gcnk@Q++oIxzl_@UU%QfVmFA6Ko>_JWfR~cjf2%cK zKqu}7Hf*g_5aN46H5roKN;Q{IP$0C%ARDyAH3X$%P3?EdZF|P`9M_5)mkluOyL;PG zQMAd}%`(;G?s{M}-*1^a5-z=j?I8WIoL*iDqRZE=D+jaXk)vMlVR-)9T)5KFHqmZl zo=F*|)384jygj3X0Gy=x23;F~Q%~$h{Wv^7*TvSlKe61Z9VzGh>WncC1)~e4 zH$syXozsGLX?9TlJ6l9J`9<1(t56~vVci+*4X)#S*R%AMDlXuqf|cWz7eC#V8~-Ba z3Zn&xj0@@Iarm=<`n~XhHE#q12{FPz&A2bMkx{Cp5Ik6I^S6WcBWS-?JyuHK;x(F& z47wcG9e zP7*F8dz}vNi>LBVJM_?2BTC{NC?jt!iVe3+~_STmO5a+x#NbK zK?hz3r*nR-d7q?5HG))0iwmE(thpAn_&Y9v`4ij5p~pQGmmkAx_)#kFya(by2XjA9tvOhU=>xOFb3P9Mx$XKAwF9CN z6203k+i-A5=hZ^4GyT@hI9&x)YlziQYu%$$))u{V2#3(W3EXK~?IO7wEtxWMqlcC_ zTaEBTRu@|2gQRBJFusm~sxUh0}!hSEYn=(OtQ8Eii0P(CCA7ej^h< zsRO1Z+Z1R@D^3^d0m4dsM>-MEL1R*MN{5+MKMGwjr5czdA1KREJ?Q~q*|oUF-(+J3 zKZUuoD5AI75p3hkJZ7JA+Hh_Di1uE?-2RL9`|EF52>YGso~G<}r!i2%+!((+C?)S> zd_8!;)b@VC_Zg{)+z5)4nZ$WV#tPNK_bDyxTZb~{0_A>{ae} z^s^KPpch4kt~(zoVjU%ur*uMlHQ@@1qSEeJWQLuKh)zFeF~~kL6ei-LthaD_u`agW zOEt%2e1G^DN^po7szD`7{jiSZFad>*-*2DbX5yCbUWuYp+HJJ(XfAUALQDrtR&&>O z1e{KOE?M3cY!Qv{n$^D3Ip~hZX(j1uCARy5#}9gg9DZPs@P->&5>M0pkyY#andtf7 zA@3e*b6Qj=5UE%6Ix48&1}snw zRfJEeT~trqr{Rjk=Iupapj*7PvrW5*dz6L8g+MS^X2ofDO6NJW^UW#|NbRV_E#zI8 zyw;SQD*)GBnW0dC*>kt*mKNY5S-MtUJ%pyGNRQ8magb7$$Ew)cW|@2JAZ~DsI11h4 z|JUXMPS$mRB2u6k7@f`83>9jwewA}ccfw)(tFhneYQP*c>#*hB7Xy*t6}Sbq@~iK? z=G@)9;P`MEU?yFK@{L(}je_}>7~9Y$kB5%3h^VXN{++EMk0m2`US z;gDA7XeJxMXzF(qFAx>AxTSH0roH+u(~i2Bz1D@&RJOw0$)Eo?k6k>-_zfI-ZO-c(95TzK?w7a0NxAIikQtLC=H3LnrHv4uxO>g`>tgfY?r;sZIeqOd- z=*$gIg}ud*bTmsp`uA+Bv|?-|XU=fQvO6%k7;mxcXQ?569cOdUpN7ODn&rW`v&%`~ zqd2c!SYpcOHJfu=+!36=w-e$&2gdz`O#YSDBLZXDJiSc!ma2osb@SRML|&R`5f8mC z##{FrzT!n!2kV{30H+f_K6o*z+m?{-js~bQE~fSwj;I~zNwal>dlu zvQ9nLcXdS#0o4UvBtb2-WDkV);UKOjW!7r%iembnfquO0UG~a)A^*2?a8|KoCj?&&3NFw*S;jTHzmIL?QOV=@iC-Dt9qk3x zK61RAMlI)3`E|zaV5QdA-B0teiE-*(e4>v|=%H>BH!}_sHuv<>9f>1{on3ym)Kz7;)*<@0YAM^bS`Jwo5kG}- z-yZoDi~U(nXL#tK^GhA-nEll+j!U4~5pQe}bautw7#v{jRe6qm-1T(JdOwOVY%O0i z^kl`ajwX(%uvrZR?Aglv_x9)7PLIy69X^M2l)swNgHc#AncepdvJCzd>~OkU$sc)m zTBjUJCTtsv3^wT1ZVeD+D6KtqqGI-Ypp7nFULv7GHsemv&)*7uvez##J1CD!U0R zsWW0<;9IQU!&yz}0idAP>J^32#aHH|YbKnEqg#F3;~Ht&%0DLW0KId{Ifud3K=tU` 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 z z`w6%M3ZdTKOLelCSfMln8CA1FvMPYHb4iXB01?eg>G1i3IdqE)jpD=`HkwXO%&2(c zr0htax$id;P>btRnD^|aTAe3|0yWQcc!cZCC9dty&tbyFs~-$vb@Sr6K4vDDQ>)aX zKN?6$dBB~4ca0}<^#+l>D(S2obe|>2+e3N!wz0@<;r2F+UU>!_RA*gbNCmoV_ORhD zI&AOb#%)Oak88Pul1++vj#7T)VS?0$j#&;ti~?7ZiH%BeN96!k_$$wikdSW}bXLiO z$*R>k)Dt`bcFBYI5m!!MeM)bi!{JRuxOIF&~9C6zSf_RK{xodOto z3O1>1K8YZ^Dx4wozw_0`iUO7MRw*x#JNNfccs5U|w_hq{8#X^*3OX(Hn7PP~vHJBJ zhk?uH&fLNhdY4UN#Rr|b%njhmM<1DZ0X=ld$x${%k(?Xt|Dgztw4)Ba(?p%(zi2Xg zVqfetSt%{kr)Yfq)qo|_-X(Rnlt*8yx#v&s|Kw-(TP~nb&KOD*dK>zrbKL(nUh`pb zKdfiaEhE%|r}+r2DQ{NjWvP_k)$w-DW`?mh20Ho?LVHi`#O5l@YX9r)nbLhOyuYoo ze}+P-vWLJn^V8`*{=0foy@q4LxoVfxZ2z8q1uPzsm3LXU;)ay0yKc-Z36l?Qip@5!rR z7hYphp-tQ~Tv>1%2AR-?W!Ipg9DdC*-Or_`VbX5>5kE}qb9}GrXl_wND{7G+TSy-7O^&uFLGG?Ow|r2I5cco! z%>H588@Ik^r96TX%r^@xAW1nB5Cr=t7P~qdKX2pCkz2l6$s8rYul&k_`0FDIW$fy2rLiuQD7IR_Vb%(GGzW_Q}vHf^pPh1((hSKiZ?j*PmtYxG@K(=b6PXg?>&JpYi&Hy4lxhu zsPR)$qU`vj?kYd71Q*$a$0>ed%P7nNr^7^wbHXCRr*}Q4eiRR_=}p9(;@tqa%_w?m+S{kHeH|txm6fpsMh5 zF(y@bA5x*w!>WDPuyE$P>)%q1xM^Iz#n%SyGPZ?28TByk^`8poRqj3ywf)`b%2BfgKAkPl~wUvuMSRCA*>YL={=RWH2>p_3}s?XjVy-dyt~EIq-?4a|PJD zHA17aSWMZwaiXaIWF+|^_`9N}2Evt9+x~L^ygyNMy6BQbhKm^8vD(_!e z8uD?I;ki(7Yn^ITOqp=W^(Sr*44xZF9wq%q5whp=EyQ2DY~Hk}qUWP~I}4Kyll?~b z?e<)xutU{jN44~u;Y`Iu-lzsev`^vIV?o=m6#yG^qI_`2v)*i$@|klc?5;f)Q;7(t z@*FTU(;PL%@4Gr&?K!SJ*^*}OJLlz^9=*s6Q9eIKw~+Tfx86_z(-Y~IS0sCHEnaeK z6}@@)Xmp~5dIn>r0>Ay%T`vLx72~44=(KUL3Tujc90jtGRB=C;V*{LQ;t-G<78`=l zns&W$rU}iEuii(?9VkWjxNfB$w%tLBfqOw$=xi}G8*xluaU%v_J}S2lQXcN3Qxy)Q zxEM}vR{)?t4t>eCn+auC$;0Wqe}5zV)av|{~OfVa`pbi7-`Y3Wm`gFEg_)&;3#NSZz#{Zw$B-f{*DxFE=H&AIS-UeQfW#Q4Bo@~094 z!Z`zDI@ >b(pTC5HzEgt7^sUzDsnPToq7R`3=O-8&z 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 literal 0 HcmV?d00001 diff --git a/user-service/GuideAssets/Selection.png b/user-service/GuideAssets/Selection.png new file mode 100644 index 0000000000000000000000000000000000000000..5029373ea18fdd0e2592cdc6c0259c91c8479b81 GIT binary patch literal 282069 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�HIJI3>WH$N z(tZi7B6Ie`(nX!881OB|gxG8w0W{MN+w;Yf7X?Bm0+Ie5aQ59Q4U$xBt}e2 zuX)zk=w*`-d@yeRv#?fH(eFhk7KU~d7JhT^Lqkzc-ZD#Z`h{?asJ}U5XOsiv zE(0O9d=G~01x?DjJueq!GzxrjKWWFh`(vu-xZdkbu)t{If??gJlJ-&A{5DkaW4++h zEY#XMPJ=6Al3NRC(NJ_PMD%Ii$q+|>M$CHfq?n;~dG0;)OCkzJdRtSCD#fFWk~pTMGNBYU7n(FWv2f;%CMVqt z^q;G7v6t!p2=E*S_$t0T&#$1A1rBlSe|mQ^q4Z)(=^pF|hDLKQwagDc1=Rka0Bm~q zmI2UKoSzxR(w&maZqYCQuOUiq)bjyrM(LR9xyvAB!1b~3!l=dt_MlJz*dZrYMKnI7 zyOAc$vVfbI!_jPQJSp)0?%U*1}t|q>RE__2pw0HvfSBKBEK(PJr>E6O;q_5Bt=rHT)&+y{;&#&M)h)eHE{T%)YYTmBO;MJV;a+5g7PxV)d~)r>1o4&R~bt zOq28O8__${4s(02&Ffq$^-GQ{%i%|^FxKR)M#zNh+Q*Xiw&Pe3r zntZwCVQAdPcG~$eHuRjWmg?>o@g!C=oM0jfQFa>U4guS>C9G&yK@E>c;>bsC>X~ho zCJe0+{^YN8Z|A%-MyhsvZ7u`^ZTaK@b#sX-dvWZr_jYn??+Q!AwI@oR$AFJhNcU(h zH+5m_-2D!*Eq^aqzMBYU%xsGBQ~hpU5T7(1GA z$X~;Wlm2Fh(ujeEGSzC&lKbW*vBdVZ6D41)=pVDht%I8^cAH6o+HBHOreNpKWx|?G z8~a9P`l;mw+-n|X^W2LoHnSiHhVfdxOCIgUAq65`U7#cw3%!#x#qwiY6an*a{;OF%7F zK+xNvX-^~wZhO6Mn`OY3j!EvrLWD%o$JeAp_VeIB<4JC7=**GWvV#Tq7u2^p+k6cx zH*rS#M#K3`UOgDHQ9N{&8Bl9+8yDmc9eVn@V>Lz6ilHT>%+LXDU#;OZNe_Y?>t@Be zvPH#96@7;kSG!jEl)99<4*5*B)`Dk^%|E$Tmun_U37cp$=qn_~nuvxQaYVShFFQRn z!+aUt@xn~2nBR20Q}1=U{C0WjEajRS0t0byHR&MT0&Abk0-#ztt|xWNt~<%*nm*mQl8ab`*Dc^nXn!1INXDWy5Y(5FGG2c z5T&fIr+;$KElLJ`CV5$tDYWHz@8h>ULKemfgc_Y!+B&bBQpXadXv7K%KCHpaMbjmqLxCb#gfWzLo^wU2dLbvABF zw2$clzQcc44Z*GtLuSUgNxE{oCZcaA@sd4bAO=lALij-?E3a$d57M>f&dZn8LX^xl zlJ3ln6bH0acIuf76$SO9#_VY)UG>_08%yy4K$ruy^@rbdvG74-Qz_L+{fZFea(jhs zQcaH)g<4R&#=q~=PNr|_rbbK~@_Y#xs902T&D5VuD1p2?LuHr0&KHJ?EjDIzhihxT zz-t_Q+Yb%BpU39*cd@0C>+vcB#ri`VUxm4o=3VhW0R+)b$=b===J-HotYs!mnpxx5 zegHD?<<<^+9y0l$(^fa=Ym?mkDb2!$|Kn8AUp7qgx-pI*13y0h^WZ#I4^A9 z|0}r)+4cUdtjUdJ0se~uf7>ams$S8r`(81l>W)B%vi8Kbf3q{`CD%2NTKf=1bvWrdau`HxeBkT)Lfiq z^B?YXJcJ$W=g(Vb?vUC)x5>wi>v_k?OL!JnjutmWDJq12!72pU=x`a~-8T@YUhskN zD#i-*&51+BHtj-z{l!S)*HyZW_H9LWvZ|OV%Br#R(>=pex;d5}_E7KC2_%$Cs(SGNedwyP@NI+mgOQg4o~CAE_iXUd%gF0^Pr8QVtnZfp(=NA#&f}|MOw>9qEuK34Ti^LV1L({ zUHl+ssJa=m^ZhbqqjeN|F{jHFx#+Gi&%|Ehqn?(Mkn7prUNf_)U69hg{TFO>zCSiU zZHAw~74x{p<4TbyUNGwu@Os7GMpm1Z;CtJr{v99XM0pG5T8dkiD>QV3CKS^xAIyeR z8rC2VM_u%$^u#S-V@7sYSOMb@1$y#AG7CfALuhE5gxZjyqR1lEcRqYp)FYl=kGhh!|T@VoQs++P7G*2q` z2d!Sq{E5|Gb9d;L+yeXbe*OzpfdtGqDm<#MS6U1o)O_1j+gyDu35qKB(UdpHh0V|h zL1*d(VU7^32kt|{((jkYe`n0^Ko%>nihHMLRUDqxuT??xhv>gDEAWVRK zB^jHrMVRx>=j`Y&MknA@wk%R_h}4pw7j~UmEf=$<8qyZz&wX_t$~wF~%SN$Ygo7}( zcnjOGTMrBinMntHH!L3%EB0zVDCG73IO_=U%IF8Z5HyBBOHcBv+l-~!ZXYJm@3KE7 z07HK2q?|SClH24FNwprYgEef1Ke`l;^-8(76qM5gK+ZSCRhvJD>j+du6|-(|t{&!s z15z{&KthJ;)wt(?vFEVk;`{ zh9=7AEw8bLy34{P&CMTtfe9zcZPkt$@M!EnG|i!2wTuaDj(Z~W08IOrZRYNKZ7glv z`tRTopG(}4dBHmp+l3M#9N3=9+HhuJ9;?Ul)iCYUY!&?&&2-X6i`d76M~bbm0x~hrK6o61Wi|VsB(Qq-?Z{bBZedo3>hrg zX?KxseB#=WVuJjR8p?Ipvzq>Jd{r<*{fFMni?~a5ytW$xaweRPr3%(A1yfJnpt`sJ zirD@R>5?0q*X8wk<@K_^#wQxjtlns3mnB(`epb$DBPtZ9{zIlOi6wol&C;~ul0?!!lM`dTaL+PIqm&Uf{NAB6-D zU3M!p`qS{!akrHbA<(w{YtS)uE5+>^R|#RyOuo@lB`mo-UF%{ctEfm*7wBV(7|s@F z@*uxU>RKJnGIq8@P6fFYzgX^n^3IH;Z55hbZ)+r$I$;0C?oF0@Pik|XHj6afFJ%^E zIy3QU^_iTI!*Q?1J}3G0&I64-OWgiIBD$e?KmMxbORiM4S+VAN zPzznbkFmi^C!r2s7>zlf5@YJ2@c0AEh(ctLVUQu&p`LSK-x?PZI=R}KnkX|tiI2D@ z9M<7Vey{zUUc!Uq=6Jf&ooLVguW!Ngd)#z4N6kn3i=CjuoN|rQ;A>p#F9ZapY)WW| z`O@h~LH9|42LV?!#lri9NWP`F_?LslH~)%z!!Uvo@w5MPHbdCko-h*>5ANrwU&QB# zS_4S-#V;q&e35F9BFjsAvt7x_wsB{c8)RujZ1L3wM{}=R0;5gNkfs#r?8~`xP3H_Q zo0ESUy4EcDZ!_PIF2h(2U-cwmdQC5>wbs5t(_h$S z^oTF&*bRM$B>xJ4UaUoS9H6T0B@9uWVQX=Z-Ozq+4Z-oy{CWMOBp4;fl*trWUg7Hp z7+Aeft@nf8x=O6f^&vf7mCsj-I+Ee}eZZQwSa%4^P_@1lVDqC~zFqgqV2_a2^8h)# zQX75&`AgHJ;O8KqZGHa8a>u|!8_&xr*ZF0GN&c|0`YV@{<@QMiXP~poDrYs0AqUKz z?!7uAipLmtE{+qv-WCnO@H`h7u2<>Xv&rr-CbzoIn~OeX6zP`;#ybBrE!G*+2<@1V z{TYi*#m-rMMxMX3k1Bt5LLDGB8xO!gRUo;G;HIYyw#+eMzlLm1Qk}rwDBRW~<>OW5 zsre7-Vc-!q|tUyhrms%C>dub@(3W6~L@y;A)(~DC<78zcFc6^6p znK^T}I&9$gle&UHU6SWaQkdVbyy?= zlMvGZ5c0XQb}6p(2t+3r@u09^{7c`Br|p-t@^^FRerk9 zK1fXA=R8#Yzm38FvI~Rkk;RlI3$%uD)Si3mX5Vk5vGmKai@0$9}Ku{ z6(~w)eJTtZjX$S$2{aq_0hpcYqW$;G-c;y$HDHJRt(yvL1>D#~j&Py?YF!GX!(>i^ zI6?Ss$oIvWpRrGd8%G3ST)@ZsC%N6Jyl@-aBjS->VIAGu8k_P4^JFcI!jb(?=Jy!Por=#zqRZqzmkDOW?vqD(6z7Dclhp$1C`>AI}9k{}07Uwad} zSje=6-R%CvSN)xj$$&>jeG-J90#Al=k*HLjp?PlZvxDD?JOw92?&wo{ID+Z#=4>0z z+>VG-T&1}L^U0I#tf2X_(XSsWGrL+`mBd9?d&};ExgOoA_7^C(QRpcs93^0YOUvEr zt|L7vMxq1fDp<3TM@5qHzL?{~e2x64RrzOVZIjQ*`3*IHeq7HNCoJARHaxS2?^MEc zokWjNag@%I<>~4~x;A(emIm%r59DbJRG7?`k_Y!3+F)3O3}i9n@G`y10j*c+7jq(+{|5c9o;6IrX9eXsnf99C?p&vIeBovQbM7bD0W%PT9Relic8pT@b7y@}(X(3xfZGu3n103_*v+-33b8UB zJ)x_CRrvaF(t^SR{<+%n8_G`}JPVkS2yQmW2jeoX?_@ihXAQgzIFI^l!)5-8)B3U4 z-**EdU>;_IjRv0-Ms!&K-uLa4PTU(AcjZtamzkd0!_Sf0&dGs=U~b@AFpkl{h$M!-Hs`U9vBq<%^&c7vHZ7^VEOUtq1E$&y~9mf zC34H&WqHEba`bkmJ<-yx0;*MaxOt3dMLyIx`~jn|@q?6oR30t1GDYKiZOF?w!xl73GhI^elx!+%y$7aLC9V({=+JvHi&M9&3~%y!?Yl%xwLfm^_~sG$(>$_&mZ*0X(@==z*?rRJh$Mz4euRQ3zvpyw%6@$gRiI{` zDl7!|gQ$OYGl7E`LQlGn=)6&SZ*!F5bCY!@9#f5T%1C1r4yg^%+RU@yY8-6UKRehL zb^L^fGL9HsQe25RnZ@s;m_uxSzXA;Z7=Y*85~Pnuo-;JGNHw~-(1iU@m*Z&VC~lm{ zXHVLM&V3uU_WBdbi!(#V)E5dP9ELL6^x&Q^hn0phgr!rt{hg5#iYxWig*@2Z7EFB=|GS9OZ{@) z+WsJ~-#|8}L#t$)W-?@Cp^*3C)jFJn!ujx5$1X&w zCbe2O$ggimnzw2rm|PnNOH-(E=G3~e&~J?E`7a)c6saz&b91cx0F*7h#}uRcaE zol`gQ3ze`PU#J0^)OmtQ^8z~)s%L-Bn?_i+g7tKv&K-nC)Tv2LL znnV^y_LQf;8eUbctpAja3=93;Z3ya+oAsZCfZ95CVUA}VeNP)u$%)6lnr6nkd#;|S zptMc1v;dR8bpSin0hS6e_J*%t0VT?bT;!G&e2Xy9`39mxpoXE)8n)t7XZc_pDMjt* z#QtV4mD@PiGPj@grV=|VI#x==!tD(@jQ$Eo8%_Qe0C~3jAWQ&-osZp8ahNhIvgQ4> zPKXdT<+9y8_Sm9joA)P0G}+o3dd1Cs1fzH}oTOBLQ{8Z2bnCvBxuRUzZQbq(gySc}`G@-2Cw`2cyaM#&4aUPLI9K1p?xB%o2e)CHHppgW{tEvB z=xH`tjS$1QHSIsH(E%ka#=XeLwZA})#oCj`X%5U0e`bBLv!pN9@yO>%O^*#&lyvQr zu+snTi=!@gsfGDiez}T8mF{!)z7-RVBMOl>|!JM^o#U|$@nR5hY#wyLE#j=|`TY&5vDbD*{)!=@Gv%2z= z{>5@m#h#t*7Py?P_~DX!W2y}om@!xmwDi~uPEtIZ;sm`fLf7k~fOy#wcGD!;xI+Zf zoz(_`!{dbysNrQE&4t#;s_5^VR&I48NS%dd3`m+k^%sBS(7Yl(FwnY*t7yk1&Wr7j zX0PncGU7B;DQnz1j3wmDTqf8TI8fR7b0TNY05d^~?EmtJ2l1(!N%7}Yh5n)k3HMEa zszo)c)B%kkRZ$Yk4DHw6sJ-;XpxjCy8j zw?aIHC4j7V9R*0)OhVF@AZu3yg^;CHe{J2oJEI?*KZA-@Ni#OfYCk;IU>C3Z8T>8e zckm<|PBkW5jus@w+}yRj!fljW$6_o;=qJzjvHEn4jvyhP_=n2_&qFQursyT;DlmPs zsF^R~;=%l}afz1{t!^>0vtoXtO7iIFnHK=o#>>=J@OZ{j4 zp;T#{p2Y#SF`f9!cxtV7^$AEK&8Y$)DIRvVeW9L!LndA zKl6o;F9O_6N@7#6rS3Cw58Yq)$LzGh_TMo_>nI&RBUyG;)2OYwta^;XFe3?2wEgN0 zXwWY6WZlb9xS&%Zv!`eiksl%HB>>+tcgXNpT2B7qwz%Xzlr+EZVV0%ULb#+|o2pE_k|L0wSo79|o?LVq*F;?rzq1TOX%+o7@VRqe7 zRu1!pbH&KN3@fy~W-Hv{Y_J6p^+U@EwuG!UuCRp|R$}m0LF;K}L}CggKlD{nMe=&m zI2IlATbs<5Ul;Amc^LmuiR=Yf4HQcV!kBwtx{d~D!*?RaoWtJ+8-(P_lBInIn%eVe zOL;jh{0=uGj4KtJc&kos6P1`dq7U&*D~pe4Jq)w*BQfJk?a<40hWd!E! zw2ZmU^V6NRKvku1>(T(R5v$B$=)i`ucgJ?C0Xx*`Ak(_-bdkGE5swVz+EZeQaNM(6 zte6W~?*bt?2j=#kW=k-`unRZE50)c_M#{Zmjnpt4p;pLzHO$!{Mj`$2&8of6 zO%QEqFHZ^1(p7LA6_vUe6a2YHIoREh~Z~|L*g3C3UTl+!YkLO3|uQRK`ECFE-*jWK^ zRRKvzBGpm#MY$_ne%q=x9u&bl!OGF@q&nI6<<45?HB5VyOB<0!=efdZ=h}K_(G?w& zG`<~YcILfStnsr8k_EI?FW!4PwCgyCnkriP8L%fqQK@v7Pu_wkTRZ7ms$aK0RZ?;q zYJPHDZ5IF~T@@6gBHdH!u!AW_81@H}Z<;KmsrqQE1)y5eM0zBWA4U@2uOzM>co=ro zoqXg9XgeHA1*?^Re$EaS%AP5xgz!d`quYk#>xtXFW|otom>O}cNs>a`mMc3g;f;mf z!eEHqAo|p?DcgcypsdT_!R{?JwVm*$Om=G%+jEPXl}x45mtQG(xx3uac|}zP5SMGM3t@E|vCizkHMh~+YQ}cj)A4F=%uLKYS-d8p4RPN< z;~Nh;@3i%`0;G{`8O1ynLDSkhmM_K?TIVTTbUA%>aWvD$9R(}v(XHTO;xr_|gUIN1@}+O%q?qkCe2n|S5$4ai95lfDZ@Ckv=4HF0ci3qd9F0 zf_Dw~i-|AZ9`VL0Tm4L-T_PG=WcdLHf5bfQyii^kRwGOiT#sh}`7KwdCmmfaC zQ3i2kKBXFExX%2Mfqt&dYa@PgbnAfaluy}EGb~tP;CFaI6GAl4DN;lj;fkvy0u)b(7xem~8znzL?54qgQBK^t8$P;xY?TP%LeP4B$jS^uqG#!|>;i&OKT zs<;Uaf9pkI*S71`%%C;HBjhP}PTyh2iVSmZ|1O#R zyz7US2YTLH&0q3#risU1yCA7BkqwuqfcxfVfoXI*?U)J$pqZVZ^ z>uVI#x&3h26KWkM`gQ+YIL&br@BFTmkhOeUqd5=XGJm7KtIB`W0$45nsK@wW$Zb2Y z?NzpX*v*LDyq5wFy_(*IoKo*yhA!zZr<`x0ED%CavkxCHc+m^;+wwYF3VQ`B51e9u zORw!3FTJ?FB`+%W`gJR=Q9xv5sU`azrV?jlFN`0)uQW>@OY*tIId+9Zp&A94`H{E0@UrGeBeYwm$%Z86p90B`p8cIC?fSJSc z>)-4QJ0ZV=&`EWhz2`>e86N_0f<`t4^>co>_Tk_@&v&?Yt;FS9C`(|io3%&0y#LB< z+^Nx1CX+h9p1|sb!jHl+q4+@C@sM~0c$7!9D~qv0Ll@nfO!>NnxAno()h!*jvMC86 z)*61WMXvHw$@z>*NZD8cIJ{%f;?IT;-w#2{ru|zn)1r|FWh{bnNpmx9-}s2M0relY zmS*N3dRP{3ZG={{pPJ>4t@g@zpxM~xT7EiDd^~qG??lW{sxjZU?P49#~sn1RJ*u&@&Txc+a1CG_hpz$Oh7{N*9T(R_&oK$GK;ppDyQUA|$Bh^OyE$ z%jRKd0(u%+VL3lcCI>e7IJ|oktD@Ep?+3AfHm(CPi=#1SsE@tIn4n2j#j&<;=!ApB z%GWG+{w?144rBhc03c^J2u=Zpm3(x$_m>5|vPeqj!*n(|3PO_~p0fz5F{3_ zY^50?w64icQr1w5Hm#1Fq4V{&;eyvVZ&@mhdu9H)_r!B-?6=X>U0Yh#b1`~#fz<0k z@3DyikiE{)Q$%6vwt++*cS~E+{_{6?pH_$>9y6{I#(m`W;RSrncP9oW=;i^dwzMrH zd&A#exBd!YGlJUcw7a}tfl25-!3Utni9l3Rk7_G;1_48Sj7_6Z|y;356-tu+t3)=&HNiGe* z+#ka3)g00$%4aJGwfV?)ThEJ;TNaRkKKAVVxkev{DU#M)B_G!c%{^Kw^+Lnbj`~i+ z%QKcAF!7|9m$SkO>ei7EyjqD}?4c2TRJAju*gFT_WHU#4;SLlHpy&`$hhULbd{dXA&p~U)!g4qE9oGoe?0kKrzv*J#F zMt3(nq=Z!EtUxQ66}WBVCohOUR$Qbp`jz(Q$AwVF4%DL1`QPoZKrR{Zm;IWs@F@+f zI-f2_a9UG?m7kM;<-6{d!PKGhf?3@-W;}HMXYhVJv>=>*Tp+b#Z19UZ1@~s0PO+|K zj@J=Xk9G>3m;9R>V&y2XkC1p6eaP%B+gP%H*$`IGdakkXtY@r)nppZ|2Vr zGgduYONXjVgBr1_fa|;*_(j)C5@Q8|;GsGtwbAs7GMtNRuV8*IJ~<2Y-R1n@{WY{i zbruwE;h@M3pQCH1W@9{&lUn>4Y{%8;dxdq`aDb-!(~0}dZ+p88RVMoNKl$Ghz=vr4 zXEWizrLcYV^pPe+%qRLoEZ=F`_sUScB1fJB4L_vy!?up1y=SLO8tY}OELiX2{Hym; zrGZ-p=tjvmI8fem3}vrM=P!28yCV>E?&P}aT-BUPrlnLZZpYAvn73^v-lW9hq0Ke= zX$B&s3-bbgDqyk}@Fsl77szVBt6YvNw}re+C5~7cz0G_rc-s}rj5cVJV5-_ca<^mF zg~3(?$tuZPO-5^~$Y_~KH@+%x@J61%`YzPC)t{xE)Hnz`g|KHa)Qnm8>j?ZQlbXb? zT|9Nykgx3Kw$9PjwhP%9wOZ$qGu=^wESHPx; z)Rx)W?t`p3@W|V?zfmvw(f`X_E9%>e7aH4fe6K#1g7ts~ShM?6uk?Xl?eK}mp;D%r8%LAp zl2s0c4laN5w!X@58>9cGU6Yk{?W>rgLpwgl$+%fBi#d61mksggr$7&AuJGfOR&Lal zGuQbzd8MXUCv`2mVy;^}jHQovx1mbNtXPQlkB7zSKWZuqQgzJd300+|p{C0@FGz!a z1dYEluw`A*W%heoQwq&-z|?o>INQyWh?l2RUTKdKYW-L|3^+$md=pq0*0MRk!p_1d zqDSO%%$atYn#-X})aZ80zJbJj0t|Bg}sMhC8nxZGM`^FN*>s`k}Uh5hRtN2t`Slsc+2xJ zLBHDK+1Ly&9lODKi6Jk`1QCl~^gR`7=InDE^!m36|04;B^pAa>cgq-=jl;gU{~ubB z=Pi7-sg{)5Q}nHo>O#;{rfZMI2y>Dz%;%d#bEmB_pj$`OL{HzQY|ri)0hJ9#zPBR! zM;ITb$cr!jjg9$d)@gSyT<#TrsoVD-GL+}{{4Zv5n+^bTQGgx|iCrjQ(fZFeaGNdJ zn8R{l+r3xq>i_QUsmq-G=qKBk>>ui8rhI=86Q%1zULAqQe$Mb*VoxpT4%OQ0?fm^7 zoY5vw^xW-6WT_xB>j{fd?p;956M%@B{noSv;kZ!ym=gNuKE2{!Y-$^QQ^rT@ICzb>}itBnv5zt8l)UF!e-%lDM%?(wfX zwd=e7e-B>$_*ayjjubMuJbo_2A3tW z|MiRiGUk6>{-4SIpOvL<-~S)mAk%}_cb)7Rku5$wY+YOH&hX|{3)rG%&=P*9#<7nJi;@Ui!q zN`sxMvLCzk`NQv_@6SG}uT!B$%KR_rn;ThFltF?-QqoAL;RADCj>wnlRxr*GG0z~e zHcDA)N(q$MtZ9&HOxr{JrM~fva9n?V5RntTJ#g{g-t1(lNTN}V5PwzekNnGgX@M8p zPtjhl5|0NtCh>Zc`yY4K+MDl+Vrpc3M_jO$I}_n6F??E7G-4r;uBJTCH*WmHXm)v? zO)F=JP2avw+EU{tJi9@prH@mb8X9ZG(BER_9PRK?Sz1$mIr8-q=DkNhE3OI4EiGAP zOvN{v5%DL>Zj%+t3X_C$xie2i20E%@z;}J*H+NQo^xPP1jBvrA?g75zX~IgwxOJ9d zpn@~f+)Kfi!YQ5WXfFL&+b1sN3EVqzMV7e@yi(2c-<@`x zi_dn1TF&LL1wW$p!hFn(>J&`}se&W%i4s#=IIF zv8QW#=NvcgP=Vt0*-V;Nh(WuVWP|2BvdnZ6IDCQwV>Rx1J(-0mo%d*tr|_R34({Gi zqzZ$cP#^4DKR);b@6vp(ypq#MLF(ag9@R=v8)OFmMC7yXYMguU5=4)UqtovE`-3UG z{GM?D5mGXB_uiOK+j?2Qx7yv2>x77&`@L`8R?N^T=>}Liwe3um&78kuUoC}%9n((^ zt{b@R=L}qP0u)?7`ZK8y`aw;LbKThr&!4r4X8e+NR@|T~@e&h^*>0H^Df3y=P(1|V zl`_C4wl9B1;6;213IUA7R zNY_3Mkjs=+V&;cmK9HaAtyCtr1{JT@=6qX>mJ!l;DyU#iMR&CJH!JGamqs~D=8wP0 zM!qdDt}O3M`InRYAKM)LSJZN=KElG`?+Y=1%kNZx?uS0e?IRyFw44@2lzErXls$@C zw%3K*L_n=vsfvaRQFa!C$I$N31`Sx;Ef#-CAjIqU`5s|V!+IG`v2x#mQS>v%M&)*F zq~>a0)u})|>q}csmVLi^IK6xp`HuYgMSnry`s3ex4gSCfe-1;rbN-2oIReJc|NbIV zGy9HYbM5P!N7d~CnCT5B!Mp#=oJW&NyZ?vd@Sm2$P4vQx0#LjEP&!qgVR}!Giq2`? zBD4zqYTj|<4{4Yx z?s)PK1#dn#mQ9O?gE#Fc8g|wIN(nU^H)#X`KXbh;Wa6A7xi|?D8(1!dVuInC z5HEt8cKTqt!65aY0Ak>dC&OCVvWr5Nkl~p1g;M;r^`4!@;j&zJj-1$_tDNT%Y53({ z&4s2o7wAhSadW8}?hvc`1bUw1xh3exYUSkc0miYVi6Pgkp=q{KTd>5x>t^xO0vMG4PIwPlqtm=C#CUH7}U*_W7sZG&Gj*ScGk7QB5on!--Ij~eH{&Q)!_AXdn}&AwIK zq}l+~Mv2g7y<*%_-Dix*e&P!W_FiIN|K!aw{G#nVr;B&%L|5_fbxCrXEo8N@^iVdo z)t?7IwHJ&%o|BDnv!G+Coq{SWpxKNI9rS;&_mxpmw(Gx&2m%61NP|j)f|Al9-3rp( zJxUKL0wO3OJs>UJ-3`*+H6RTG3^fce#CdpMegFIH_w2LxTIbVQYp*pQ=EKc!J=b&H z*L}tBciquz!f#sBn@)as9!)d3hS}JaJlz`On6({m2j+4&Oxvwfy*%_Dndn3=dvhcr z=VvL0a{R#F%{FUwG(H@)3>Bw4I$WGt$QJ`+c=;ZDmK(Ec%Y&WOM?^o=kGDVH>Q6~+ zn|Hl%v?#Js7-xB->s5a>Y*Eg;k+_QC&t6YJUBURlF_8`(#tbW4A6w%*0V_ac-*7YGlQr|NZ30 zxSUZR&cx&C(Qgjt!^56(BUkey$eWyl4q93p4LR*jpwsYTYgKKX*T>ym&(|s*ff5*W zc(`J}d3>CGfEwh|VbcqQ;h6VvQOpeGY#EG^FwHHW!AO#E2orXTU4@?|PkX#uVvkhp zz$Wff52@l}q;dUjRbzKJwf*``Z>G|v%a^LZj#l`&f#+cZ8ShVv&fMtzMQX3N0 zN5u~;_%CE^=P^e2Nh-UJhqu-lmEvtP6%y>n@s@WT3vT5iOnCEO33Ay1AVuLpxslG3 zgO6S@ZxWakX`+LKRpHMD>rZlDa=?)yb6GQI=sK~`fvQI!gz!BZ$DMul`h!|Bk#`Xg zBq})*xXDjJV3s{MS-HFs7F!vTi$BUKxszg_I3qQF~t5>UEC{xtt>2yheE#Im`A@i8S?t_^XUb1kdf;tRZJZi>Rct*`LQk z)^T2)3EUo`T8D6Q)gpVUvL-L;4ZYmg9l>l3PP<|T?<2-s_rPP|riOX1v(q^CZPb** z;bLM#9|HwwC6fJ^Ob|Kb$4@++yomyR@uHbHYjIDWC{rJlYk*NXh%%N**ChrwjJ6-s zbSLrAgTsbz!{*P-P{NnX%7k{a@%E_Ft=$GqI}`T0P&hDr$Gq`u7qbkm?=giOy+xJo zl%zpztyQ0VR)6aMm(%`z07WsP*<_?-U+uwB&CBX{&$)ZFjiWGL93iJS*!x-%k(}#E z!|78GKeb0U;tQ^|bNG}FjNeGO{NasA9G)?3Qh;dpz05O|^qnm{lnT3;nKPOs0KgW} zy)XTa_@#Zc6X3x(g9qJ=7h~H8S*WHZ35*O{RfzZ5DG3spN~|^@xO!pxu|g(t1CCXR%eXIasA@{s%NirtiV@V&DU7=xk!<9_O}V#qy?Ew zU&VX~UKLf@Nb*!ZewC{pk8imZq}f*`-Y^g?%4!7toab|1lcL!W+;mwl>lWUh+%!a$hjq6k zQ|v-u*Q0&D$~*bs;;fElet~x(gp&X~_K|CmnhQbSXlJD&*f-|0Ns5&qhI6cF(sVwd zk zR}Z}Q0xK74w?C8x2d%a^C0BX{p>sh_3X8oC@s}CndW+yDY$pcFyd`Z}iQAlnb_L@u z{r$kaouzg)0|vc3f4d7W;Wc^3@s9PlGv}(e9kN+8SQ79Q^HVLX_>n0DtX5vA^;g%l zF&mGC&0SdosM|&T0(@}XG%CgH;1XrA`TDRca*(2d-5qf1tx=a;_vHwU-Ss@QzFOE7 zU&$QxF>iW&=}B`vpWXGE5<2vne(*$h6N)pY4lu`ugh#I&>?9-M^%;ltBYb8E@2%cm z#=q4JQUvd7!q6rA)f*?=<1Q}OJ$e1k?!v6T`}%LWEXw#D$D0-S-tSi`vb0FMDq6>q z+*(!_7-I94C>v8QEjw{ts3<_V=h}If-BOA#VIO?df2?dyzGA5Y!f{MOP+A&U9LrNu zJhS|S@H`(1vPbP!c=T{yVBV!P#+-Ycq=M8PAI}g%9)F5M5?_=*#PCSTZ+vs6 zj2+i0s|&UWARip5amYol8@!3dBk-EozHyRd3Ptr>?MBM3kTl@zL13o-k5 zc=g`Ubt{y8WgPRGs8i#a0C+uw;!rXT{i9??>-;YACqu)5G{(mZ7VK4vQ=+!DJCaM$g0JbRdtfUHv!V1(y#lgn!TX`bqeS%^lR^&2mlu6F7rSA2q%i&3%}S3xU|3XNsDLf#8v6p<8Sl~? zY?oElowqWCA5hqH4+^_i$#$rglp}N6HLw(Fp(eFdYl3u6LgdeA?1VH{N*;oOGbT_+ znR)C%rTE@p#}iEZ*UkIVH1-Wj0&$A@odJS8aE~Kq-aA)|%Y&p~^1Q~-7b~J=gGqHY zqo}!y@Y6O9zRfB7>+~>9_6Od8v@4PKtHgPS$y@esRa-$}%V7>s@d_I|{qH`f1K0}F z<(KE)`mgbKP zR&U?Kwst}|^bdM&Ns9lZW2MWc*>b(w$<&sqJy=ZIJ2WlpEEM2V&c~RL z*SJ6eUeN}?0h%Vc*}n(o#8ti%DmM8X9aPB!4D3qG@{oq{%>oz$SmJaSVqswlrKm4O zAZ@?lSOwmO&gw2`jd;^lZWGwJ&x4a~)(JXSAq>hqz@)3P!6v~jFeReYEBdVA89Q$V z#QrMEo`z6ocM)D{O_;Hn&M|GVTm7zpY5N zswGsRKm`wM`pWBQ+H&^NzyWPWo~J+)-+JC4_=8G?HL+vQJL!Z0Dx`~*j9LWd^yi}b zpY=QAK2)x1la`l3jZCloN1}5sU}Ws@6)nd#K6X3sj&)k>?xu%*!y}elM!B-@D6X2$ z&q3=`+30~&uFUf|@#SN^!pij6xq^Dz{$)?l7+Gc^sCCGSuG zslVFwE>1qgh~9G-N46zuWJ7}(r?BjR5VC;`Kt$Sq=tFp&#S7RsGHm@Md*WJep=1R$ zc`)tz0K5&G*M^%~9KV2;mlN_H6^g7*Zti;Nh*uyZ@M9Pg*WZBMMR4_RE&Np|{ws7a zlQb+KB;xMX_2Y212H8{Br^ilrVH-fX?qrDsxKf-?)G1L47LN)K-%Esho#YS_a^HA# zpW#Jy?#*Z5n=DQ-{;{SEU)L^Y3ozeP#YNibJ90W+LWJx-6@Xoatm_FG3Bk3eNA!El zM==UZS^l`7gZKRHAJN9&FW1ECtz+b0G@2$81kwd}wKoTf*jT;{*K;1`lhO~i~IUFe0rz@)S zB6#b0A$+Xn!^qI%msW+)zxz=wig(_QSKo@QdPzz^RB$q&Twp)Wo-IV;Dr!wQS~|L2 zBA}suUf<)He})9%MMX*LI#E|pS+LD5 zYzo%Qv&c8OYMMordJK6Q$%VqiYig}uXDZqgQh2lA2JxV>H(a(3dvgljv2o{JLRAm2 zHgk{UN3X!XTE>;UV0=5%+h=Nu#>F$a3Xkg<9=NHBuqbOIASAlrbXeV)5b8D8ms}C0 zYT#{@y%^)`_ZB{xsCR9HB@vFrM1BGO(K`uyX0@=l>;^nv}B!zYn;d5C+ zsHE=*e<&vQD)k9M_iMAuyctRLUTdQ;m#l=H>q}Sx)8N~n`ao?X6>9Gw1*io!?$gng zLRx%OQPH?iP7~fSpHq_ERs2|*tkR^uyLTF$e8pguJfg)NzMmS&-69&5W@TO1_kA2VWN&%2r9MUX$=LP-x+Q<*xeq~lt+NyK%vSeMScsvqx8S3_P(VL zRXiW%mNH3xJa|$Jb3JYGD^nKA`4mUmCk{*BX@cv!On6g}*!RLCC({(D=~~2IG#Mll zFqDUCaEuyOlMwoKT7PV`Jp*z2B`kaUxVC4p9T{*6yeLA9w<>%XeTiZn_?~-Uk%P-fSYHcI-(7^+I%eA0Z^ibgk9}f*?czW3sJ3t}?}3 zBhW#ucGsBqc>d}qHFpYAq^qimf)mA#2)V6r+FQG{mI(@aNc6EVm3Ca<#Q5Fdpcc=H z`69>7F#O#~*9xC`SV?A!3>dfPb%V0W=pEEWOXpXVwBHZ0=g-~p(Vc?gr@6pR7?XiV zV6)PzL#xa~zVnN)keQF@MhIG?OqWf}IcI!JV~IG#-F&P~r2M&Mm8z*;zZz`3DscpW z&vQ@AyR!#E1ixIPB4)X_=kZ(dn1?GtKBVh{!(5NVZMJWBNF=B1TI`ITIb+{q!Y_Cx zU*#j06^7M22x86Sc@;0rLgAIU{&gU0q5{VwY#Idb68OXr($(8Li>maAxWoLF2`Uhp zM!P|+R{r6>i?K9^2hy)gD7X9e{^JKS_eRi38^UDKV?RYc9j%K{IF+f_5b_wEnQ%Y0 zN`yH*QAHHU3TZEM6UOAAlv9Px^y;<^Boyw(yrPa4Qr_O(0>IBgIh*FzB(-l=h4-?HdGt2a>da&7Re|fa$`GbO z7UUAqyy`<-;XHOy5-X~4qY{;MxEWbP;XzN5hF;aFOPoVMlS#52PKu>2b=#zgd^9f5 z-MVelB=FDiV!d}&iH4XZG;Z5gB)fT?S|oKhAAtob7wp!J{hk5SdR+ZNjI&DHIr~pY zXt3TKxXGB4x5soJis^^!_Z5+FvlpA|@l3a~N>^59jp~p6SgoN|O^D7?7gXKQ$BnlR zkpTO3m19iE)R`wtkPEJl*yza^;y%oq=e1U8l6l?etyTnhC#$PQmePeQ&GHu<&k9=J z1a!(19hY+rcJScor1`sO0w8mdr&!)wJK}0^q7&WUo1m@29DcRiR z52o%VL7o*La-3^T1*&A9kmjADgch1`hrcd0wEYieawvFR(ju()-khayktqeS1 z<$#HlofwSE`l2v}`L4BK%LGmbc7J>yfGGzkXbfCON$h@wTB(}jgI0PRL8uJwg)1IV zZN*`DSZoplon>qApF~j?{)@;1*{rZ24K_RW-{xihSZe>+ZXpf4!Pej>V>>KVguF-7 zVRZJTtIRFKOP|g?lj+Nr_@V1pgvm?JQVK>A=x7~1*yn3pc9U&F8r62$`Ysz+op>XQ zZdSc3agRrso@*#dP)4m#VcgY`g4}?xfx`$=eKjUbbXzR*lKCr@qd$TntS{(}(35S5 zYCJN|YScmsDvc;iHbe_ex*cr!NVzv6u4vZz;-Z{x`^De7+Y|a|KhrnC?hTx_ZYmIQ z!jItB^tJg5S8?!(8>7#=Tb-=!+D$X}JdGac4R+v7d^c_)#+L5xQ7f`f+<0ijvbjat z-xZrO0syrV-41GqAxB8ltD91{B<8ot6$!qZ>fg;#%~F3|nG`0{Nq=vhCg3!Zc`nv~ zkz*j$z6@iw!7MUlkX9pkvz(+PA~0Z^ux|G?OXXhCRkf_A6uafg+3;dAz*g&6*@>4?dD8F2Vl-w@hvW&;U|7IgeVV88t>g==qeeO! zia{aqt!grEYZT0W z0Z-kYRz7!{surWW*dk(e zfAO>ZfpcA9Q?iur-tE8jb_}ud-+V}`4>l#QpA^-4yV$oQvloW(mitAn7*oKa0#^#E zGZ}~AJJIxNK=pS_20qbLtX1X=4tfrs{-98-*{UmH4~P=gF_(zqc?XjOR604t#Re>^ z3xI5@)&TnQi_pztgl7a6BTE>PbY#Xd%io{*%Tvc8N9I{uX5bWiq)1(N!hg|TEB)r#ndMOPnIf*{q&k9U&Y_<(=T4^-R^^YhUY(b|$LH)a=e|QDr99t;VZ60#dWzEZ(FB8fnrj zPgZ|%_0FCB^ZggjPFn5s(+-xX^^(C~_#|I^U71cjyn5o98L&TgSCTdJ z&IXPSv&)gmNm$18@H10*d(ercf#%h#cqA#!nou-q6lvGpLt42oxl?=TP5$Gf-QSLx zT>{NKbjgAS`qBI?*+?I5a+M&9mw`>7%S(?EJ(KJp956k8ATR{J_Flxn1h$SxR~DkJ z8tc+#LZr%it_vLM2|5(awK=IZX7TUQeLZTJGZ8YHj6oPU#l1!CvnI*;bG>^lE7|Ay zY?Y;Xd1$JFtxu(`4xJ(DqPmM;S22NWf*DJ3l5zBlqk#{W@}2Fz+X)X1)%NlDtQCVRGMY0IMgPHmI@|ZutVfL#K(y$7YH-^OJ3W{k z0xpTxG@Q>P7;`e%tw0ragsNIDMQ9c)M!&hr5;kA@-d(Bh6I}N(tqk;nAW6RAGsqX!Q(v8jsQ}PLbyt5qqhB~?r>3yg;Fj2c~TAZ(UC%k29M%BO5Xi- z%cM>3{nI_~cs9P!z`qjCKMlsW0wPLRxS;J2fL)diX)l$wd(r7uHW}C;&?*OE-9&*`gyIE?+rfW9U=r&s}HH+}t zD)Syxbih?LiU#pxRAozjU6 zz0(xlY{fI6+U)ofC$QmAOfy1i()ASAtM8hNsPBdd*?2x}yv#XtCQv%fQ@#{TeE((} zTz+-b5iqUa2~k)(iA<4w z0k!H>w~uTU>fw6JnyNJcuQ{>d76$MEY(>{a#Zbi~Wh?k7o=2r)H$Ev>yL(wbe!twT z0r*0(s^}%EYd;lp?QOdF-Ck(fupm<@EdMIr_&C!Kmz$|Y%}aF(!AymFPsAMM0+|pxZ2d4B9^k_Zh*Lo?WIrZlLQP7o2-XxQp{h&v}GrE?{OuOyaR+LDR&{T} z;QdS)RIl;mtZt|c;n{S0>@kmuV<2oNZ1iK~%{Lglh`N_E)LFu_7gA-+TeAQVF?)rs zj>x#MPNki9mUz0$o*!SZ_Xw?MCH0@-#XKK}1I3ea=y%&@o0q{2>?a4=1#>_ptniX+ zpNZk?Ft^u7B=-E{ZsDWZe`22Zyl7`uZcW(HRHiZ!MVx!1U`EOlr zQMNx$x8}sFrlf&hle7!`{oca5jIMYUY^#i$AFs=5&!IWatfN2hYTZX`eYHV=P0^_exK(;prCXe$By; z*}k#n8)ZGHmd@maIvV%ZiqDk=I#K~70m9=YxhTdY3Ka>`n7zHW>Q6%zW^Gqn7eGmv z`#}A~c8p|g07c`77Qh}m@Rc`jCLDtUx!}s)#QM`BXLr;-kgVW-##wbUH0$8x&`t`u zNeX-V?&lj`zSK8KJiviXXQbs&aoDVcic?n?oso!96mjr1qyuc5`dn3MIGb0H<)n2eemU_MUXJ(@Rc1vUc`ycL%Zu?AyIB1moX3X z-W}n4Tzg!D5=$5J39^HZ*|XPFR>6Ge`2S@2O$di|8|u^@UP|kU5NtQCl4W1&pjA(u zHa>F`qu-GRSd_b)jCJ2voSi5A!s^0Hh3$eETt%h^qh)6Ygwmy*9tVkJ(k0Vxnk=oV z#@MBCd8zT7DLg+IGyzB2EQOv4AQ)SCh{McEcL+9+vmW?W6L}2ZEFHpmS5t-8wh}{dmtS-H2qse+B-ToOc@y!2y$3^*%qf)bPobUj<6G>uR4jLs@|~hLZ4=PgXUO zprV)6zIwbuKDh=eJ&K+DHR{*V)A3qU; z=Sw;UC0BO3Zv}NHjaib%W<`|zE7#96Z25~o&xi~h+km(X%zW2|5&AV5civ%kZ8$tu zt{P}8uWfxEyM~AGm8d20vum?U z1mujpubOxeDLYhq8H}Sx_F>c9FGSfu|K5Sy_>J#9;|uP$)C<+RorJ2(_)e#2FO1%a ztZtqHz#_J9Fs)eKWzDBLjjeY*Rw2gvGVch3%3eBqkJGQm>uek5*P9PkZrX@~B13pN zMhi%SNT#@CJSVIeiDg%>nJ3o(G+c}xRi&h$>p@PbboA%8wcS4?Tdl0`>D;zc%;^#SB^0O|JK7EQ9RDMvXtz8GsZpC0l84j?Vg6?_`mDXY#mZ*j*8Xt3Ds^e=bdJeb#hdJM2#d7GY5IAoqcSg21egJ)3?9g3<1HWN9$Vk^Di0xU zK|9$31s>*PBg{^J{{*(mEgl@SQE?%$t+D^LX5t+9m47wnHvu-#`sNv3W^Zl}WJFpf1*< zJz&|>p?L4QU6P=^FhNB9snrtut4FV#vk;$^w!I~|=88oar!A~@RdE@Foh;Y|s)gG< zk2aZHl|PjzAl;-{`>1SgD^(;Pn3B6SoNmc~dnPb}_dz*{qaXW2-dwW_a2dq6z;N;B zy}2YG=Wt^TmgZi1c_ergWM9pPiSXgS!9B~xV-vXQ^S_nV;yut<$P4VSk% zUf&d;Dg+mUm1#}>jn7!^MAAIU5)ro1RiO+tC&J?S07@)+8Ir?&=y@s+AbK24M1HmO zrIK@0R;r+HGjKN9UMW!5yX)Je$ulUlR{CE7vl$brY`M@IY_j{ixN5clAZ0-(vPJ2J zGPj5%clGheVL#)}j~5`;`O&k;ob8?29b+Z_%!JQ)U#;W$cm31Do+a3pmw?wYH0Ik` z8nSZ2!f(*s=d?8rK+jJos%ftmw9GzC!7CIh2(k#Iad^)+;ZEPF&4M)K*%GLv%()y` zxyb5%i9cnr^WOL6oMUf;&x2zF>##t|pYgt#Ad>HDY{I%25R|rQUI>{Z z_dlI?=d+q`=AXb(^?RQaHzlVwcGn9R&%Bk3!sADuR;C=W03p;pFw-#vV!m7?{lzJ9 zDUyZ4r%;%Ck5%loUrY%UzhznOaK6G(hlXH`t~}G2fNy=KIEN*2YrZHEvY}fN-leKi zJOXBk@t4*-%cxOyrov9hdR7b}vTN&s?ATS!ql!;g4xg`0(c*JvQTjN|ZI5M|Yb)PH zD3WgvevGcXij1pnwA0Bc&nrGaHHwOh3AQ}luD7+9&niIddNh&ot+6_OAx6?WxJ9~7 z^t}0sVobbDDZlu%s|SCR?-Hp5ZQS1Uj`oLa&#@g7mmAAAopMZ@NlM?8WHnq>tDew91Z&qfV* z03`XEAc{!8x-DrFjQW_-U0F(dPg&(j9l=-5zo9sO6K#AW?rS!gX1#mx$BOSSMQz@& z0IXbi{G+#dNuSjow?%|3i!UA2x=W z+GBu+ z-;Vizhy#3A&>8xZt$*~RIuuYgF{h53;$@!W!7GgK(0>P$e6%VV;$~&w3Pr_b#jS)G z=gQ~();!%>P&3G|JFEJGeCA%X@P8EvO*o_ZF?t(9lLbfmbh%vhq+1X`ICd@fL9nP_ zNaZsWuN?>vG|XJolW1>rpJCx~*cR<2%94zuVkxzbW%S<+9biyOt&od0Cho=f-J|FUZ7yBy?FVlCwPH|CG;gFpMq16* zW&m@KV@p}@@iEdj3#h-Ap!^joGLfLW4YH7otK{F)<}87CF@Cn2{Fr1{2ibjE=f7)0 z`&(VBkfI+HkU0u!}Rv}*4^gzmCHtG9?wo)K`|K$t@#L_QN` zyLaTS)p`v)x7)JUF%=N`y(_x#(H8n4hW4i?_YVhq%p|dOvwo~)E*Lcc_jF9sz}9VA z2%~k3je*ug+)I8}aRmkR;9n`YuY;6mr0>!Bgrn}DW4`D8MXEf{amZNifaRhk%w(voYm>krCHs!}Rnfv`kLE*lE2<1Z-M@PP9fe*lw&j z_3JOY1kix%#%ic-j0Uf!Ob&h`wdtAIuKQ__>}OejXqnjoh&++ zE5C-ib#Vbd&!Nawadhn@%-P~~Ru*T*c}@D;A4{D45}^x(rj4UDh)mf$EkeHctg4Vx z`38WrM>AJl{Q3Hk>awT5Hc-raK_Z0i+R-H9Zu#(QX-yT*~h^*(WyhBZJ~z?Y>ov4L_o#SES|^e8^~D{{CjJDdMP^SEVNKk zdToT$2aK-26wGsHFDV)~H)!Tr-ojXG9vuLe;Za7o{a4wZ`jpOW1`U%EHss5j`EZ;Q1T`lj-{o9a)X zOE@lIvu1wQOI)!<+OM|XlSk(g&;Iyp6CNb|)1hvJNj}wYUXTID2`aEvOUzzB+%<(^c_ z-`@6LXN62Qz!VHKy<01PXNUjuKk#)>xFJ?Tsevc?uk-BRX{V?bAy5>6kw5hLt-aqH z_n&_im?B~Vh_G7iz(oGnD^;ZA&uZpHnUW?Ef{c`yKvglXx zuQCCY2YRpP68{an^!thaO5|7L01@~KDT6Wo;ZXiRfAuY8c%PyrOtE-sg z)yu;~lUBNf`Puop*?B)WO3+o7ArjKfIBm)SuZPQ{(TSpADZIz-KyQ3uOO6$OD05C!@=}|Mwq)IAA%J=esE`f`>Q%{pSA3P zVk_W5{{8132u+RY2MW8```=3fNGoFqEN9s3FdF?&o>b-`6g^wz3zFFI;@?XGNE_Y^ zELT|k+?M(EKTvzPXg!unDk+?``AqgdP`k`SUtoD$GfAK#?SG*5hrVuvDdNwe8t)O2 z|B*0g*UNp`@e-u|1GS5y?K6l57}powfHD3@!k}L-M>C-03HkR12E3XjMZkjH3~o*+ z|3||7*WmxvPW*o|`0yL(`oeB9F-6niH=Y_1{?C?aPHyf@_F@}dV~-KJI_nj=rTTXZ z9tja$b7Flp)C4%iGnvBOngmOLhzb4=odB~U|S@x z{txdWly+PtEOyw`DR z@EzB)2d4DKt?HQy5T_ob$T^ci-t&gH=!ADcHO$g4v>=SQ*Iw-7GcBU)%&FAVc z>`RiMyp%G8{tATxWlbX|teK_@o7By}kTI;nnRmW>Xv7rgvnQV6M-n!jZ_V5`GrlUM z`tAsmUbW?Z`yfQLWjaljy&%6lEHL8m=ghci>rkT@@n_&tAwQ>WPKhLq2eJA!1#fRc zguML?pE2oL9lPO!#kB0jvtQheB|rS-t3_w-YgQP2cG}`qXjJvXks_~xGmz-H`5wXM z^ph;dpKSQ2jvX;8=pC1O6^WHPjq?l0ZcXMt#$gD1myrtMHu@n*mT{)7ay*T;x?HTU zmv(@CKi_~rscum()pkcpNp&bIUc@S@jLO<<%HQf>1sEs#i=x2_vi$%qNpT4 zQ&cw=n7P8C`wQ0Vx}ID7IypVgx0gS*tiP0k%#xs!tZu1%AOn{ zghJPg!1BqFzUho$hZE3R1AT0LW7|A0aoDOik+9P+<^SLRiu*|#2b95RaOdEE! z%g81iI%Yx+5VD`iD2Mi1wr+CXsz*Frh}O_$2-zBI&n;SPLv}QvDk_Fy#V^hd*_m^n zgc>?KEzG-OP&Ff;ehC6LE0$u49r9+WTgKI07<-hYVaSgH(*ghcTc@wvoT=kd$I=|( z?_0Pcu^ymbNQK7s3%K;g-{w3rOr9ngaF|Fl8?jrISqR11`tcA7y;amR6To>(SBVO> zNLzE&BE8a??0sB-?H9a3^c2GPDmOP&Sq`mNK3zcqGY8z}&P>&MeJ*2(FZLESeT{}y zb?xJe#2`h^B-k2`2$&;8iinuwlv$t}3@iSD%!d!UeXcG^jv^pR zw;X;?DP8-R5s~bCFR5ST+--}`MfI5CyL*R&%YCuQD->J=a(ra0fjVTx0db1aLD$WB z=X!G#x|ez!^4=%Xuee(ecCb;x14&$(zQbdcg|A*~rCUU|Zh14msgEOK*X|l1cM^Kq zb4UAxtls2j@c2lrj)(!;6%s`=;&Gx0R=ya>3L&QqXXN$@e&4EwHna4G;cOMPp6ruh zd|_UCRl$4i(z|Zp{Z!@drPC6L)o8gdh`OoW@FL>v?CMj($hMwn=BHs}xR+j^OkCgs z*^DXRuyr1+aKHyHj`KoeV)3aRlxkOYBv(UcgI~=4%wKeiGFgF+xXOG*JMA-XCV24k zwj zyEpL~kUOrpZ+Xqp2^nXQluWKUWD2o*@f~z1woZk_^WB)`25{$%$xlRL^?U44>e4)C#Q z`FYef3=mGnI#;oeNa2$yZZ~|_UK;8-vI)*Rkq`GME6h5!v%dAaB`1vDt5{k+GHu$u z&rGE1!Dfj=B%mTwpxZQ!NRr*XU{J30C7zh_Z5V5>@7-AwfLXozs7k7#i|(zCU6u4w zx^Cp0XDv^w&pG$aSkLn^5pFMR)sGGSpOFJSoG)J-tgMiUMF$=4H;mQHyG|y4fQsYJGjBei_JqoJY)et(9P;N23jeTt(ii;hw$Gz`g5mMcG>+1Tpm!)Pm zJ}p|AaTjUR zP89zmM!QFYrt-x2U?DX6v$)bsh%!vm#{E8EBMn_2wb(G`lRd37k9OwRI%o~KiEKX> z@{zu4qxP!LvQcT@#;NqDNPUp#o=0lwbG!F(cAa%w3`en!^yYMl^N{D97!X;Xpx5u> zNgeMn?BzAS)M8rDI8$o*;(Z6>pmKL^SwW)NCHemHH^TPL*|)3El)}mj#hQ9Gon|9@wRv*c zO|tsmVeH*MG@gz}d^n0S-Hou&(^}NNUubFkv}NGw#Lk^JG*N@x3FR@g@CF)|gyvuz zYQbaRnr*`&F2JE^osu;kR#ZWUz3%(nER=*d)kP(#`HNZVfbsCzj^TXQCX(FH-kxDr zro_CyuXsGpyD+15#IO4@q=JFY=zw6ZnKxTc4=K&i_pOL{s_SkM9z|6HX^i-D%_h1z zm)l%NrmdhWWF6P$ke*9{-sANoM*U3kGx|m=L4V>ij*U$c z_9Zyv_D{bbxV!0LZLZLPSiCMl#JpAOeM%L5K11Kopvo5XLNy!zz1qmth|hjhEMEK- z(K?`>%{q}@GJ?@rCFSICtrvp-P^ zIP~M$OpWRK97mBF6}0B&S&T=}shOF-7hY95PvT5G< z7RgukMWsiwdXa;3c(B{k`mNRAr5_tk^Q&9#ayY%Xmi;}e(G^FluN&W`ezC2lp!7j(&Put_&YE4Q_&)b);Xuq!uUbp9$0Lig zUYDxr$LfT#Qv zdV>KsP7B5y{eE4wcff09ydbab(kn~Nyd3qs#&#(`E5l~?LG34sGClTac#||w_IlRW z>A@$;uTt-<{`f(n&lR{qpES%+-C!gAg{OY~LArHYZf01if`Tl>61!D`XpSA01XiWwf=(5#C&a6mg)(+n5;+DwZ29SDy}?J51EjX^??0)bB|d87u;^JiE0B7PLDcXGi#p`|vNJiie?2o> zHz?DV`XySB%nkL=%bA1GyE`;E)AdG#nIFw+Lc|xX9@Cqp<=ka^RhKQB#k!`zBdhyo zl7Rl`?eVmQB=Id&=@Tt<`@)dsdpDPD^)N%9$sYXp>H3m|=rd6l#hdx;lyf21O%);~ zGulU-4N0|7Hs-LBloD=ff0+2 z&DW-|e#B}{!}=NCe#e*Qt+zj;o|}(W2R&q&-+~>>&H@wZ7qT zyqf}ZneG~^l{HjIl^^d*KjUWU{c>C0nGa4WG){eYk<2$@43dXY8hXwuk;7P#;RA!BW0Kkvn1Itz#mcp z${m94g@3*C&^+y_7F(kx26CJ3)8OHb ztB9q>;O8X0Wm7T1t$phQQMp10#bh3_A!LmxP5s^=W7NaO#|$Q7i!Nl5oQtoaNf{!> zOI+adlFWhcAJn(VELn++GQ9Q>Rp^ndAF!fwRHDdR4smvy#bpHto~n7gE@K~Y+=sH? z!M%~ewj}lwBIpd|JQ!gu;#2(Kd^M5ikzqW|p`@)H^^@pF^bNF0UFQH++y(KsB^IWd z_o}vXc2wgI(zTMDC#DBhZcrM?D&iHd0!iRkG?tIKkf|fpPu*#2)s|=UYg2DyRo`q+ zIhe`u?Rdeuo)G2)Kn(qm@f-I>Z*o+6hE z6SBiZTArtgtQ)E`A3%Ccg2&rFZ#u2&p2HCCDo-fc#pCYrdjHV%bs&A9v*8H+##zS& zQd3s0|18C9T@?bO3*SKh_$A>9GNzW+Qc&_-YO#@v(zk94i*v1}bgAJBh_-$GY`eF} zbbynUQXXU~p_ziPPLry@Hq+~T=l4f3=i$Yjm6{GJ&V3Y31Oj7IgH~RN?z+s@H70M49uwC`_PY1WB8lU*##MbKLu+cH>e=zikOYYN(?%w5|`%xT^b#WUByu@P+{j+iImCgEW2E%(& zAT5mgDwX9u^T1K(=LdH*+Fg*00P!ud{ma)8W5>*|SwzMzTTc(~TzTgdzzW6?oBxo~s ziqqS-fE^IsY~P1u|1b95Ix3EC%@@WcSkMF~5WH~<4k5S(f@^RI9vqq=!Ga{XTX1)G z4IbPZhu}_Q4YzpTb7tn=HD|u_|2J!~SWVLnUAy+K{X9Rb5~txWq_Iwkq1ZM=LiSBH zR;-fGHZk7hi^guH;WjuwqubF%6t0-TkbZc>|FLrui#LTdezNYqtmHmZ1*E~yPNJX; z2_QaH+h&c9w5Dsp#e^)%1saX92|4eu8f4)Fn0-u$VMSBq2M?*RdaU|8F2^6LE}s!T zrYC#oHf!rjbNtby8-MR7#2+?+Ae43{9nbuZAXm_0rW^fdmI+G{!fAa{4d84D=?AK?zmieg%2C9zcvvc!uDSy_=9&rKS_#o?o+Mkdt{H zVX>ao$-`U{7~YZVb2y0eu0(~qKZRC^b}kGdCQ`Nxhu3DuGpIB7fThuC&};CJB{tyN z9JotH&jH1Bdoce8wya+rNP41v^i(~U=yWQsnaU`mV1L;4Ild60Cnm+#LDO|MMqF2O zK?gDooxAw&$9D>fJr7ymJ9ZV|U`g1mC_~wWCi?lrAV>*wOs(VG#!Xb;C{p_Sw2^9w5qOq$u{F~M zl@9=)@Y3N>ekY89<*a#Zf1(O21mHTG1EA1txj_UIr_aT6KbzrjD)pfidYH7*cl`E; zqLf9GUkn~M(-Nw3F5#IS0VxtDYhV2OucAcOy>$Mpc1XTJlIv)x-#i=HQ4B5d0QBF>bY*w=?y8JYZTGjjht!j!@RC>$Clp@h z3vUjMCmb;;Jx$+7QGR-~Yd zmtoGn3SC!Ih25px!d-X!Bb{zKHBn*Gb3c*2C3NK?@FYxtE!H(+!PT*$la^_Tv|EzH zw9#qHj;ogoY&kZ%pvcsg#o+~k9NTie^_m-e=N%0F^IOgV;=r@)JB4IBeV zFUW%Vxe7fWQeldDKCN5>2kF8|uZN7*+&td-J=gM!V7o_-8I+c6wi835lU#2`1+sT`Rc zTKk(^oq$4vY7KqKNe!DE<8okt>r#wc0Ig2w?p})jVXgmceb3?|IHQ#fclPu?`AtcN zYoW;kDxcc*`7;qG*b+*YH4bH)R8zf;m4*Z>TQm2!Pue0Yq5T1G0uwLI1g!g~4m@d4 zW2+EZe@0Mgyk4+Ha-3OZ%AT#@5I|?WTveU+PE7H(sth#i0-#H83s|1y4JZJ~SaJ2C zS-z1V%ppcor}1-8oc;1%oH{#ng4OJO!=aaCFY7&H$mO&3TF=s-EnDD1ltu`ckKb;8 z#afKqQH^7uQ-Mqj-0+b%W?=ZVLPhFc@&Z4C%I^CigkslSsiQQ5rL?O?DSWnZ-d3^r zQf3sHvMof@MwjPRnb|`#vz6v#g=aGqFt#FlS6t;v5_b-o-!dXp+`Iu{>TMOg~2>G-GRz*kF8R8A_cMA4)F`DFl zh-*TS7uV%98+@%S$|Imi&r|AU9-l5`v)8Er1o_x5nn&b-N7UprdSZgQ-nb2%Ei~cY ztnr}EY(Fc8vMfW^LHK(Q*(6TXe5I1r}FhQ46>@$ z>A;a5uoW18T;Q}BchZM0yAdP==xQ!DHz*vOSxOg!SswcQ1=j6dxb`m8ccSPw(7yvomAv{!LAr; zl|=RkA#U!Y{7JcLk823^`d|dJ5voU_V(&s6N9By5>-eiW!z2t02VG+nf zn!DWqqatV<8i}(mLBBzo>~!a1XQ7d17EBc3a<6M*i(c$^p~BF`G=Z7SALk5I5A5*X z!yx_I(Jd*0{A$}-`CFX*LtxqUcHAi&gqh)BMaSW{5shtbN0@Y6+ie=^Vv>Q z*>!ydihhG}?L$CzZdDbyzt)eoK4bk2%V5YR+1ONzyJlxq!xqh@*-}j-r)lb<88k{1 zR-&gY!Z^m39H$bJdB0amho+cR|7)66;oVzrvj$SEzb}!y^*BC1W%r=JTh!QQkJ{1} zWUX>v$}o$!$drGZ{W&;YUD+iiT=6Eb*}Z&jrLo>T>|4vf@0Y1Pa7b%##SCsRQN zv(Nt`y&|zhGPlTn5kBGXA>ZK$zBNu6;h7uPs|2|C1Vy+QFBut4GY}jSXV8PukK$Jo zV(g^HF^54|(g#&PC&nQF!4OjJCac=jn=9#Y=hOm;A+8rBoZ;N@IpqE z3t_g((Y=c|=jk=WX3mQrNZr{^87?v~R(U^#wCFY+h)ZL%;o=zL^K!W9Chs8fuF|NC zR)PQO?6_SSD|~(z;!;uk;flhZvtE`;0>2~ka1VJBIY8aP<$xYFuJ+Y~6yyE@p)(x@ zNNb&?w&=t6tX9E0Uc@8bLwFn0WZ1BibQT)4S4CjX|4rk|-%3d6E_SDOlp>Zdlu6m5 zTy~kkWv(X%V&2a8Yc#H%n;h`RsWl8V5He0xn0wR<*6*5p#Ewl(#n&$8&q?u7E5OS< zny6X@?-uiAut=wFLY$^=x{ea`dsm^DL+=<)-^yCw(q;`})#1d1vnK(LH zIVP>Ef{EgIHc|(&mXCABx{eFGSGUsi8&^hWiHBtb5Wf4(_!OsGT4rUkBj~%|8_qWg z-`+}J95P+%x)Ll-qJo4uWO00FncT`$DDrcSXP~BuG6;^;U+j}SV$x%+BPg8p;7H3c z^JFWGwb^M;$gQuOW&Z}sNfDAb)5tkBj4L$sye`$1=AN5uB8`PcxgIb!XBaXy3U3&K zx27~!T7=^`B)I)I?V_BUpvjTI6P68M!>9p z%}qRnL~+|CKf4uY>r4zex*nn)xQZW9aYJJG_G7O7(D?+znE&6(H7ZEi*6Z@^l|tl}oU#!@Yznz|(_@TIZbE_pQ< zHWC#kP7wEiY7Fq|Av}Xcunvcl(3vbgB!alCYE~rj zFQkE;!x*>;yx<{Z-Y^=D%RL⪚YIMmUP8oFu|Jo+q+~eBH(Igg71M;fu3!<@~w@ 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

*1xA$mRCF5kWU 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ˀ#f`Q`Y}O?6fi`wEF6ca(N^ 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

UgTnZfKU*>z6sjo6F_Bm6FVN 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

diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 113f9770fb..3a37606851 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -1,6 +1,6 @@ import { Component, OnInit } from '@angular/core'; import { TableModule } from 'primeng/table'; -import { FormsModule, Validators } from '@angular/forms'; +import { FormsModule } from '@angular/forms'; import { ToastModule } from 'primeng/toast'; import { ToolbarModule } from 'primeng/toolbar'; import { ButtonModule } from 'primeng/button'; @@ -9,10 +9,10 @@ import { ConfirmationService, MessageService } from 'primeng/api'; import { ConfirmDialogModule } from 'primeng/confirmdialog'; import { DialogModule } from 'primeng/dialog'; import { MultiSelectModule } from 'primeng/multiselect'; -import { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms'; +import { FormGroup, ReactiveFormsModule } from '@angular/forms'; import { DropdownModule } from 'primeng/dropdown'; import { ProgressSpinnerModule } from 'primeng/progressspinner'; -import { Question, SingleQuestionResponse, QuestionBody } from './question.model'; +import { Question } from './question.model'; import { Column } from './column.model'; import { Topic } from './topic.model'; import { Difficulty } from './difficulty.model'; @@ -20,6 +20,7 @@ import { DifficultyLevels } from './difficulty-levels.enum'; import { QuestionService } from '../../_services/question.service'; import { forkJoin } from 'rxjs'; import { HttpErrorResponse } from '@angular/common/http'; +import { QuestionDialogComponent } from './question-dialog.component'; @Component({ selector: 'app-questions', @@ -39,6 +40,7 @@ import { HttpErrorResponse } from '@angular/common/http'; MultiSelectModule, DropdownModule, ProgressSpinnerModule, + QuestionDialogComponent, ], providers: [QuestionService, ConfirmationService, MessageService], templateUrl: './questions.component.html', @@ -83,36 +85,20 @@ export class QuestionsComponent implements OnInit { this.handleInitData(); this.initDifficulties(); - - this.initFormGroup(); - } - - get isTitleInvalid(): boolean { - const titleControl = this.questionFormGroup.controls['title']; - return titleControl.dirty && titleControl.invalid; - } - - get isDescriptionInvalid(): boolean { - const descriptionControl = this.questionFormGroup.controls['description']; - return descriptionControl.dirty && descriptionControl.invalid; - } - - get isDifficultyInvalid(): boolean { - const difficultyControl = this.questionFormGroup.controls['difficulty']; - return difficultyControl.dirty && difficultyControl.invalid; - } - - get isTopicsInvalid(): boolean { - const topicsControl = this.questionFormGroup.controls['topics']; - return topicsControl.dirty && topicsControl.invalid; } openNewQuestion() { this.dialogHeader = 'Create new question'; - this.resetFormGroup(); this.question = {} as Question; this.submitted = false; this.isDialogVisible = true; + console.log('isDialogVisible: ' + this.isDialogVisible); + } + + editQuestion(question: Question) { + this.dialogHeader = 'Edit Question'; + this.question = question; + this.isDialogVisible = true; } deleteSelectedQuestions() { @@ -126,55 +112,6 @@ export class QuestionsComponent implements OnInit { }); } - saveQuestion() { - this.submitted = true; - - if (!this.questionFormGroup.valid) { - return; - } - - if (this.question.id) { - // update - this.handleEditQuestionResponse(this.question.id, this.questionFormGroup.value); - } else { - // add - this.handleAddQuestionResponse(); - } - - this.isDialogVisible = false; - this.question = {} as Question; - } - - resetFormGroup() { - this.questionFormGroup.reset({ - topics: [], - difficulty: '', - title: '', - description: '', - }); - } - - editQuestion(question: Question) { - this.dialogHeader = 'Edit Question'; - this.question.id = question.id; - this.questionFormGroup.patchValue({ - title: question.title, - description: question.description, - topics: question.topics, - difficulty: question.difficulty, - }); - this.isDialogVisible = true; - } - - initFormGroup() { - this.questionFormGroup = new FormGroup({ - topics: new FormControl([], [Validators.required]), - difficulty: new FormControl([], [Validators.required]), - title: new FormControl('', [Validators.required]), - description: new FormControl('', [Validators.required]), - }); - } - initDifficulties() { this.difficulties = [ { label: DifficultyLevels.EASY, value: DifficultyLevels.EASY }, @@ -193,32 +130,6 @@ export class QuestionsComponent implements OnInit { }; } - handleAddQuestionResponse() { - this.questionService.addQuestion(this.questionFormGroup.value).subscribe({ - next: (response: SingleQuestionResponse) => { - if (this.questions) { - this.questions = [...this.questions, response.data]; - } - }, - error: (error: HttpErrorResponse) => { - this.messageService.add({ - severity: 'error', - summary: 'Error', - detail: 'Failed to add new question. ' + error.error.message, - life: 3000, - }); - }, - complete: () => { - this.messageService.add({ - severity: 'success', - summary: 'Successful', - detail: 'New Question Added', - life: 3000, - }); - }, - }); - } - handleDeleteQuestionResponse() { const deleteRequests = this.selectedQuestions?.map(q => this.questionService.deleteQuestion(q.id)); @@ -229,46 +140,10 @@ export class QuestionsComponent implements OnInit { this.selectedQuestions = null; }, error: (error: HttpErrorResponse) => { - // Handle any errors from the forkJoin if necessary - this.messageService.add({ - severity: 'error', - summary: 'Error', - detail: 'Some questions could not be deleted. ' + error.error.message, - life: 3000, - }); + this.onErrorReceive('Some questions could not be deleted. ' + error.error.message); }, complete: () => { - this.messageService.add({ - severity: 'success', - summary: 'Successful', - detail: 'Question(s) Deleted', - life: 3000, - }); - }, - }); - } - - handleEditQuestionResponse(id: number, question: QuestionBody) { - this.questionService.updateQuestion(id, question).subscribe({ - next: (response: SingleQuestionResponse) => { - this.questions[this.questions.findIndex(x => x.id == id)] = response.data; - this.questions = [...this.questions]; - }, - error: (error: HttpErrorResponse) => { - this.messageService.add({ - severity: 'error', - summary: 'Error', - detail: error.error.message, - life: 3000, - }); - }, - complete: () => { - this.messageService.add({ - severity: 'success', - summary: 'Successful', - detail: 'Question has been updated successfully', - life: 3000, - }); + this.onSuccessfulRequest('Question(s) Deleted'); }, }); } @@ -289,16 +164,42 @@ export class QuestionsComponent implements OnInit { error: () => { this.questions = []; this.topics = []; - this.messageService.add({ - severity: 'error', - summary: 'Error', - detail: 'Failed to load data. Please try again later.', - life: 3000, - }); + this.onErrorReceive('Failed to load data. Please try again later.'); }, complete: () => { this.loading = false; }, }); } + + onDialogClose() { + this.isDialogVisible = false; + } + + onQuestionUpdate(question: Question) { + this.questions[this.questions.findIndex(x => x.id == question.id)] = question; + this.questions = [...this.questions]; + } + + onQuestionAdd(question: Question) { + this.questions = [...this.questions, question]; + } + + onErrorReceive(errorMessage: string) { + this.messageService.add({ + severity: 'error', + summary: 'Error', + detail: errorMessage, + life: 3000, + }); + } + + onSuccessfulRequest(successMessage: string) { + this.messageService.add({ + severity: 'success', + summary: 'Successful', + detail: successMessage, + life: 3000, + }); + } } From fd7d2bc19c4be86c5e10a20c2ddae8b8bef72d54 Mon Sep 17 00:00:00 2001 From: LimZiJia Date: Wed, 25 Sep 2024 06:32:17 +0800 Subject: [PATCH 112/188] Add test Test does not currently work --- .env.sample | 44 +- services/history/package.json | 47 + services/user-service/Dockerfile | 18 +- services/user-service/index.js | 4 +- services/user-service/package-lock.json | 1882 ++++++++++++++++- services/user-service/package.json | 13 +- services/user-service/server.js | 2 +- .../{ => src}/GuideAssets/AddIPAddress.png | Bin .../{ => src}/GuideAssets/ConnectCluster.png | Bin .../GuideAssets/ConnectionString.png | Bin .../{ => src}/GuideAssets/Creation.png | Bin .../{ => src}/GuideAssets/DriverSelection.png | Bin .../{ => src}/GuideAssets/IPWhitelisting.png | Bin .../{ => src}/GuideAssets/Network.png | Bin .../{ => src}/GuideAssets/Security.png | Bin .../{ => src}/GuideAssets/Selection.png | Bin .../{ => src}/GuideAssets/Selection1.png | Bin .../{ => src}/GuideAssets/Selection2.png | Bin .../{ => src}/GuideAssets/Selection3.png | Bin .../{ => src}/GuideAssets/Selection4.png | Bin .../{ => src}/GuideAssets/SidePane.png | Bin .../{ => src}/controller/auth-controller.js | 82 +- .../{ => src}/controller/user-controller.js | 333 ++- .../middleware/basic-access-control.js | 96 +- .../{ => src}/model/repository.js | 142 +- .../{ => src}/model/user-model.js | 62 +- .../user-service/{ => src}/model/user-orm.js | 0 .../{ => src}/routes/auth-routes.js | 24 +- .../{ => src}/routes/user-routes.js | 54 +- .../basicEndpointTesting.spec.ts | 32 + 30 files changed, 2364 insertions(+), 471 deletions(-) create mode 100644 services/history/package.json rename services/user-service/{ => src}/GuideAssets/AddIPAddress.png (100%) rename services/user-service/{ => src}/GuideAssets/ConnectCluster.png (100%) rename services/user-service/{ => src}/GuideAssets/ConnectionString.png (100%) rename services/user-service/{ => src}/GuideAssets/Creation.png (100%) rename services/user-service/{ => src}/GuideAssets/DriverSelection.png (100%) rename services/user-service/{ => src}/GuideAssets/IPWhitelisting.png (100%) rename services/user-service/{ => src}/GuideAssets/Network.png (100%) rename services/user-service/{ => src}/GuideAssets/Security.png (100%) rename services/user-service/{ => src}/GuideAssets/Selection.png (100%) rename services/user-service/{ => src}/GuideAssets/Selection1.png (100%) rename services/user-service/{ => src}/GuideAssets/Selection2.png (100%) rename services/user-service/{ => src}/GuideAssets/Selection3.png (100%) rename services/user-service/{ => src}/GuideAssets/Selection4.png (100%) rename services/user-service/{ => src}/GuideAssets/SidePane.png (100%) rename services/user-service/{ => src}/controller/auth-controller.js (97%) rename services/user-service/{ => src}/controller/user-controller.js (96%) rename services/user-service/{ => src}/middleware/basic-access-control.js (96%) rename services/user-service/{ => src}/model/repository.js (95%) rename services/user-service/{ => src}/model/user-model.js (94%) rename services/user-service/{ => src}/model/user-orm.js (100%) rename services/user-service/{ => src}/routes/auth-routes.js (96%) rename services/user-service/{ => src}/routes/user-routes.js (96%) create mode 100644 services/user-service/tests/endpointTests/basicEndpointTesting.spec.ts diff --git a/.env.sample b/.env.sample index a563fef63f..97d55e0004 100644 --- a/.env.sample +++ b/.env.sample @@ -1,22 +1,22 @@ -# This is a sample environment configuration file. -# Copy this file to .env and replace the placeholder values with your own. - -# Question Service -QUESTION_DB_CLOUD_URI= -QUESTION_DB_LOCAL_URI=mongodb://question-db:27017/question -QUESTION_DB_USERNAME=user -QUESTION_DB_PASSWORD=password -QUESTION_SERVICE_PORT=8081 - -# User Service -USER_SERVICE_CLOUD_URI=mongodb+srv://admin:@cluster0.uo0vu.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0 -USER_SERVICE_LOACL_URI=mongodb://127.0.0.1:27017/peerprepUserServiceDB -USER_SERVICE_PORT=3001 - -# Will use cloud MongoDB Atlas database -ENV=PROD - -# Secret for creating JWT signature -JWT_SECRET=you-can-replace-this-with-your-own-secret - -NODE_ENV=development +# This is a sample environment configuration file. +# Copy this file to .env and replace the placeholder values with your own. + +# Question Service +QUESTION_DB_CLOUD_URI= +QUESTION_DB_LOCAL_URI=mongodb://question-db:27017/question +QUESTION_DB_USERNAME=user +QUESTION_DB_PASSWORD=password +QUESTION_SERVICE_PORT=8081 + +# User Service +USER_SERVICE_CLOUD_URI=mongodb+srv://admin:@cluster0.uo0vu.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0 +USER_SERVICE_LOACL_URI=mongodb://127.0.0.1:27017/peerprepUserServiceDB +USER_SERVICE_PORT=3001 + +# Will use cloud MongoDB Atlas database +ENV=PROD + +# Secret for creating JWT signature +JWT_SECRET=you-can-replace-this-with-your-own-secret + +NODE_ENV=development diff --git a/services/history/package.json b/services/history/package.json new file mode 100644 index 0000000000..45a7ce8fcb --- /dev/null +++ b/services/history/package.json @@ -0,0 +1,47 @@ +{ + "name": "history", + "version": "0.0.0", + "main": "index.js", + "scripts": { + "build": "npx tsc", + "dev": "node src/index.ts", + "start": "nodemon src/index.ts", + "lint": "npx eslint .", + "lint:fix": "npx eslint . --fix", + "test": "mocha --require ts-node/register tests/**/*.spec.ts --exit" + }, + "author": "", + "license": "ISC", + "description": "", + "dependencies": { + "body-parser": "^1.20.3", + "cors": "^2.8.5", + "express": "^4.21.0", + "mongoose": "^8.6.2", + "morgan": "^1.10.0" + }, + "devDependencies": { + "@eslint/js": "^9.10.0", + "@types/chai": "^4.3.19", + "@types/cors": "^2.8.17", + "@types/eslint__js": "^8.42.3", + "@types/express": "^4.17.21", + "@types/mocha": "^10.0.8", + "@types/morgan": "^1.9.9", + "@types/node": "^22.5.4", + "@typescript-eslint/eslint-plugin": "^8.5.0", + "chai": "^4.5.0", + "chai-http": "^4.4.0", + "eslint": "^9.10.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", + "mocha": "^10.7.3", + "mongodb-memory-server": "^10.0.0", + "nodemon": "^3.1.4", + "prettier": "3.3.3", + "prettier-eslint": "^16.3.0", + "ts-node": "^10.9.2", + "typescript": "^5.5.4", + "typescript-eslint": "^8.5.0" + } +} diff --git a/services/user-service/Dockerfile b/services/user-service/Dockerfile index f179e575f2..08bac7580f 100644 --- a/services/user-service/Dockerfile +++ b/services/user-service/Dockerfile @@ -1,9 +1,9 @@ -FROM node:20-alpine - -WORKDIR /app -COPY package.json package-lock.json ./ -RUN npm install -COPY . . -EXPOSE ${USER_SERVICE_PORT} - -CMD ["npm", "start"] +FROM node:20-alpine + +WORKDIR /app +COPY package.json package-lock.json ./ +RUN npm install +COPY . . +EXPOSE ${USER_SERVICE_PORT} + +CMD ["npm", "start"] diff --git a/services/user-service/index.js b/services/user-service/index.js index 144a002566..dc8848f13e 100644 --- a/services/user-service/index.js +++ b/services/user-service/index.js @@ -1,8 +1,8 @@ import express from "express"; import cors from "cors"; -import userRoutes from "./routes/user-routes.js"; -import authRoutes from "./routes/auth-routes.js"; +import userRoutes from "./src/routes/user-routes.js"; +import authRoutes from "./src/routes/auth-routes.js"; const app = express(); diff --git a/services/user-service/package-lock.json b/services/user-service/package-lock.json index 948905183e..18ee790f6c 100644 --- a/services/user-service/package-lock.json +++ b/services/user-service/package-lock.json @@ -17,7 +17,57 @@ "mongoose": "^8.5.4" }, "devDependencies": { - "nodemon": "^3.1.4" + "@types/chai": "^5.0.0", + "@types/mocha": "^10.0.8", + "@types/node": "^22.6.1", + "chai": "^5.1.1", + "chai-http": "^5.0.0", + "mocha": "^10.7.3", + "mongodb-memory-server": "^10.0.1", + "nodemon": "^3.1.4", + "ts-node": "^10.9.2", + "typescript": "^5.6.2" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@mongodb-js/saslprep": { @@ -28,6 +78,58 @@ "sparse-bitfield": "^3.0.3" } }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.0.0.tgz", + "integrity": "sha512-+DwhEHAaFPPdJ2ral3kNHFQXnTfscEEFsUxzD+d7nlcLrFK23JtNjH71RGasTcHb88b4vVi4mTyfpf8u2L8bdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mocha": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.8.tgz", + "integrity": "sha512-HfMcUmy9hTMJh66VNcmeC9iVErIZJli2bszuXc6julh5YGuRb/W5OnkHjwLNYdFlMis0sY3If5SEAp+PktdJjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz", + "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, "node_modules/@types/webidl-conversions": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", @@ -53,6 +155,106 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -66,17 +268,80 @@ "node": ">= 8" } }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/async-mutex": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", + "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/b4a": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/bare-events": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, "node_modules/bcryptjs": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", @@ -140,6 +405,13 @@ "node": ">=8" } }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, "node_modules/bson": { "version": "6.8.0", "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", @@ -148,6 +420,16 @@ "node": ">=16.20.1" } }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -179,6 +461,130 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chai": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", + "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/chai-http": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-5.0.0.tgz", + "integrity": "sha512-nWtyQ0/+VSayMEESPbBE2v5HYd24Jh67Alh9/dxecfZ4viFAsGN3leFwy3EsNu1DbEi/HsTVW+9pT8p79a2J+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "charset": "^1.0.1", + "cookiejar": "^2.1.4", + "is-ip": "^5.0.1", + "methods": "^1.1.2", + "qs": "^6.12.1", + "superagent": "^9" + }, + "engines": { + "node": ">=18.20.0" + } + }, + "node_modules/chai-http/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/charset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", + "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -203,6 +609,84 @@ "fsevents": "~2.3.2" } }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone-regexp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-3.0.0.tgz", + "integrity": "sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-regexp": "^3.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -228,6 +712,19 @@ "node": ">= 0.6" } }, + "node_modules/convert-hrtime": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz", + "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", @@ -241,6 +738,13 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true, + "license": "MIT" + }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", @@ -253,6 +757,13 @@ "node": ">= 0.10" } }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -261,6 +772,29 @@ "ms": "2.0.0" } }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -277,6 +811,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -294,6 +838,27 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", @@ -318,6 +883,13 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -345,11 +917,34 @@ "node": ">= 0.4" } }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -399,6 +994,20 @@ "node": ">= 0.10.0" } }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true, + "license": "MIT" + }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -428,6 +1037,102 @@ "node": ">= 0.8" } }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -444,6 +1149,13 @@ "node": ">= 0.6" } }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -466,6 +1178,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/function-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-0.1.1.tgz", + "integrity": "sha512-0NVVC0TaP7dSTvn1yMiy6d6Q8gifzbvQafO46RtLG/kHJUBNd+pVRGOBoK44wNBvtSPUJRfdVvkFdD3p0xvyZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, "node_modules/get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -484,6 +1229,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -496,6 +1262,29 @@ "node": ">= 6" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -560,6 +1349,26 @@ "node": ">= 0.4" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -575,6 +1384,45 @@ "node": ">= 0.8" } }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -592,11 +1440,36 @@ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/ip-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -626,25 +1499,101 @@ "node": ">=0.10.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-ip": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-5.0.1.tgz", + "integrity": "sha512-FCsGHdlrOnZQcp0+XT5a+pYowf33itBalCl+7ovNXC/7o5BhIpG14M3OrpPPdBSIQJCm+0M5+9mO7S9VVTTCFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-regex": "^5.0.0", + "super-regex": "^0.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regexp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz", + "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "engines": { - "node": ">=0.12.0" + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, "node_modules/jsonwebtoken": { @@ -700,6 +1649,22 @@ "node": ">=12.0.0" } }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -735,6 +1700,66 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", + "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -803,6 +1828,116 @@ "node": "*" } }, + "node_modules/mocha": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", + "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/mongodb": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.7.0.tgz", @@ -857,6 +1992,70 @@ "whatwg-url": "^13.0.0" } }, + "node_modules/mongodb-memory-server": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mongodb-memory-server/-/mongodb-memory-server-10.0.1.tgz", + "integrity": "sha512-Zoeel0Hn+vPuFESoLJvaHyblu7gWl7hwxsMljetzhEnR7NWaUIvaP7FIu/EKu55Owks8PiuxReKflJWqARbLDw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "mongodb-memory-server-core": "10.0.1", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/mongodb-memory-server-core": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mongodb-memory-server-core/-/mongodb-memory-server-core-10.0.1.tgz", + "integrity": "sha512-sJGqoS3saNNJKQjocrqxRISUP6g2N6/D+k1JEqKYo2p9YzUOOvEopxROyvBlqkiVa67/vdf2FV4v+rOvNIHURg==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-mutex": "^0.5.0", + "camelcase": "^6.3.0", + "debug": "^4.3.5", + "find-cache-dir": "^3.3.2", + "follow-redirects": "^1.15.6", + "https-proxy-agent": "^7.0.5", + "mongodb": "^6.7.0", + "new-find-package-json": "^2.0.0", + "semver": "^7.6.3", + "tar-stream": "^3.1.7", + "tslib": "^2.6.3", + "yauzl": "^3.1.3" + }, + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mongodb-memory-server-core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/mongoose": { "version": "8.5.4", "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.5.4.tgz", @@ -936,6 +2135,44 @@ "node": ">= 0.6" } }, + "node_modules/new-find-package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/new-find-package-json/-/new-find-package-json-2.0.0.tgz", + "integrity": "sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/new-find-package-json/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/new-find-package-json/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/nodemon": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz", @@ -1009,46 +2246,194 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "engines": { - "node": ">= 0.4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", "dependencies": { - "ee-first": "1.1.1" + "find-up": "^4.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=8" } }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=8.6" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/proxy-addr": { @@ -1091,6 +2476,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true, + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -1125,6 +2527,16 @@ "node": ">=8.10.0" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1188,6 +2600,16 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", @@ -1273,6 +2695,139 @@ "node": ">= 0.8" } }, + "node_modules/streamx": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", + "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/super-regex": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-0.2.0.tgz", + "integrity": "sha512-WZzIx3rC1CvbMDloLsVw0lkZVKJWbrkJ0k1ghKFmcnPrW1+jWbgTkTEWVtD9lMdmI4jZEz40+naBxl1dCUhXXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-regexp": "^3.0.0", + "function-timeout": "^0.1.0", + "time-span": "^5.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", + "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "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.11.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1285,6 +2840,44 @@ "node": ">=4" } }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/text-decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz", + "integrity": "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/time-span": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", + "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "convert-hrtime": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1325,6 +2918,67 @@ "node": ">=14" } }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "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 + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" + }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1337,12 +2991,33 @@ "node": ">= 0.6" } }, + "node_modules/typescript": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -1359,6 +3034,13 @@ "node": ">= 0.4.0" } }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -1386,6 +3068,130 @@ "engines": { "node": ">=16" } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.1.3.tgz", + "integrity": "sha512-JCCdmlJJWv7L0q/KylOekyRaUrdEoUxWkWVcgorosTROCFWiS9p2NNPE9Yb91ak7b1N5SxAZEliWpspbZccivw==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/services/user-service/package.json b/services/user-service/package.json index 709c74bdf9..1163b2a951 100644 --- a/services/user-service/package.json +++ b/services/user-service/package.json @@ -7,13 +7,22 @@ "scripts": { "dev": "nodemon server.js", "start": "node server.js", - "test": "echo \"Error: no test specified\" && exit 1" + "test": "mocha --require ts-node/register tests/**/*.spec.ts --exit" }, "keywords": [], "author": "", "license": "ISC", "devDependencies": { - "nodemon": "^3.1.4" + "@types/chai": "^5.0.0", + "@types/mocha": "^10.0.8", + "@types/node": "^22.6.1", + "chai": "^5.1.1", + "chai-http": "^5.0.0", + "mocha": "^10.7.3", + "mongodb-memory-server": "^10.0.1", + "nodemon": "^3.1.4", + "ts-node": "^10.9.2", + "typescript": "^5.6.2" }, "dependencies": { "bcryptjs": "^2.4.3", diff --git a/services/user-service/server.js b/services/user-service/server.js index acb46148ad..2099411ce9 100644 --- a/services/user-service/server.js +++ b/services/user-service/server.js @@ -1,7 +1,7 @@ import http from "http"; import index from "./index.js"; import "dotenv/config"; -import { connectToDB } from "./model/repository.js"; +import { connectToDB } from "./src/model/repository.js"; const port = process.env.USER_SERVICE_PORT || 3001; diff --git a/services/user-service/GuideAssets/AddIPAddress.png b/services/user-service/src/GuideAssets/AddIPAddress.png similarity index 100% rename from services/user-service/GuideAssets/AddIPAddress.png rename to services/user-service/src/GuideAssets/AddIPAddress.png diff --git a/services/user-service/GuideAssets/ConnectCluster.png b/services/user-service/src/GuideAssets/ConnectCluster.png similarity index 100% rename from services/user-service/GuideAssets/ConnectCluster.png rename to services/user-service/src/GuideAssets/ConnectCluster.png diff --git a/services/user-service/GuideAssets/ConnectionString.png b/services/user-service/src/GuideAssets/ConnectionString.png similarity index 100% rename from services/user-service/GuideAssets/ConnectionString.png rename to services/user-service/src/GuideAssets/ConnectionString.png diff --git a/services/user-service/GuideAssets/Creation.png b/services/user-service/src/GuideAssets/Creation.png similarity index 100% rename from services/user-service/GuideAssets/Creation.png rename to services/user-service/src/GuideAssets/Creation.png diff --git a/services/user-service/GuideAssets/DriverSelection.png b/services/user-service/src/GuideAssets/DriverSelection.png similarity index 100% rename from services/user-service/GuideAssets/DriverSelection.png rename to services/user-service/src/GuideAssets/DriverSelection.png diff --git a/services/user-service/GuideAssets/IPWhitelisting.png b/services/user-service/src/GuideAssets/IPWhitelisting.png similarity index 100% rename from services/user-service/GuideAssets/IPWhitelisting.png rename to services/user-service/src/GuideAssets/IPWhitelisting.png diff --git a/services/user-service/GuideAssets/Network.png b/services/user-service/src/GuideAssets/Network.png similarity index 100% rename from services/user-service/GuideAssets/Network.png rename to services/user-service/src/GuideAssets/Network.png diff --git a/services/user-service/GuideAssets/Security.png b/services/user-service/src/GuideAssets/Security.png similarity index 100% rename from services/user-service/GuideAssets/Security.png rename to services/user-service/src/GuideAssets/Security.png diff --git a/services/user-service/GuideAssets/Selection.png b/services/user-service/src/GuideAssets/Selection.png similarity index 100% rename from services/user-service/GuideAssets/Selection.png rename to services/user-service/src/GuideAssets/Selection.png diff --git a/services/user-service/GuideAssets/Selection1.png b/services/user-service/src/GuideAssets/Selection1.png similarity index 100% rename from services/user-service/GuideAssets/Selection1.png rename to services/user-service/src/GuideAssets/Selection1.png diff --git a/services/user-service/GuideAssets/Selection2.png b/services/user-service/src/GuideAssets/Selection2.png similarity index 100% rename from services/user-service/GuideAssets/Selection2.png rename to services/user-service/src/GuideAssets/Selection2.png diff --git a/services/user-service/GuideAssets/Selection3.png b/services/user-service/src/GuideAssets/Selection3.png similarity index 100% rename from services/user-service/GuideAssets/Selection3.png rename to services/user-service/src/GuideAssets/Selection3.png diff --git a/services/user-service/GuideAssets/Selection4.png b/services/user-service/src/GuideAssets/Selection4.png similarity index 100% rename from services/user-service/GuideAssets/Selection4.png rename to services/user-service/src/GuideAssets/Selection4.png diff --git a/services/user-service/GuideAssets/SidePane.png b/services/user-service/src/GuideAssets/SidePane.png similarity index 100% rename from services/user-service/GuideAssets/SidePane.png rename to services/user-service/src/GuideAssets/SidePane.png diff --git a/services/user-service/controller/auth-controller.js b/services/user-service/src/controller/auth-controller.js similarity index 97% rename from services/user-service/controller/auth-controller.js rename to services/user-service/src/controller/auth-controller.js index 1bf0ea0aa4..15da6bcbea 100644 --- a/services/user-service/controller/auth-controller.js +++ b/services/user-service/src/controller/auth-controller.js @@ -1,41 +1,41 @@ -import bcrypt from "bcryptjs"; -import jwt from "jsonwebtoken"; -import { findUserByEmail as _findUserByEmail } from "../model/repository.js"; -import { formatUserResponse } from "./user-controller.js"; - -export async function handleLogin(req, res) { - const { email, password } = req.body; - if (email && password) { - try { - const user = await _findUserByEmail(email); - if (!user) { - return res.status(401).json({ message: "Wrong email and/or password" }); - } - - const match = await bcrypt.compare(password, user.password); - if (!match) { - return res.status(401).json({ message: "Wrong email and/or password" }); - } - - const accessToken = jwt.sign({ - id: user.id, - }, process.env.JWT_SECRET, { - expiresIn: "1d", - }); - return res.status(200).json({ message: "User logged in", data: { accessToken, ...formatUserResponse(user) } }); - } catch (err) { - return res.status(500).json({ message: err.message }); - } - } else { - return res.status(400).json({ message: "Missing email and/or password" }); - } -} - -export async function handleVerifyToken(req, res) { - try { - const verifiedUser = req.user; - return res.status(200).json({ message: "Token verified", data: verifiedUser }); - } catch (err) { - return res.status(500).json({ message: err.message }); - } -} +import bcrypt from "bcryptjs"; +import jwt from "jsonwebtoken"; +import { findUserByEmail as _findUserByEmail } from "../model/repository.js"; +import { formatUserResponse } from "./user-controller.js"; + +export async function handleLogin(req, res) { + const { email, password } = req.body; + if (email && password) { + try { + const user = await _findUserByEmail(email); + if (!user) { + return res.status(401).json({ message: "Wrong email and/or password" }); + } + + const match = await bcrypt.compare(password, user.password); + if (!match) { + return res.status(401).json({ message: "Wrong email and/or password" }); + } + + const accessToken = jwt.sign({ + id: user.id, + }, process.env.JWT_SECRET, { + expiresIn: "1d", + }); + return res.status(200).json({ message: "User logged in", data: { accessToken, ...formatUserResponse(user) } }); + } catch (err) { + return res.status(500).json({ message: err.message }); + } + } else { + return res.status(400).json({ message: "Missing email and/or password" }); + } +} + +export async function handleVerifyToken(req, res) { + try { + const verifiedUser = req.user; + return res.status(200).json({ message: "Token verified", data: verifiedUser }); + } catch (err) { + return res.status(500).json({ message: err.message }); + } +} diff --git a/services/user-service/controller/user-controller.js b/services/user-service/src/controller/user-controller.js similarity index 96% rename from services/user-service/controller/user-controller.js rename to services/user-service/src/controller/user-controller.js index c002d5152a..219a527d36 100644 --- a/services/user-service/controller/user-controller.js +++ b/services/user-service/src/controller/user-controller.js @@ -1,167 +1,166 @@ -import bcrypt from "bcryptjs"; -import { isValidObjectId } from "mongoose"; -import { - createUser as _createUser, - deleteUserById as _deleteUserById, - findAllUsers as _findAllUsers, - findUserByEmail as _findUserByEmail, - findUserById as _findUserById, - findUserByUsername as _findUserByUsername, - findUserByUsernameOrEmail as _findUserByUsernameOrEmail, - updateUserById as _updateUserById, - updateUserPrivilegeById as _updateUserPrivilegeById, -} from "../model/repository.js"; - -export async function createUser(req, res) { - try { - const { username, email, password } = req.body; - console.log(username, email, password); - if (username && email && password) { - const existingUser = await _findUserByUsernameOrEmail(username, email); - if (existingUser) { - return res.status(409).json({ message: "username or email already exists" }); - } - const salt = bcrypt.genSaltSync(10); - const hashedPassword = bcrypt.hashSync(password, salt); - const createdUser = await _createUser(username, email, hashedPassword); - return res.status(201).json({ - message: `Created new user ${username} successfully`, - data: formatUserResponse(createdUser), - }); - } else { - return res.status(400).json({ message: "username and/or email and/or password are missing" }); - } - } catch (err) { - console.error(err); - return res.status(500).json({ message: "Unknown error when creating new user!" }); - } -} - -export async function getUser(req, res) { - try { - const userId = req.params.id; - if (!isValidObjectId(userId)) { - return res.status(404).json({ message: `User ${userId} not found` }); - } - - const user = await _findUserById(userId); - if (!user) { - return res.status(404).json({ message: `User ${userId} not found` }); - } else { - return res.status(200).json({ message: `Found user`, data: formatUserResponse(user) }); - } - } catch (err) { - console.error(err); - return res.status(500).json({ message: "Unknown error when getting user!" }); - } -} - -export async function getAllUsers(req, res) { - try { - const users = await _findAllUsers(); - - return res.status(200).json({ message: `Found users`, data: users.map(formatUserResponse) }); - } catch (err) { - console.error(err); - return res.status(500).json({ message: "Unknown error when getting all users!" }); - } -} - -export async function updateUser(req, res) { - try { - const { username, email, password } = req.body; - if (username || email || password) { - const userId = req.params.id; - if (!isValidObjectId(userId)) { - return res.status(404).json({ message: `User ${userId} not found` }); - } - const user = await _findUserById(userId); - if (!user) { - return res.status(404).json({ message: `User ${userId} not found` }); - } - if (username || email) { - let existingUser = await _findUserByUsername(username); - if (existingUser && existingUser.id !== userId) { - return res.status(409).json({ message: "username already exists" }); - } - existingUser = await _findUserByEmail(email); - if (existingUser && existingUser.id !== userId) { - return res.status(409).json({ message: "email already exists" }); - } - } - - let hashedPassword; - if (password) { - const salt = bcrypt.genSaltSync(10); - hashedPassword = bcrypt.hashSync(password, salt); - } - const updatedUser = await _updateUserById(userId, username, email, hashedPassword); - return res.status(200).json({ - message: `Updated data for user ${userId}`, - data: formatUserResponse(updatedUser), - }); - } else { - return res.status(400).json({ message: "No field to update: username and email and password are all missing!" }); - } - } catch (err) { - console.error(err); - return res.status(500).json({ message: "Unknown error when updating user!" }); - } -} - -export async function updateUserPrivilege(req, res) { - try { - const { isAdmin } = req.body; - - if (isAdmin !== undefined) { // isAdmin can have boolean value true or false - const userId = req.params.id; - if (!isValidObjectId(userId)) { - return res.status(404).json({ message: `User ${userId} not found` }); - } - const user = await _findUserById(userId); - if (!user) { - return res.status(404).json({ message: `User ${userId} not found` }); - } - - const updatedUser = await _updateUserPrivilegeById(userId, isAdmin === true); - return res.status(200).json({ - message: `Updated privilege for user ${userId}`, - data: formatUserResponse(updatedUser), - }); - } else { - return res.status(400).json({ message: "isAdmin is missing!" }); - } - } catch (err) { - console.error(err); - return res.status(500).json({ message: "Unknown error when updating user privilege!" }); - } -} - -export async function deleteUser(req, res) { - try { - const userId = req.params.id; - if (!isValidObjectId(userId)) { - return res.status(404).json({ message: `User ${userId} not found` }); - } - const user = await _findUserById(userId); - if (!user) { - return res.status(404).json({ message: `User ${userId} not found` }); - } - - await _deleteUserById(userId); - return res.status(200).json({ message: `Deleted user ${userId} successfully` }); - } catch (err) { - console.error(err); - return res.status(500).json({ message: "Unknown error when deleting user!" }); - } -} - -export function formatUserResponse(user) { - return { - id: user.id, - username: user.username, - email: user.email, - isAdmin: user.isAdmin, - createdAt: user.createdAt, - }; -} +import bcrypt from "bcryptjs"; +import { isValidObjectId } from "mongoose"; +import { + createUser as _createUser, + deleteUserById as _deleteUserById, + findAllUsers as _findAllUsers, + findUserByEmail as _findUserByEmail, + findUserById as _findUserById, + findUserByUsername as _findUserByUsername, + findUserByUsernameOrEmail as _findUserByUsernameOrEmail, + updateUserById as _updateUserById, + updateUserPrivilegeById as _updateUserPrivilegeById, +} from "../model/repository.js"; + +export async function createUser(req, res) { + try { + const { username, email, password } = req.body; + if (username && email && password) { + const existingUser = await _findUserByUsernameOrEmail(username, email); + if (existingUser) { + return res.status(409).json({ message: "username or email already exists" }); + } + const salt = bcrypt.genSaltSync(10); + const hashedPassword = bcrypt.hashSync(password, salt); + const createdUser = await _createUser(username, email, hashedPassword); + return res.status(201).json({ + message: `Created new user ${username} successfully`, + data: formatUserResponse(createdUser), + }); + } else { + return res.status(400).json({ message: "username and/or email and/or password are missing" }); + } + } catch (err) { + console.error(err); + return res.status(500).json({ message: "Unknown error when creating new user!" }); + } +} + +export async function getUser(req, res) { + try { + const userId = req.params.id; + if (!isValidObjectId(userId)) { + return res.status(404).json({ message: `User ${userId} not found` }); + } + + const user = await _findUserById(userId); + if (!user) { + return res.status(404).json({ message: `User ${userId} not found` }); + } else { + return res.status(200).json({ message: `Found user`, data: formatUserResponse(user) }); + } + } catch (err) { + console.error(err); + return res.status(500).json({ message: "Unknown error when getting user!" }); + } +} + +export async function getAllUsers(req, res) { + try { + const users = await _findAllUsers(); + + return res.status(200).json({ message: `Found users`, data: users.map(formatUserResponse) }); + } catch (err) { + console.error(err); + return res.status(500).json({ message: "Unknown error when getting all users!" }); + } +} + +export async function updateUser(req, res) { + try { + const { username, email, password } = req.body; + if (username || email || password) { + const userId = req.params.id; + if (!isValidObjectId(userId)) { + return res.status(404).json({ message: `User ${userId} not found` }); + } + const user = await _findUserById(userId); + if (!user) { + return res.status(404).json({ message: `User ${userId} not found` }); + } + if (username || email) { + let existingUser = await _findUserByUsername(username); + if (existingUser && existingUser.id !== userId) { + return res.status(409).json({ message: "username already exists" }); + } + existingUser = await _findUserByEmail(email); + if (existingUser && existingUser.id !== userId) { + return res.status(409).json({ message: "email already exists" }); + } + } + + let hashedPassword; + if (password) { + const salt = bcrypt.genSaltSync(10); + hashedPassword = bcrypt.hashSync(password, salt); + } + const updatedUser = await _updateUserById(userId, username, email, hashedPassword); + return res.status(200).json({ + message: `Updated data for user ${userId}`, + data: formatUserResponse(updatedUser), + }); + } else { + return res.status(400).json({ message: "No field to update: username and email and password are all missing!" }); + } + } catch (err) { + console.error(err); + return res.status(500).json({ message: "Unknown error when updating user!" }); + } +} + +export async function updateUserPrivilege(req, res) { + try { + const { isAdmin } = req.body; + + if (isAdmin !== undefined) { // isAdmin can have boolean value true or false + const userId = req.params.id; + if (!isValidObjectId(userId)) { + return res.status(404).json({ message: `User ${userId} not found` }); + } + const user = await _findUserById(userId); + if (!user) { + return res.status(404).json({ message: `User ${userId} not found` }); + } + + const updatedUser = await _updateUserPrivilegeById(userId, isAdmin === true); + return res.status(200).json({ + message: `Updated privilege for user ${userId}`, + data: formatUserResponse(updatedUser), + }); + } else { + return res.status(400).json({ message: "isAdmin is missing!" }); + } + } catch (err) { + console.error(err); + return res.status(500).json({ message: "Unknown error when updating user privilege!" }); + } +} + +export async function deleteUser(req, res) { + try { + const userId = req.params.id; + if (!isValidObjectId(userId)) { + return res.status(404).json({ message: `User ${userId} not found` }); + } + const user = await _findUserById(userId); + if (!user) { + return res.status(404).json({ message: `User ${userId} not found` }); + } + + await _deleteUserById(userId); + return res.status(200).json({ message: `Deleted user ${userId} successfully` }); + } catch (err) { + console.error(err); + return res.status(500).json({ message: "Unknown error when deleting user!" }); + } +} + +export function formatUserResponse(user) { + return { + id: user.id, + username: user.username, + email: user.email, + isAdmin: user.isAdmin, + createdAt: user.createdAt, + }; +} diff --git a/services/user-service/middleware/basic-access-control.js b/services/user-service/src/middleware/basic-access-control.js similarity index 96% rename from services/user-service/middleware/basic-access-control.js rename to services/user-service/src/middleware/basic-access-control.js index f4ca4919f0..bb92665710 100644 --- a/services/user-service/middleware/basic-access-control.js +++ b/services/user-service/src/middleware/basic-access-control.js @@ -1,48 +1,48 @@ -import jwt from "jsonwebtoken"; -import { findUserById as _findUserById } from "../model/repository.js"; - -export function verifyAccessToken(req, res, next) { - const authHeader = req.headers["authorization"]; - if (!authHeader) { - return res.status(401).json({ message: "Authentication failed" }); - } - - // request auth header: `Authorization: Bearer + ` - const token = authHeader.split(" ")[1]; - jwt.verify(token, process.env.JWT_SECRET, async (err, user) => { - if (err) { - return res.status(401).json({ message: "Authentication failed" }); - } - - // load latest user info from DB - const dbUser = await _findUserById(user.id); - if (!dbUser) { - return res.status(401).json({ message: "Authentication failed" }); - } - - req.user = { id: dbUser.id, username: dbUser.username, email: dbUser.email, isAdmin: dbUser.isAdmin }; - next(); - }); -} - -export function verifyIsAdmin(req, res, next) { - if (req.user.isAdmin) { - next(); - } else { - return res.status(403).json({ message: "Not authorized to access this resource" }); - } -} - -export function verifyIsOwnerOrAdmin(req, res, next) { - if (req.user.isAdmin) { - return next(); - } - - const userIdFromReqParams = req.params.id; - const userIdFromToken = req.user.id; - if (userIdFromReqParams === userIdFromToken) { - return next(); - } - - return res.status(403).json({ message: "Not authorized to access this resource" }); -} +import jwt from "jsonwebtoken"; +import { findUserById as _findUserById } from "../model/repository.js"; + +export function verifyAccessToken(req, res, next) { + const authHeader = req.headers["authorization"]; + if (!authHeader) { + return res.status(401).json({ message: "Authentication failed" }); + } + + // request auth header: `Authorization: Bearer + ` + const token = authHeader.split(" ")[1]; + jwt.verify(token, process.env.JWT_SECRET, async (err, user) => { + if (err) { + return res.status(401).json({ message: "Authentication failed" }); + } + + // load latest user info from DB + const dbUser = await _findUserById(user.id); + if (!dbUser) { + return res.status(401).json({ message: "Authentication failed" }); + } + + req.user = { id: dbUser.id, username: dbUser.username, email: dbUser.email, isAdmin: dbUser.isAdmin }; + next(); + }); +} + +export function verifyIsAdmin(req, res, next) { + if (req.user.isAdmin) { + next(); + } else { + return res.status(403).json({ message: "Not authorized to access this resource" }); + } +} + +export function verifyIsOwnerOrAdmin(req, res, next) { + if (req.user.isAdmin) { + return next(); + } + + const userIdFromReqParams = req.params.id; + const userIdFromToken = req.user.id; + if (userIdFromReqParams === userIdFromToken) { + return next(); + } + + return res.status(403).json({ message: "Not authorized to access this resource" }); +} diff --git a/services/user-service/model/repository.js b/services/user-service/src/model/repository.js similarity index 95% rename from services/user-service/model/repository.js rename to services/user-service/src/model/repository.js index 31ed5dfcd8..d14bdeebdb 100644 --- a/services/user-service/model/repository.js +++ b/services/user-service/src/model/repository.js @@ -1,71 +1,71 @@ -import UserModel from "./user-model.js"; -import "dotenv/config"; -import { connect } from "mongoose"; - -export async function connectToDB() { - let mongoDBUri = - process.env.ENV === "PROD" - ? process.env.USER_SERVICE_CLOUD_URI - : process.env.USER_SERVICE_LOCAL_URI; - - await connect(mongoDBUri); -} - -export async function createUser(username, email, password) { - return new UserModel({ username, email, password }).save(); -} - -export async function findUserByEmail(email) { - return UserModel.findOne({ email }); -} - -export async function findUserById(userId) { - return UserModel.findById(userId); -} - -export async function findUserByUsername(username) { - return UserModel.findOne({ username }); -} - -export async function findUserByUsernameOrEmail(username, email) { - return UserModel.findOne({ - $or: [ - { username }, - { email }, - ], - }); -} - -export async function findAllUsers() { - return UserModel.find(); -} - -export async function updateUserById(userId, username, email, password) { - return UserModel.findByIdAndUpdate( - userId, - { - $set: { - username, - email, - password, - }, - }, - { new: true }, // return the updated user - ); -} - -export async function updateUserPrivilegeById(userId, isAdmin) { - return UserModel.findByIdAndUpdate( - userId, - { - $set: { - isAdmin, - }, - }, - { new: true }, // return the updated user - ); -} - -export async function deleteUserById(userId) { - return UserModel.findByIdAndDelete(userId); -} +import UserModel from "./user-model.js"; +import "dotenv/config"; +import { connect } from "mongoose"; + +export async function connectToDB() { + let mongoDBUri = + process.env.ENV === "PROD" + ? process.env.USER_SERVICE_CLOUD_URI + : process.env.USER_SERVICE_LOCAL_URI; + + await connect(mongoDBUri); +} + +export async function createUser(username, email, password) { + return new UserModel({ username, email, password }).save(); +} + +export async function findUserByEmail(email) { + return UserModel.findOne({ email }); +} + +export async function findUserById(userId) { + return UserModel.findById(userId); +} + +export async function findUserByUsername(username) { + return UserModel.findOne({ username }); +} + +export async function findUserByUsernameOrEmail(username, email) { + return UserModel.findOne({ + $or: [ + { username }, + { email }, + ], + }); +} + +export async function findAllUsers() { + return UserModel.find(); +} + +export async function updateUserById(userId, username, email, password) { + return UserModel.findByIdAndUpdate( + userId, + { + $set: { + username, + email, + password, + }, + }, + { new: true }, // return the updated user + ); +} + +export async function updateUserPrivilegeById(userId, isAdmin) { + return UserModel.findByIdAndUpdate( + userId, + { + $set: { + isAdmin, + }, + }, + { new: true }, // return the updated user + ); +} + +export async function deleteUserById(userId) { + return UserModel.findByIdAndDelete(userId); +} diff --git a/services/user-service/model/user-model.js b/services/user-service/src/model/user-model.js similarity index 94% rename from services/user-service/model/user-model.js rename to services/user-service/src/model/user-model.js index fa52820c2c..df37491d09 100644 --- a/services/user-service/model/user-model.js +++ b/services/user-service/src/model/user-model.js @@ -1,31 +1,31 @@ -import mongoose from "mongoose"; - -const Schema = mongoose.Schema; - -const UserModelSchema = new Schema({ - username: { - type: String, - required: true, - unique: true, - }, - email: { - type: String, - required: true, - unique: true, - }, - password: { - type: String, - required: true, - }, - createdAt: { - type: Date, - default: Date.now, // Setting default to the current date/time - }, - isAdmin: { - type: Boolean, - required: true, - default: false, - }, -}); - -export default mongoose.model("UserModel", UserModelSchema); +import mongoose from "mongoose"; + +const Schema = mongoose.Schema; + +const UserModelSchema = new Schema({ + username: { + type: String, + required: true, + unique: true, + }, + email: { + type: String, + required: true, + unique: true, + }, + password: { + type: String, + required: true, + }, + createdAt: { + type: Date, + default: Date.now, // Setting default to the current date/time + }, + isAdmin: { + type: Boolean, + required: true, + default: false, + }, +}); + +export default mongoose.model("UserModel", UserModelSchema); diff --git a/services/user-service/model/user-orm.js b/services/user-service/src/model/user-orm.js similarity index 100% rename from services/user-service/model/user-orm.js rename to services/user-service/src/model/user-orm.js diff --git a/services/user-service/routes/auth-routes.js b/services/user-service/src/routes/auth-routes.js similarity index 96% rename from services/user-service/routes/auth-routes.js rename to services/user-service/src/routes/auth-routes.js index 26ab06d821..8690cbe1f6 100644 --- a/services/user-service/routes/auth-routes.js +++ b/services/user-service/src/routes/auth-routes.js @@ -1,12 +1,12 @@ -import express from "express"; - -import { handleLogin, handleVerifyToken } from "../controller/auth-controller.js"; -import { verifyAccessToken } from "../middleware/basic-access-control.js"; - -const router = express.Router(); - -router.post("/login", handleLogin); - -router.get("/verify-token", verifyAccessToken, handleVerifyToken); - -export default router; +import express from "express"; + +import { handleLogin, handleVerifyToken } from "../controller/auth-controller.js"; +import { verifyAccessToken } from "../middleware/basic-access-control.js"; + +const router = express.Router(); + +router.post("/login", handleLogin); + +router.get("/verify-token", verifyAccessToken, handleVerifyToken); + +export default router; diff --git a/services/user-service/routes/user-routes.js b/services/user-service/src/routes/user-routes.js similarity index 96% rename from services/user-service/routes/user-routes.js rename to services/user-service/src/routes/user-routes.js index 5dc14ccd23..51c2fb64a8 100644 --- a/services/user-service/routes/user-routes.js +++ b/services/user-service/src/routes/user-routes.js @@ -1,27 +1,27 @@ -import express from "express"; - -import { - createUser, - deleteUser, - getAllUsers, - getUser, - updateUser, - updateUserPrivilege, -} from "../controller/user-controller.js"; -import { verifyAccessToken, verifyIsAdmin, verifyIsOwnerOrAdmin } from "../middleware/basic-access-control.js"; - -const router = express.Router(); - -router.get("/", verifyAccessToken, verifyIsAdmin, getAllUsers); - -router.patch("/:id/privilege", verifyAccessToken, verifyIsAdmin, updateUserPrivilege); - -router.post("/", createUser); - -router.get("/:id", verifyAccessToken, verifyIsOwnerOrAdmin, getUser); - -router.patch("/:id", verifyAccessToken, verifyIsOwnerOrAdmin, updateUser); - -router.delete("/:id", verifyAccessToken, verifyIsOwnerOrAdmin, deleteUser); - -export default router; +import express from "express"; + +import { + createUser, + deleteUser, + getAllUsers, + getUser, + updateUser, + updateUserPrivilege, +} from "../controller/user-controller.js"; +import { verifyAccessToken, verifyIsAdmin, verifyIsOwnerOrAdmin } from "../middleware/basic-access-control.js"; + +const router = express.Router(); + +router.get("/", verifyAccessToken, verifyIsAdmin, getAllUsers); + +router.patch("/:id/privilege", verifyAccessToken, verifyIsAdmin, updateUserPrivilege); + +router.post("/", createUser); + +router.get("/:id", verifyAccessToken, verifyIsOwnerOrAdmin, getUser); + +router.patch("/:id", verifyAccessToken, verifyIsOwnerOrAdmin, updateUser); + +router.delete("/:id", verifyAccessToken, verifyIsOwnerOrAdmin, deleteUser); + +export default router; diff --git a/services/user-service/tests/endpointTests/basicEndpointTesting.spec.ts b/services/user-service/tests/endpointTests/basicEndpointTesting.spec.ts new file mode 100644 index 0000000000..9939d9a813 --- /dev/null +++ b/services/user-service/tests/endpointTests/basicEndpointTesting.spec.ts @@ -0,0 +1,32 @@ +import { use, expect } from 'chai'; +import chaiHttp from 'chai-http'; +import { MongoMemoryServer } from 'mongodb-memory-server'; +import mongoose, { Types } from 'mongoose'; +import app from '../../index.js'; +import { describe } from 'node:test'; + +const chai = use(chaiHttp); + +describe('Basic Endpoint Testing', function () { + before(async function () { + const mongod = await MongoMemoryServer.create(); + await mongoose.connect(mongod.getUri()); + }); + + after(async function () { + await mongoose.connection.close(); + }); + + describe('GET /', function () { + it('Should return 200 and print Hello Wolrd', done => { + chai.request(app) + .get('/') + .end((err, res) => { + expect(res).to.have.status(200); + expect(res.body).to.have.property('message'); + expect(res.body.message).to.equal("Hello World from user-service"); + done(); + }); + }); + }) +}); \ No newline at end of file From 5dbe5752f0938e0750a8a6b53b4888f1829da8f2 Mon Sep 17 00:00:00 2001 From: LimZiJia Date: Fri, 27 Sep 2024 19:16:40 +0800 Subject: [PATCH 113/188] Basic user service Not connected to the login interface yet. Commiting to make a clean Pr. --- services/user-service/.env.sample | 9 ++++++--- services/user-service/package.json | 6 +++--- .../tests/endpointTests/basicEndpointTesting.spec.ts | 2 +- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/services/user-service/.env.sample b/services/user-service/.env.sample index 5b0bd305ee..0ee09960fe 100644 --- a/services/user-service/.env.sample +++ b/services/user-service/.env.sample @@ -1,9 +1,12 @@ -DB_CLOUD_URI= -DB_LOCAL_URI=mongodb://127.0.0.1:27017/peerprepUserServiceDB -PORT=3001 +# User Service +USER_SERVICE_CLOUD_URI= +USER_SERVICE_LOACL_URI=mongodb://127.0.0.1:27017/peerprepUserServiceDB +USER_SERVICE_PORT=3001 # Will use cloud MongoDB Atlas database ENV=PROD # Secret for creating JWT signature JWT_SECRET=you-can-replace-this-with-your-own-secret + +NODE_ENV=development \ No newline at end of file diff --git a/services/user-service/package.json b/services/user-service/package.json index 1163b2a951..96081d7905 100644 --- a/services/user-service/package.json +++ b/services/user-service/package.json @@ -2,11 +2,11 @@ "name": "user-service", "version": "1.0.0", "description": "", - "main": "index.js", + "main": "./src/index.js", "type": "module", "scripts": { - "dev": "nodemon server.js", - "start": "node server.js", + "dev": "nodemon ./src/server.js", + "start": "node ./src/server.js", "test": "mocha --require ts-node/register tests/**/*.spec.ts --exit" }, "keywords": [], diff --git a/services/user-service/tests/endpointTests/basicEndpointTesting.spec.ts b/services/user-service/tests/endpointTests/basicEndpointTesting.spec.ts index 9939d9a813..e08401a53b 100644 --- a/services/user-service/tests/endpointTests/basicEndpointTesting.spec.ts +++ b/services/user-service/tests/endpointTests/basicEndpointTesting.spec.ts @@ -2,7 +2,7 @@ import { use, expect } from 'chai'; import chaiHttp from 'chai-http'; import { MongoMemoryServer } from 'mongodb-memory-server'; import mongoose, { Types } from 'mongoose'; -import app from '../../index.js'; +import app from '../../src/index.js'; import { describe } from 'node:test'; const chai = use(chaiHttp); From 667f3b5b0182ebc3ed8983630350f115c201ae1c Mon Sep 17 00:00:00 2001 From: samuelim01 Date: Fri, 27 Sep 2024 21:30:45 +0800 Subject: [PATCH 114/188] Move user service folder --- .env.sample | 2 +- docker-compose.yml | 18 +- services/{user-service => user}/.env.sample | 22 +- services/{user-service => user}/Dockerfile | 0 .../{user-service => user}/MongoDBSetup.md | 120 +- services/{user-service => user}/README.md | 542 +- services/{user-service => user}/index.js | 118 +- .../{user-service => user}/package-lock.json | 6394 ++++++++--------- services/{user-service => user}/package.json | 70 +- services/{user-service => user}/server.js | 38 +- .../src/GuideAssets/AddIPAddress.png | Bin .../src/GuideAssets/ConnectCluster.png | Bin .../src/GuideAssets/ConnectionString.png | Bin .../src/GuideAssets/Creation.png | Bin .../src/GuideAssets/DriverSelection.png | Bin .../src/GuideAssets/IPWhitelisting.png | Bin .../src/GuideAssets/Network.png | Bin .../src/GuideAssets/Security.png | Bin .../src/GuideAssets/Selection.png | Bin .../src/GuideAssets/Selection1.png | Bin .../src/GuideAssets/Selection2.png | Bin .../src/GuideAssets/Selection3.png | Bin .../src/GuideAssets/Selection4.png | Bin .../src/GuideAssets/SidePane.png | Bin .../src/controller/auth-controller.js | 0 .../src/controller/user-controller.js | 0 .../src/middleware/basic-access-control.js | 0 .../src/model/repository.js | 0 .../src/model/user-model.js | 0 .../src/model/user-orm.js | 0 .../src/routes/auth-routes.js | 0 .../src/routes/user-routes.js | 0 .../basicEndpointTesting.spec.ts | 0 33 files changed, 3662 insertions(+), 3662 deletions(-) rename services/{user-service => user}/.env.sample (96%) rename services/{user-service => user}/Dockerfile (100%) rename services/{user-service => user}/MongoDBSetup.md (96%) rename services/{user-service => user}/README.md (96%) rename services/{user-service => user}/index.js (95%) rename services/{user-service => user}/package-lock.json (97%) rename services/{user-service => user}/package.json (95%) rename services/{user-service => user}/server.js (96%) rename services/{user-service => user}/src/GuideAssets/AddIPAddress.png (100%) rename services/{user-service => user}/src/GuideAssets/ConnectCluster.png (100%) rename services/{user-service => user}/src/GuideAssets/ConnectionString.png (100%) rename services/{user-service => user}/src/GuideAssets/Creation.png (100%) rename services/{user-service => user}/src/GuideAssets/DriverSelection.png (100%) rename services/{user-service => user}/src/GuideAssets/IPWhitelisting.png (100%) rename services/{user-service => user}/src/GuideAssets/Network.png (100%) rename services/{user-service => user}/src/GuideAssets/Security.png (100%) rename services/{user-service => user}/src/GuideAssets/Selection.png (100%) rename services/{user-service => user}/src/GuideAssets/Selection1.png (100%) rename services/{user-service => user}/src/GuideAssets/Selection2.png (100%) rename services/{user-service => user}/src/GuideAssets/Selection3.png (100%) rename services/{user-service => user}/src/GuideAssets/Selection4.png (100%) rename services/{user-service => user}/src/GuideAssets/SidePane.png (100%) rename services/{user-service => user}/src/controller/auth-controller.js (100%) rename services/{user-service => user}/src/controller/user-controller.js (100%) rename services/{user-service => user}/src/middleware/basic-access-control.js (100%) rename services/{user-service => user}/src/model/repository.js (100%) rename services/{user-service => user}/src/model/user-model.js (100%) rename services/{user-service => user}/src/model/user-orm.js (100%) rename services/{user-service => user}/src/routes/auth-routes.js (100%) rename services/{user-service => user}/src/routes/user-routes.js (100%) rename services/{user-service => user}/tests/endpointTests/basicEndpointTesting.spec.ts (100%) diff --git a/.env.sample b/.env.sample index 97d55e0004..6020f334c5 100644 --- a/.env.sample +++ b/.env.sample @@ -10,7 +10,7 @@ QUESTION_SERVICE_PORT=8081 # User Service USER_SERVICE_CLOUD_URI=mongodb+srv://admin:@cluster0.uo0vu.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0 -USER_SERVICE_LOACL_URI=mongodb://127.0.0.1:27017/peerprepUserServiceDB +USER_SERVICE_LOCAL_URI=mongodb://127.0.0.1:27017/peerprepUserServiceDB USER_SERVICE_PORT=3001 # Will use cloud MongoDB Atlas database diff --git a/docker-compose.yml b/docker-compose.yml index 0b28632581..5d91ecd405 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,7 +12,7 @@ services: - ./frontend:/app networks: - question-network - - user-service-network + - user-network question: container_name: question @@ -34,7 +34,7 @@ services: networks: - question-network - question-db-network - - user-service-network + - user-network question-db: container_name: question-db @@ -49,11 +49,11 @@ services: - question-db-network restart: always - user-service: - container_name: user-service - image: user-service + user: + container_name: user + image: user build: - context: services/user-service + context: services/user dockerfile: Dockerfile ports: - "${USER_SERVICE_PORT}:${USER_SERVICE_PORT}" @@ -65,10 +65,10 @@ services: USER_SERVICE_PORT: ${USER_SERVICE_PORT} volumes: - /app/node_modules - - ./services/user-service:/app + - ./services/user:/app networks: - question-network - - user-service-network + - user-network restart: always volumes: @@ -79,5 +79,5 @@ networks: driver: bridge question-db-network: driver: bridge - user-service-network: + user-network: driver: bridge \ No newline at end of file diff --git a/services/user-service/.env.sample b/services/user/.env.sample similarity index 96% rename from services/user-service/.env.sample rename to services/user/.env.sample index 0ee09960fe..b58d72f5a8 100644 --- a/services/user-service/.env.sample +++ b/services/user/.env.sample @@ -1,12 +1,12 @@ -# User Service -USER_SERVICE_CLOUD_URI= -USER_SERVICE_LOACL_URI=mongodb://127.0.0.1:27017/peerprepUserServiceDB -USER_SERVICE_PORT=3001 - -# Will use cloud MongoDB Atlas database -ENV=PROD - -# Secret for creating JWT signature -JWT_SECRET=you-can-replace-this-with-your-own-secret - +# User Service +USER_SERVICE_CLOUD_URI= +USER_SERVICE_LOACL_URI=mongodb://127.0.0.1:27017/peerprepUserServiceDB +USER_SERVICE_PORT=3001 + +# Will use cloud MongoDB Atlas database +ENV=PROD + +# Secret for creating JWT signature +JWT_SECRET=you-can-replace-this-with-your-own-secret + NODE_ENV=development \ No newline at end of file diff --git a/services/user-service/Dockerfile b/services/user/Dockerfile similarity index 100% rename from services/user-service/Dockerfile rename to services/user/Dockerfile diff --git a/services/user-service/MongoDBSetup.md b/services/user/MongoDBSetup.md similarity index 96% rename from services/user-service/MongoDBSetup.md rename to services/user/MongoDBSetup.md index 42b7992769..276161ee4e 100644 --- a/services/user-service/MongoDBSetup.md +++ b/services/user/MongoDBSetup.md @@ -1,60 +1,60 @@ -# Setting up MongoDB Instance for User Service - -1. Visit the MongoDB Atlas Site [https://www.mongodb.com/atlas](https://www.mongodb.com/atlas) and click on "Try Free" - -2. Sign Up/Sign In with your preferred method. - -3. You will be greeted with welcome screens. Feel free to skip them till you reach the Dashboard page. - -4. Create a Database Deployment by clicking on the green `+ Create` Button: - -![alt text](./GuideAssets/Creation.png) - -5. Make selections as followings: - -- Select Shared Cluster -- Select `aws` as Provider - -![alt text](./GuideAssets/Selection1.png) - -- Select `Singapore` for Region - -![alt text](./GuideAssets/Selection2.png) - -- Select `M0 Sandbox` Cluster (Free Forever - No Card Required) - -> Ensure to select M0 Sandbox, else you may be prompted to enter card details and may be charged! - -![alt text](./GuideAssets/Selection3.png) - -- Leave `Additional Settings` as it is - -- Provide a suitable name to the Cluster - -![alt text](./GuideAssets/Selection4.png) - -6. You will be prompted to set up Security for the database by providing `Username and Password`. Select that option and enter `Username` and `Password`. Please keep this safe as it will be used in User Service later on. - -![alt text](./GuideAssets/Security.png) - -7. Next, click on `Add my Current IP Address`. This will whiteliste your IP address and allow you to connect to the MongoDB Database. - -![alt text](./GuideAssets/Network.png) - -8. Click `Finish and Close` and the MongoDB Instance should be up and running. - -## Whitelisting All IP's - -1. Select `Network Access` from the left side pane on Dashboard. - -![alt text](./GuideAssets/SidePane.png) - -2. Click on the `Add IP Address` Button - -![alt text](./GuideAssets/AddIPAddress.png) - -3. Select the `ALLOW ACCESS FROM ANYWHERE` Button and Click `Confirm` - -![alt text](./GuideAssets/IPWhitelisting.png) - -Now, any IP Address can access this Database. +# Setting up MongoDB Instance for User Service + +1. Visit the MongoDB Atlas Site [https://www.mongodb.com/atlas](https://www.mongodb.com/atlas) and click on "Try Free" + +2. Sign Up/Sign In with your preferred method. + +3. You will be greeted with welcome screens. Feel free to skip them till you reach the Dashboard page. + +4. Create a Database Deployment by clicking on the green `+ Create` Button: + +![alt text](./GuideAssets/Creation.png) + +5. Make selections as followings: + +- Select Shared Cluster +- Select `aws` as Provider + +![alt text](./GuideAssets/Selection1.png) + +- Select `Singapore` for Region + +![alt text](./GuideAssets/Selection2.png) + +- Select `M0 Sandbox` Cluster (Free Forever - No Card Required) + +> Ensure to select M0 Sandbox, else you may be prompted to enter card details and may be charged! + +![alt text](./GuideAssets/Selection3.png) + +- Leave `Additional Settings` as it is + +- Provide a suitable name to the Cluster + +![alt text](./GuideAssets/Selection4.png) + +6. You will be prompted to set up Security for the database by providing `Username and Password`. Select that option and enter `Username` and `Password`. Please keep this safe as it will be used in User Service later on. + +![alt text](./GuideAssets/Security.png) + +7. Next, click on `Add my Current IP Address`. This will whiteliste your IP address and allow you to connect to the MongoDB Database. + +![alt text](./GuideAssets/Network.png) + +8. Click `Finish and Close` and the MongoDB Instance should be up and running. + +## Whitelisting All IP's + +1. Select `Network Access` from the left side pane on Dashboard. + +![alt text](./GuideAssets/SidePane.png) + +2. Click on the `Add IP Address` Button + +![alt text](./GuideAssets/AddIPAddress.png) + +3. Select the `ALLOW ACCESS FROM ANYWHERE` Button and Click `Confirm` + +![alt text](./GuideAssets/IPWhitelisting.png) + +Now, any IP Address can access this Database. diff --git a/services/user-service/README.md b/services/user/README.md similarity index 96% rename from services/user-service/README.md rename to services/user/README.md index 5cd0fdce7a..32f0a140e5 100644 --- a/services/user-service/README.md +++ b/services/user/README.md @@ -1,272 +1,272 @@ -# User Service Guide - -## Setting-up - -> :notebook: If you are familiar to MongoDB and wish to use a local instance, please feel free to do so. This guide utilizes MongoDB Cloud Services. - -1. Set up a MongoDB Shared Cluster by following the steps in this [Guide](./MongoDBSetup.md). - -2. After setting up, go to the Database Deployment Page. You would see a list of the Databases you have set up. Select `Connect` on the cluster you just created earlier on for User Service. - - ![alt text](./GuideAssets/ConnectCluster.png) - -3. Select the `Drivers` option, as we have to link to a Node.js App (User Service). - - ![alt text](./GuideAssets/DriverSelection.png) - -4. Select `Node.js` in the `Driver` pull-down menu, and copy the connection string. - - Notice, you may see `` in this connection string. We will be replacing this with the admin account password that we created earlier on when setting up the Shared Cluster. - - ![alt text](./GuideAssets/ConnectionString.png) - -5. In the `user-service` directory, create a copy of the `.env.sample` file and name it `.env`. - -6. Update the `DB_CLOUD_URI` of the `.env` file, and paste the string we copied earlier in step 4. Also remember to replace the `` placeholder with the actual password. - -## Running User Service - -1. Open Command Line/Terminal and navigate into the `user-service` directory. - -2. Run the command: `npm install`. This will install all the necessary dependencies. - -3. Run the command `npm start` to start the User Service in production mode, or use `npm run dev` for development mode, which includes features like automatic server restart when you make code changes. - -4. Using applications like Postman, you can interact with the User Service on port 3001. If you wish to change this, please update the `.env` file. - -## User Service API Guide - -### Create User - -- This endpoint allows adding a new user to the database (i.e., user registration). - -- HTTP Method: `POST` - -- Endpoint: http://localhost:3001/users - -- Body - - Required: `username` (string), `email` (string), `password` (string) - - ```json - { - "username": "SampleUserName", - "email": "sample@gmail.com", - "password": "SecurePassword" - } - ``` - -- Responses: - - | Response Code | Explanation | - |-----------------------------|-------------------------------------------------------| - | 201 (Created) | User created successfully, created user data returned | - | 400 (Bad Request) | Missing fields | - | 409 (Conflict) | Duplicate username or email encountered | - | 500 (Internal Server Error) | Database or server error | - -### Get User - -- This endpoint allows retrieval of a single user's data from the database using the user's ID. - - > :bulb: The user ID refers to the MongoDB Object ID, a unique identifier automatically generated by MongoDB for each document in a collection. - -- HTTP Method: `GET` - -- Endpoint: http://localhost:3001/users/{userId} - -- Parameters - - Required: `userId` path parameter - - Example: `http://localhost:3001/users/60c72b2f9b1d4c3a2e5f8b4c` - -- Headers - - - Required: `Authorization: Bearer ` - - - Explanation: This endpoint requires the client to include a JWT (JSON Web Token) in the HTTP request header for authentication and authorization. This token is generated during the authentication process (i.e., login) and contains information about the user's identity. The server verifies this token to ensure that the client is authorized to access the data. - - - Auth Rules: - - - Admin users: Can retrieve any user's data. The server verifies the user associated with the JWT token is an admin user and allows access to the requested user's data. - - - Non-admin users: Can only retrieve their own data. The server checks if the user ID in the request URL matches the ID of the user associated with the JWT token. If it matches, the server returns the user's own data. - -- Responses: - - | Response Code | Explanation | - |-----------------------------|----------------------------------------------------------| - | 200 (OK) | Success, user data returned | - | 401 (Unauthorized) | Access denied due to missing/invalid/expired JWT | - | 403 (Forbidden) | Access denied for non-admin users accessing others' data | - | 404 (Not Found) | User with the specified ID not found | - | 500 (Internal Server Error) | Database or server error | - -### Get All Users - -- This endpoint allows retrieval of all users' data from the database. -- HTTP Method: `GET` -- Endpoint: http://localhost:3001/users -- Headers - - Required: `Authorization: Bearer ` - - Auth Rules: - - - Admin users: Can retrieve all users' data. The server verifies the user associated with the JWT token is an admin user and allows access to all users' data. - - - Non-admin users: Not allowed access. - -- Responses: - - | Response Code | Explanation | - |-----------------------------|--------------------------------------------------| - | 200 (OK) | Success, all user data returned | - | 401 (Unauthorized) | Access denied due to missing/invalid/expired JWT | - | 403 (Forbidden) | Access denied for non-admin users | - | 500 (Internal Server Error) | Database or server error | - -### Update User - -- This endpoint allows updating a user and their related data in the database using the user's ID. - -- HTTP Method: `PATCH` - -- Endpoint: http://localhost:3001/users/{userId} - -- Parameters - - Required: `userId` path parameter - -- Body - - At least one of the following fields is required: `username` (string), `email` (string), `password` (string) - - ```json - { - "username": "SampleUserName", - "email": "sample@gmail.com", - "password": "SecurePassword" - } - ``` - -- Headers - - Required: `Authorization: Bearer ` - - Auth Rules: - - - Admin users: Can update any user's data. The server verifies the user associated with the JWT token is an admin user and allows the update of requested user's data. - - - Non-admin users: Can only update their own data. The server checks if the user ID in the request URL matches the ID of the user associated with the JWT token. If it matches, the server updates the user's own data. - -- Responses: - - | Response Code | Explanation | - |-----------------------------|---------------------------------------------------------| - | 200 (OK) | User updated successfully, updated user data returned | - | 400 (Bad Request) | Missing fields | - | 401 (Unauthorized) | Access denied due to missing/invalid/expired JWT | - | 403 (Forbidden) | Access denied for non-admin users updating others' data | - | 404 (Not Found) | User with the specified ID not found | - | 409 (Conflict) | Duplicate username or email encountered | - | 500 (Internal Server Error) | Database or server error | - -### Update User Privilege - -- This endpoint allows updating a user’s privilege, i.e., promoting or demoting them from admin status. - -- HTTP Method: `PATCH` - -- Endpoint: http://localhost:3001/users/{userId} - -- Parameters - - Required: `userId` path parameter - -- Body - - Required: `isAdmin` (boolean) - - ```json - { - "isAdmin": true - } - ``` - -- Headers - - Required: `Authorization: Bearer ` - - Auth Rules: - - - Admin users: Can update any user's privilege. The server verifies the user associated with the JWT token is an admin user and allows the privilege update. - - Non-admin users: Not allowed access. - -> :bulb: You may need to manually assign admin status to the first user by directly editing the database document before using this endpoint. - -- Responses: - - | Response Code | Explanation | - |-----------------------------|-----------------------------------------------------------------| - | 200 (OK) | User privilege updated successfully, updated user data returned | - | 400 (Bad Request) | Missing fields | - | 401 (Unauthorized) | Access denied due to missing/invalid/expired JWT | - | 403 (Forbidden) | Access denied for non-admin users | - | 404 (Not Found) | User with the specified ID not found | - | 500 (Internal Server Error) | Database or server error | - -### Delete User - -- This endpoint allows deletion of a user and their related data from the database using the user's ID. -- HTTP Method: `DELETE` -- Endpoint: http://localhost:3001/users/{userId} -- Parameters - - - Required: `userId` path parameter -- Headers - - - Required: `Authorization: Bearer ` - - - Auth Rules: - - - Admin users: Can delete any user's data. The server verifies the user associated with the JWT token is an admin user and allows the deletion of requested user's data. - - - Non-admin users: Can only delete their own data. The server checks if the user ID in the request URL matches the ID of the user associated with the JWT token. If it matches, the server deletes the user's own data. -- Responses: - - | Response Code | Explanation | - |-----------------------------|---------------------------------------------------------| - | 200 (OK) | User deleted successfully | - | 401 (Unauthorized) | Access denied due to missing/invalid/expired JWT | - | 403 (Forbidden) | Access denied for non-admin users deleting others' data | - | 404 (Not Found) | User with the specified ID not found | - | 500 (Internal Server Error) | Database or server error | - -### Login - -- This endpoint allows a user to authenticate with an email and password and returns a JWT access token. The token is valid for 1 day and can be used subsequently to access protected resources. For example usage, refer to the [Authorization header section in the Get User endpoint](#auth-header). -- HTTP Method: `POST` -- Endpoint: http://localhost:3001/auth/login -- Body - - Required: `email` (string), `password` (string) - - ```json - { - "email": "sample@gmail.com", - "password": "SecurePassword" - } - ``` - -- Responses: - - | Response Code | Explanation | - |-----------------------------|----------------------------------------------------| - | 200 (OK) | Login successful, JWT token and user data returned | - | 400 (Bad Request) | Missing fields | - | 401 (Unauthorized) | Incorrect email or password | - | 500 (Internal Server Error) | Database or server error | - -### Verify Token - -- This endpoint allows one to verify a JWT access token to authenticate and retrieve the user's data associated with the token. -- HTTP Method: `GET` -- Endpoint: http://localhost:3001/auth/verify-token -- Headers - - Required: `Authorization: Bearer ` - -- Responses: - - | Response Code | Explanation | - |-----------------------------|----------------------------------------------------| - | 200 (OK) | Token verified, authenticated user's data returned | - | 401 (Unauthorized) | Missing/invalid/expired JWT | +# User Service Guide + +## Setting-up + +> :notebook: If you are familiar to MongoDB and wish to use a local instance, please feel free to do so. This guide utilizes MongoDB Cloud Services. + +1. Set up a MongoDB Shared Cluster by following the steps in this [Guide](./MongoDBSetup.md). + +2. After setting up, go to the Database Deployment Page. You would see a list of the Databases you have set up. Select `Connect` on the cluster you just created earlier on for User Service. + + ![alt text](./GuideAssets/ConnectCluster.png) + +3. Select the `Drivers` option, as we have to link to a Node.js App (User Service). + + ![alt text](./GuideAssets/DriverSelection.png) + +4. Select `Node.js` in the `Driver` pull-down menu, and copy the connection string. + + Notice, you may see `` in this connection string. We will be replacing this with the admin account password that we created earlier on when setting up the Shared Cluster. + + ![alt text](./GuideAssets/ConnectionString.png) + +5. In the `user` directory, create a copy of the `.env.sample` file and name it `.env`. + +6. Update the `DB_CLOUD_URI` of the `.env` file, and paste the string we copied earlier in step 4. Also remember to replace the `` placeholder with the actual password. + +## Running User Service + +1. Open Command Line/Terminal and navigate into the `user` directory. + +2. Run the command: `npm install`. This will install all the necessary dependencies. + +3. Run the command `npm start` to start the User Service in production mode, or use `npm run dev` for development mode, which includes features like automatic server restart when you make code changes. + +4. Using applications like Postman, you can interact with the User Service on port 3001. If you wish to change this, please update the `.env` file. + +## User Service API Guide + +### Create User + +- This endpoint allows adding a new user to the database (i.e., user registration). + +- HTTP Method: `POST` + +- Endpoint: http://localhost:3001/users + +- Body + - Required: `username` (string), `email` (string), `password` (string) + + ```json + { + "username": "SampleUserName", + "email": "sample@gmail.com", + "password": "SecurePassword" + } + ``` + +- Responses: + + | Response Code | Explanation | + |-----------------------------|-------------------------------------------------------| + | 201 (Created) | User created successfully, created user data returned | + | 400 (Bad Request) | Missing fields | + | 409 (Conflict) | Duplicate username or email encountered | + | 500 (Internal Server Error) | Database or server error | + +### Get User + +- This endpoint allows retrieval of a single user's data from the database using the user's ID. + + > :bulb: The user ID refers to the MongoDB Object ID, a unique identifier automatically generated by MongoDB for each document in a collection. + +- HTTP Method: `GET` + +- Endpoint: http://localhost:3001/users/{userId} + +- Parameters + - Required: `userId` path parameter + - Example: `http://localhost:3001/users/60c72b2f9b1d4c3a2e5f8b4c` + +- Headers + + - Required: `Authorization: Bearer ` + + - Explanation: This endpoint requires the client to include a JWT (JSON Web Token) in the HTTP request header for authentication and authorization. This token is generated during the authentication process (i.e., login) and contains information about the user's identity. The server verifies this token to ensure that the client is authorized to access the data. + + - Auth Rules: + + - Admin users: Can retrieve any user's data. The server verifies the user associated with the JWT token is an admin user and allows access to the requested user's data. + + - Non-admin users: Can only retrieve their own data. The server checks if the user ID in the request URL matches the ID of the user associated with the JWT token. If it matches, the server returns the user's own data. + +- Responses: + + | Response Code | Explanation | + |-----------------------------|----------------------------------------------------------| + | 200 (OK) | Success, user data returned | + | 401 (Unauthorized) | Access denied due to missing/invalid/expired JWT | + | 403 (Forbidden) | Access denied for non-admin users accessing others' data | + | 404 (Not Found) | User with the specified ID not found | + | 500 (Internal Server Error) | Database or server error | + +### Get All Users + +- This endpoint allows retrieval of all users' data from the database. +- HTTP Method: `GET` +- Endpoint: http://localhost:3001/users +- Headers + - Required: `Authorization: Bearer ` + - Auth Rules: + + - Admin users: Can retrieve all users' data. The server verifies the user associated with the JWT token is an admin user and allows access to all users' data. + + - Non-admin users: Not allowed access. + +- Responses: + + | Response Code | Explanation | + |-----------------------------|--------------------------------------------------| + | 200 (OK) | Success, all user data returned | + | 401 (Unauthorized) | Access denied due to missing/invalid/expired JWT | + | 403 (Forbidden) | Access denied for non-admin users | + | 500 (Internal Server Error) | Database or server error | + +### Update User + +- This endpoint allows updating a user and their related data in the database using the user's ID. + +- HTTP Method: `PATCH` + +- Endpoint: http://localhost:3001/users/{userId} + +- Parameters + - Required: `userId` path parameter + +- Body + - At least one of the following fields is required: `username` (string), `email` (string), `password` (string) + + ```json + { + "username": "SampleUserName", + "email": "sample@gmail.com", + "password": "SecurePassword" + } + ``` + +- Headers + - Required: `Authorization: Bearer ` + - Auth Rules: + + - Admin users: Can update any user's data. The server verifies the user associated with the JWT token is an admin user and allows the update of requested user's data. + + - Non-admin users: Can only update their own data. The server checks if the user ID in the request URL matches the ID of the user associated with the JWT token. If it matches, the server updates the user's own data. + +- Responses: + + | Response Code | Explanation | + |-----------------------------|---------------------------------------------------------| + | 200 (OK) | User updated successfully, updated user data returned | + | 400 (Bad Request) | Missing fields | + | 401 (Unauthorized) | Access denied due to missing/invalid/expired JWT | + | 403 (Forbidden) | Access denied for non-admin users updating others' data | + | 404 (Not Found) | User with the specified ID not found | + | 409 (Conflict) | Duplicate username or email encountered | + | 500 (Internal Server Error) | Database or server error | + +### Update User Privilege + +- This endpoint allows updating a user’s privilege, i.e., promoting or demoting them from admin status. + +- HTTP Method: `PATCH` + +- Endpoint: http://localhost:3001/users/{userId} + +- Parameters + - Required: `userId` path parameter + +- Body + - Required: `isAdmin` (boolean) + + ```json + { + "isAdmin": true + } + ``` + +- Headers + - Required: `Authorization: Bearer ` + - Auth Rules: + + - Admin users: Can update any user's privilege. The server verifies the user associated with the JWT token is an admin user and allows the privilege update. + - Non-admin users: Not allowed access. + +> :bulb: You may need to manually assign admin status to the first user by directly editing the database document before using this endpoint. + +- Responses: + + | Response Code | Explanation | + |-----------------------------|-----------------------------------------------------------------| + | 200 (OK) | User privilege updated successfully, updated user data returned | + | 400 (Bad Request) | Missing fields | + | 401 (Unauthorized) | Access denied due to missing/invalid/expired JWT | + | 403 (Forbidden) | Access denied for non-admin users | + | 404 (Not Found) | User with the specified ID not found | + | 500 (Internal Server Error) | Database or server error | + +### Delete User + +- This endpoint allows deletion of a user and their related data from the database using the user's ID. +- HTTP Method: `DELETE` +- Endpoint: http://localhost:3001/users/{userId} +- Parameters + + - Required: `userId` path parameter +- Headers + + - Required: `Authorization: Bearer ` + + - Auth Rules: + + - Admin users: Can delete any user's data. The server verifies the user associated with the JWT token is an admin user and allows the deletion of requested user's data. + + - Non-admin users: Can only delete their own data. The server checks if the user ID in the request URL matches the ID of the user associated with the JWT token. If it matches, the server deletes the user's own data. +- Responses: + + | Response Code | Explanation | + |-----------------------------|---------------------------------------------------------| + | 200 (OK) | User deleted successfully | + | 401 (Unauthorized) | Access denied due to missing/invalid/expired JWT | + | 403 (Forbidden) | Access denied for non-admin users deleting others' data | + | 404 (Not Found) | User with the specified ID not found | + | 500 (Internal Server Error) | Database or server error | + +### Login + +- This endpoint allows a user to authenticate with an email and password and returns a JWT access token. The token is valid for 1 day and can be used subsequently to access protected resources. For example usage, refer to the [Authorization header section in the Get User endpoint](#auth-header). +- HTTP Method: `POST` +- Endpoint: http://localhost:3001/auth/login +- Body + - Required: `email` (string), `password` (string) + + ```json + { + "email": "sample@gmail.com", + "password": "SecurePassword" + } + ``` + +- Responses: + + | Response Code | Explanation | + |-----------------------------|----------------------------------------------------| + | 200 (OK) | Login successful, JWT token and user data returned | + | 400 (Bad Request) | Missing fields | + | 401 (Unauthorized) | Incorrect email or password | + | 500 (Internal Server Error) | Database or server error | + +### Verify Token + +- This endpoint allows one to verify a JWT access token to authenticate and retrieve the user's data associated with the token. +- HTTP Method: `GET` +- Endpoint: http://localhost:3001/auth/verify-token +- Headers + - Required: `Authorization: Bearer ` + +- Responses: + + | Response Code | Explanation | + |-----------------------------|----------------------------------------------------| + | 200 (OK) | Token verified, authenticated user's data returned | + | 401 (Unauthorized) | Missing/invalid/expired JWT | | 500 (Internal Server Error) | Database or server error | \ No newline at end of file diff --git a/services/user-service/index.js b/services/user/index.js similarity index 95% rename from services/user-service/index.js rename to services/user/index.js index dc8848f13e..8063892571 100644 --- a/services/user-service/index.js +++ b/services/user/index.js @@ -1,59 +1,59 @@ -import express from "express"; -import cors from "cors"; - -import userRoutes from "./src/routes/user-routes.js"; -import authRoutes from "./src/routes/auth-routes.js"; - -const app = express(); - -app.use(express.urlencoded({ extended: true })); -app.use(express.json()); -app.use(cors()); // config cors so that front-end can use -app.options("*", cors()); - -// To handle CORS Errors -app.use((req, res, next) => { - res.header("Access-Control-Allow-Origin", "*"); // "*" -> Allow all links to access - - res.header( - "Access-Control-Allow-Headers", - "Origin, X-Requested-With, Content-Type, Accept, Authorization", - ); - - // Browsers usually send this before PUT or POST Requests - if (req.method === "OPTIONS") { - res.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, PATCH"); - return res.status(200).json({}); - } - - // Continue Route Processing - next(); -}); - -app.use("/users", userRoutes); -app.use("/auth", authRoutes); - -app.get("/", (req, res, next) => { - console.log("Sending Greetings!"); - res.json({ - message: "Hello World from user-service", - }); -}); - -// Handle When No Route Match Is Found -app.use((req, res, next) => { - const error = new Error("Route Not Found"); - error.status = 404; - next(error); -}); - -app.use((error, req, res, next) => { - res.status(error.status || 500); - res.json({ - error: { - message: error.message, - }, - }); -}); - -export default app; +import express from "express"; +import cors from "cors"; + +import userRoutes from "./src/routes/user-routes.js"; +import authRoutes from "./src/routes/auth-routes.js"; + +const app = express(); + +app.use(express.urlencoded({ extended: true })); +app.use(express.json()); +app.use(cors()); // config cors so that front-end can use +app.options("*", cors()); + +// To handle CORS Errors +app.use((req, res, next) => { + res.header("Access-Control-Allow-Origin", "*"); // "*" -> Allow all links to access + + res.header( + "Access-Control-Allow-Headers", + "Origin, X-Requested-With, Content-Type, Accept, Authorization", + ); + + // Browsers usually send this before PUT or POST Requests + if (req.method === "OPTIONS") { + res.header("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, PATCH"); + return res.status(200).json({}); + } + + // Continue Route Processing + next(); +}); + +app.use("/users", userRoutes); +app.use("/auth", authRoutes); + +app.get("/", (req, res, next) => { + console.log("Sending Greetings!"); + res.json({ + message: "Hello World from user-service", + }); +}); + +// Handle When No Route Match Is Found +app.use((req, res, next) => { + const error = new Error("Route Not Found"); + error.status = 404; + next(error); +}); + +app.use((error, req, res, next) => { + res.status(error.status || 500); + res.json({ + error: { + message: error.message, + }, + }); +}); + +export default app; diff --git a/services/user-service/package-lock.json b/services/user/package-lock.json similarity index 97% rename from services/user-service/package-lock.json rename to services/user/package-lock.json index 18ee790f6c..a991fba429 100644 --- a/services/user-service/package-lock.json +++ b/services/user/package-lock.json @@ -1,3197 +1,3197 @@ -{ - "name": "user-service", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "user-service", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "bcryptjs": "^2.4.3", - "cors": "^2.8.5", - "dotenv": "^16.4.5", - "express": "^4.19.2", - "jsonwebtoken": "^9.0.2", - "mongoose": "^8.5.4" - }, - "devDependencies": { - "@types/chai": "^5.0.0", - "@types/mocha": "^10.0.8", - "@types/node": "^22.6.1", - "chai": "^5.1.1", - "chai-http": "^5.0.0", - "mocha": "^10.7.3", - "mongodb-memory-server": "^10.0.1", - "nodemon": "^3.1.4", - "ts-node": "^10.9.2", - "typescript": "^5.6.2" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.8.tgz", - "integrity": "sha512-qKwC/M/nNNaKUBMQ0nuzm47b7ZYWQHN3pcXq4IIcoSBc2hOIrflAxJduIvvqmhoz3gR2TacTAs8vlsCVPkiEdQ==", - "dependencies": { - "sparse-bitfield": "^3.0.3" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", - "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/chai": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.0.0.tgz", - "integrity": "sha512-+DwhEHAaFPPdJ2ral3kNHFQXnTfscEEFsUxzD+d7nlcLrFK23JtNjH71RGasTcHb88b4vVi4mTyfpf8u2L8bdA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mocha": { - "version": "10.0.8", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.8.tgz", - "integrity": "sha512-HfMcUmy9hTMJh66VNcmeC9iVErIZJli2bszuXc6julh5YGuRb/W5OnkHjwLNYdFlMis0sY3If5SEAp+PktdJjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.6.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz", - "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@types/webidl-conversions": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", - "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" - }, - "node_modules/@types/whatwg-url": { - "version": "11.0.5", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", - "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", - "dependencies": { - "@types/webidl-conversions": "*" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true, - "license": "MIT" - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/async-mutex": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", - "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/bare-events": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", - "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", - "dev": true, - "license": "Apache-2.0", - "optional": true - }, - "node_modules/bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", - "license": "MIT" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "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" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true, - "license": "ISC" - }, - "node_modules/bson": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", - "integrity": "sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==", - "engines": { - "node": ">=16.20.1" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "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.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chai": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", - "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^2.0.1", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "loupe": "^3.1.0", - "pathval": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/chai-http": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-5.0.0.tgz", - "integrity": "sha512-nWtyQ0/+VSayMEESPbBE2v5HYd24Jh67Alh9/dxecfZ4viFAsGN3leFwy3EsNu1DbEi/HsTVW+9pT8p79a2J+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "charset": "^1.0.1", - "cookiejar": "^2.1.4", - "is-ip": "^5.0.1", - "methods": "^1.1.2", - "qs": "^6.12.1", - "superagent": "^9" - }, - "engines": { - "node": ">=18.20.0" - } - }, - "node_modules/chai-http/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/charset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", - "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/check-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", - "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 16" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/clone-regexp": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-3.0.0.tgz", - "integrity": "sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-regexp": "^3.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, - "license": "MIT" - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-hrtime": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz", - "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", - "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "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" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true, - "license": "MIT" - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", - "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", - "dev": true, - "license": "MIT", - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function-timeout": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-0.1.1.tgz", - "integrity": "sha512-0NVVC0TaP7dSTvn1yMiy6d6Q8gifzbvQafO46RtLG/kHJUBNd+pVRGOBoK44wNBvtSPUJRfdVvkFdD3p0xvyZg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "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.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ip-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", - "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-ip": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-5.0.1.tgz", - "integrity": "sha512-FCsGHdlrOnZQcp0+XT5a+pYowf33itBalCl+7ovNXC/7o5BhIpG14M3OrpPPdBSIQJCm+0M5+9mO7S9VVTTCFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "ip-regex": "^5.0.0", - "super-regex": "^0.2.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regexp": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz", - "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/kareem": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", - "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/loupe": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", - "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha": { - "version": "10.7.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", - "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/mongodb": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.7.0.tgz", - "integrity": "sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==", - "dependencies": { - "@mongodb-js/saslprep": "^1.1.5", - "bson": "^6.7.0", - "mongodb-connection-string-url": "^3.0.0" - }, - "engines": { - "node": ">=16.20.1" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.1.0", - "gcp-metadata": "^5.2.0", - "kerberos": "^2.0.1", - "mongodb-client-encryption": ">=6.0.0 <7", - "snappy": "^7.2.2", - "socks": "^2.7.1" - }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - }, - "@mongodb-js/zstd": { - "optional": true - }, - "gcp-metadata": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "snappy": { - "optional": true - }, - "socks": { - "optional": true - } - } - }, - "node_modules/mongodb-connection-string-url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", - "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", - "dependencies": { - "@types/whatwg-url": "^11.0.2", - "whatwg-url": "^13.0.0" - } - }, - "node_modules/mongodb-memory-server": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mongodb-memory-server/-/mongodb-memory-server-10.0.1.tgz", - "integrity": "sha512-Zoeel0Hn+vPuFESoLJvaHyblu7gWl7hwxsMljetzhEnR7NWaUIvaP7FIu/EKu55Owks8PiuxReKflJWqARbLDw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "mongodb-memory-server-core": "10.0.1", - "tslib": "^2.6.3" - }, - "engines": { - "node": ">=16.20.1" - } - }, - "node_modules/mongodb-memory-server-core": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mongodb-memory-server-core/-/mongodb-memory-server-core-10.0.1.tgz", - "integrity": "sha512-sJGqoS3saNNJKQjocrqxRISUP6g2N6/D+k1JEqKYo2p9YzUOOvEopxROyvBlqkiVa67/vdf2FV4v+rOvNIHURg==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-mutex": "^0.5.0", - "camelcase": "^6.3.0", - "debug": "^4.3.5", - "find-cache-dir": "^3.3.2", - "follow-redirects": "^1.15.6", - "https-proxy-agent": "^7.0.5", - "mongodb": "^6.7.0", - "new-find-package-json": "^2.0.0", - "semver": "^7.6.3", - "tar-stream": "^3.1.7", - "tslib": "^2.6.3", - "yauzl": "^3.1.3" - }, - "engines": { - "node": ">=16.20.1" - } - }, - "node_modules/mongodb-memory-server-core/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mongodb-memory-server-core/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/mongoose": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.5.4.tgz", - "integrity": "sha512-nG3eehhWf9l1q80WuHvp5DV+4xDNFpDWLE5ZgcFD5tslUV2USJ56ogun8gaZ62MKAocJnoStjAdno08b8U57hg==", - "dependencies": { - "bson": "^6.7.0", - "kareem": "2.6.3", - "mongodb": "6.7.0", - "mpath": "0.9.0", - "mquery": "5.0.0", - "ms": "2.1.3", - "sift": "17.1.3" - }, - "engines": { - "node": ">=16.20.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mongoose" - } - }, - "node_modules/mongoose/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mpath": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", - "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mquery": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", - "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", - "dependencies": { - "debug": "4.x" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/mquery/node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mquery/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/new-find-package-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/new-find-package-json/-/new-find-package-json-2.0.0.tgz", - "integrity": "sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/new-find-package-json/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/new-find-package-json/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/nodemon": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz", - "integrity": "sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/pathval": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", - "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.16" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true, - "license": "MIT" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "dev": true, - "license": "MIT" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "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" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sift": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", - "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", - "dependencies": { - "memory-pager": "^1.0.2" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/streamx": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", - "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", - "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/super-regex": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-0.2.0.tgz", - "integrity": "sha512-WZzIx3rC1CvbMDloLsVw0lkZVKJWbrkJ0k1ghKFmcnPrW1+jWbgTkTEWVtD9lMdmI4jZEz40+naBxl1dCUhXXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-regexp": "^3.0.0", - "function-timeout": "^0.1.0", - "time-span": "^5.1.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/superagent": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", - "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "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.11.0" - }, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/superagent/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/superagent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tar-stream": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", - "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/text-decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz", - "integrity": "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "b4a": "^1.6.4" - } - }, - "node_modules/time-span": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", - "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "convert-hrtime": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", - "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", - "dev": true, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tr46": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", - "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", - "dependencies": { - "punycode": "^2.3.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "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 - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "dev": true, - "license": "0BSD" - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-url": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", - "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", - "dependencies": { - "tr46": "^4.1.1", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yauzl": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.1.3.tgz", - "integrity": "sha512-JCCdmlJJWv7L0q/KylOekyRaUrdEoUxWkWVcgorosTROCFWiS9p2NNPE9Yb91ak7b1N5SxAZEliWpspbZccivw==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-crc32": "~0.2.3", - "pend": "~1.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} +{ + "name": "user-service", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "user-service", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "bcryptjs": "^2.4.3", + "cors": "^2.8.5", + "dotenv": "^16.4.5", + "express": "^4.19.2", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.5.4" + }, + "devDependencies": { + "@types/chai": "^5.0.0", + "@types/mocha": "^10.0.8", + "@types/node": "^22.6.1", + "chai": "^5.1.1", + "chai-http": "^5.0.0", + "mocha": "^10.7.3", + "mongodb-memory-server": "^10.0.1", + "nodemon": "^3.1.4", + "ts-node": "^10.9.2", + "typescript": "^5.6.2" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.8.tgz", + "integrity": "sha512-qKwC/M/nNNaKUBMQ0nuzm47b7ZYWQHN3pcXq4IIcoSBc2hOIrflAxJduIvvqmhoz3gR2TacTAs8vlsCVPkiEdQ==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.0.0.tgz", + "integrity": "sha512-+DwhEHAaFPPdJ2ral3kNHFQXnTfscEEFsUxzD+d7nlcLrFK23JtNjH71RGasTcHb88b4vVi4mTyfpf8u2L8bdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mocha": { + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.8.tgz", + "integrity": "sha512-HfMcUmy9hTMJh66VNcmeC9iVErIZJli2bszuXc6julh5YGuRb/W5OnkHjwLNYdFlMis0sY3If5SEAp+PktdJjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.6.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.6.1.tgz", + "integrity": "sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/async-mutex": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.5.0.tgz", + "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/b4a": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/bare-events": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "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" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/bson": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.8.0.tgz", + "integrity": "sha512-iOJg8pr7wq2tg/zSlCCHMi3hMm5JTOxLTagf3zxhcenHsFp+c6uOs6K7W5UE7A4QIJGtqh/ZovFNMP4mOPJynQ==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "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.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chai": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", + "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/chai-http": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-5.0.0.tgz", + "integrity": "sha512-nWtyQ0/+VSayMEESPbBE2v5HYd24Jh67Alh9/dxecfZ4viFAsGN3leFwy3EsNu1DbEi/HsTVW+9pT8p79a2J+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "charset": "^1.0.1", + "cookiejar": "^2.1.4", + "is-ip": "^5.0.1", + "methods": "^1.1.2", + "qs": "^6.12.1", + "superagent": "^9" + }, + "engines": { + "node": ">=18.20.0" + } + }, + "node_modules/chai-http/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/charset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/charset/-/charset-1.0.1.tgz", + "integrity": "sha512-6dVyOOYjpfFcL1Y4qChrAoQLRHvj2ziyhcm0QJlhOcAhykL/k1kTUPbeo+87MNRTRdk2OIIsIXbuF3x2wi5EXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone-regexp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-3.0.0.tgz", + "integrity": "sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-regexp": "^3.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-hrtime": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz", + "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "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" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "license": "MIT", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.1.tgz", + "integrity": "sha512-WJWKelbRHN41m5dumb0/k8TeAx7Id/y3a+Z7QfhxP/htI9Js5zYaEDtG8uMgG0vM0lOlqnmjE99/kfpOYi/0Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-0.1.1.tgz", + "integrity": "sha512-0NVVC0TaP7dSTvn1yMiy6d6Q8gifzbvQafO46RtLG/kHJUBNd+pVRGOBoK44wNBvtSPUJRfdVvkFdD3p0xvyZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "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.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ip-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-ip": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-5.0.1.tgz", + "integrity": "sha512-FCsGHdlrOnZQcp0+XT5a+pYowf33itBalCl+7ovNXC/7o5BhIpG14M3OrpPPdBSIQJCm+0M5+9mO7S9VVTTCFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-regex": "^5.0.0", + "super-regex": "^0.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regexp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz", + "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/loupe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", + "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.7.3.tgz", + "integrity": "sha512-uQWxAu44wwiACGqjbPYmjo7Lg8sFrS3dQe7PP2FQI+woptP4vZXSMcfMyFL/e1yFEeEpV4RtyTpZROOKmxis+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mongodb": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.7.0.tgz", + "integrity": "sha512-TMKyHdtMcO0fYBNORiYdmM25ijsHs+Njs963r4Tro4OQZzqYigAzYQouwWRg4OIaiLRUEGUh/1UAcH5lxdSLIA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.7.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongodb-memory-server": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mongodb-memory-server/-/mongodb-memory-server-10.0.1.tgz", + "integrity": "sha512-Zoeel0Hn+vPuFESoLJvaHyblu7gWl7hwxsMljetzhEnR7NWaUIvaP7FIu/EKu55Owks8PiuxReKflJWqARbLDw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "mongodb-memory-server-core": "10.0.1", + "tslib": "^2.6.3" + }, + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/mongodb-memory-server-core": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/mongodb-memory-server-core/-/mongodb-memory-server-core-10.0.1.tgz", + "integrity": "sha512-sJGqoS3saNNJKQjocrqxRISUP6g2N6/D+k1JEqKYo2p9YzUOOvEopxROyvBlqkiVa67/vdf2FV4v+rOvNIHURg==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-mutex": "^0.5.0", + "camelcase": "^6.3.0", + "debug": "^4.3.5", + "find-cache-dir": "^3.3.2", + "follow-redirects": "^1.15.6", + "https-proxy-agent": "^7.0.5", + "mongodb": "^6.7.0", + "new-find-package-json": "^2.0.0", + "semver": "^7.6.3", + "tar-stream": "^3.1.7", + "tslib": "^2.6.3", + "yauzl": "^3.1.3" + }, + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mongodb-memory-server-core/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mongoose": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.5.4.tgz", + "integrity": "sha512-nG3eehhWf9l1q80WuHvp5DV+4xDNFpDWLE5ZgcFD5tslUV2USJ56ogun8gaZ62MKAocJnoStjAdno08b8U57hg==", + "dependencies": { + "bson": "^6.7.0", + "kareem": "2.6.3", + "mongodb": "6.7.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/new-find-package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/new-find-package-json/-/new-find-package-json-2.0.0.tgz", + "integrity": "sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/new-find-package-json/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/new-find-package-json/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nodemon": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz", + "integrity": "sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true, + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "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" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamx": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", + "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/super-regex": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-0.2.0.tgz", + "integrity": "sha512-WZzIx3rC1CvbMDloLsVw0lkZVKJWbrkJ0k1ghKFmcnPrW1+jWbgTkTEWVtD9lMdmI4jZEz40+naBxl1dCUhXXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-regexp": "^3.0.0", + "function-timeout": "^0.1.0", + "time-span": "^5.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-9.0.2.tgz", + "integrity": "sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "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.11.0" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/text-decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz", + "integrity": "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/time-span": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", + "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "convert-hrtime": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "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 + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yauzl": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.1.3.tgz", + "integrity": "sha512-JCCdmlJJWv7L0q/KylOekyRaUrdEoUxWkWVcgorosTROCFWiS9p2NNPE9Yb91ak7b1N5SxAZEliWpspbZccivw==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/services/user-service/package.json b/services/user/package.json similarity index 95% rename from services/user-service/package.json rename to services/user/package.json index 96081d7905..b726ec330f 100644 --- a/services/user-service/package.json +++ b/services/user/package.json @@ -1,35 +1,35 @@ -{ - "name": "user-service", - "version": "1.0.0", - "description": "", - "main": "./src/index.js", - "type": "module", - "scripts": { - "dev": "nodemon ./src/server.js", - "start": "node ./src/server.js", - "test": "mocha --require ts-node/register tests/**/*.spec.ts --exit" - }, - "keywords": [], - "author": "", - "license": "ISC", - "devDependencies": { - "@types/chai": "^5.0.0", - "@types/mocha": "^10.0.8", - "@types/node": "^22.6.1", - "chai": "^5.1.1", - "chai-http": "^5.0.0", - "mocha": "^10.7.3", - "mongodb-memory-server": "^10.0.1", - "nodemon": "^3.1.4", - "ts-node": "^10.9.2", - "typescript": "^5.6.2" - }, - "dependencies": { - "bcryptjs": "^2.4.3", - "cors": "^2.8.5", - "dotenv": "^16.4.5", - "express": "^4.19.2", - "jsonwebtoken": "^9.0.2", - "mongoose": "^8.5.4" - } -} +{ + "name": "user-service", + "version": "1.0.0", + "description": "", + "main": "./src/index.js", + "type": "module", + "scripts": { + "dev": "nodemon ./src/server.js", + "start": "node ./src/server.js", + "test": "mocha --require ts-node/register tests/**/*.spec.ts --exit" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "@types/chai": "^5.0.0", + "@types/mocha": "^10.0.8", + "@types/node": "^22.6.1", + "chai": "^5.1.1", + "chai-http": "^5.0.0", + "mocha": "^10.7.3", + "mongodb-memory-server": "^10.0.1", + "nodemon": "^3.1.4", + "ts-node": "^10.9.2", + "typescript": "^5.6.2" + }, + "dependencies": { + "bcryptjs": "^2.4.3", + "cors": "^2.8.5", + "dotenv": "^16.4.5", + "express": "^4.19.2", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.5.4" + } +} diff --git a/services/user-service/server.js b/services/user/server.js similarity index 96% rename from services/user-service/server.js rename to services/user/server.js index 2099411ce9..d7376eb68a 100644 --- a/services/user-service/server.js +++ b/services/user/server.js @@ -1,19 +1,19 @@ -import http from "http"; -import index from "./index.js"; -import "dotenv/config"; -import { connectToDB } from "./src/model/repository.js"; - -const port = process.env.USER_SERVICE_PORT || 3001; - -const server = http.createServer(index); - -await connectToDB().then(() => { - console.log("MongoDB Connected!"); - - server.listen(port); - console.log("User service server listening on http://localhost:" + port); -}).catch((err) => { - console.error("Failed to connect to DB"); - console.error(err); -}); - +import http from "http"; +import index from "./index.js"; +import "dotenv/config"; +import { connectToDB } from "./src/model/repository.js"; + +const port = process.env.USER_SERVICE_PORT || 3001; + +const server = http.createServer(index); + +await connectToDB().then(() => { + console.log("MongoDB Connected!"); + + server.listen(port); + console.log("User service server listening on http://localhost:" + port); +}).catch((err) => { + console.error("Failed to connect to DB"); + console.error(err); +}); + diff --git a/services/user-service/src/GuideAssets/AddIPAddress.png b/services/user/src/GuideAssets/AddIPAddress.png similarity index 100% rename from services/user-service/src/GuideAssets/AddIPAddress.png rename to services/user/src/GuideAssets/AddIPAddress.png diff --git a/services/user-service/src/GuideAssets/ConnectCluster.png b/services/user/src/GuideAssets/ConnectCluster.png similarity index 100% rename from services/user-service/src/GuideAssets/ConnectCluster.png rename to services/user/src/GuideAssets/ConnectCluster.png diff --git a/services/user-service/src/GuideAssets/ConnectionString.png b/services/user/src/GuideAssets/ConnectionString.png similarity index 100% rename from services/user-service/src/GuideAssets/ConnectionString.png rename to services/user/src/GuideAssets/ConnectionString.png diff --git a/services/user-service/src/GuideAssets/Creation.png b/services/user/src/GuideAssets/Creation.png similarity index 100% rename from services/user-service/src/GuideAssets/Creation.png rename to services/user/src/GuideAssets/Creation.png diff --git a/services/user-service/src/GuideAssets/DriverSelection.png b/services/user/src/GuideAssets/DriverSelection.png similarity index 100% rename from services/user-service/src/GuideAssets/DriverSelection.png rename to services/user/src/GuideAssets/DriverSelection.png diff --git a/services/user-service/src/GuideAssets/IPWhitelisting.png b/services/user/src/GuideAssets/IPWhitelisting.png similarity index 100% rename from services/user-service/src/GuideAssets/IPWhitelisting.png rename to services/user/src/GuideAssets/IPWhitelisting.png diff --git a/services/user-service/src/GuideAssets/Network.png b/services/user/src/GuideAssets/Network.png similarity index 100% rename from services/user-service/src/GuideAssets/Network.png rename to services/user/src/GuideAssets/Network.png diff --git a/services/user-service/src/GuideAssets/Security.png b/services/user/src/GuideAssets/Security.png similarity index 100% rename from services/user-service/src/GuideAssets/Security.png rename to services/user/src/GuideAssets/Security.png diff --git a/services/user-service/src/GuideAssets/Selection.png b/services/user/src/GuideAssets/Selection.png similarity index 100% rename from services/user-service/src/GuideAssets/Selection.png rename to services/user/src/GuideAssets/Selection.png diff --git a/services/user-service/src/GuideAssets/Selection1.png b/services/user/src/GuideAssets/Selection1.png similarity index 100% rename from services/user-service/src/GuideAssets/Selection1.png rename to services/user/src/GuideAssets/Selection1.png diff --git a/services/user-service/src/GuideAssets/Selection2.png b/services/user/src/GuideAssets/Selection2.png similarity index 100% rename from services/user-service/src/GuideAssets/Selection2.png rename to services/user/src/GuideAssets/Selection2.png diff --git a/services/user-service/src/GuideAssets/Selection3.png b/services/user/src/GuideAssets/Selection3.png similarity index 100% rename from services/user-service/src/GuideAssets/Selection3.png rename to services/user/src/GuideAssets/Selection3.png diff --git a/services/user-service/src/GuideAssets/Selection4.png b/services/user/src/GuideAssets/Selection4.png similarity index 100% rename from services/user-service/src/GuideAssets/Selection4.png rename to services/user/src/GuideAssets/Selection4.png diff --git a/services/user-service/src/GuideAssets/SidePane.png b/services/user/src/GuideAssets/SidePane.png similarity index 100% rename from services/user-service/src/GuideAssets/SidePane.png rename to services/user/src/GuideAssets/SidePane.png diff --git a/services/user-service/src/controller/auth-controller.js b/services/user/src/controller/auth-controller.js similarity index 100% rename from services/user-service/src/controller/auth-controller.js rename to services/user/src/controller/auth-controller.js diff --git a/services/user-service/src/controller/user-controller.js b/services/user/src/controller/user-controller.js similarity index 100% rename from services/user-service/src/controller/user-controller.js rename to services/user/src/controller/user-controller.js diff --git a/services/user-service/src/middleware/basic-access-control.js b/services/user/src/middleware/basic-access-control.js similarity index 100% rename from services/user-service/src/middleware/basic-access-control.js rename to services/user/src/middleware/basic-access-control.js diff --git a/services/user-service/src/model/repository.js b/services/user/src/model/repository.js similarity index 100% rename from services/user-service/src/model/repository.js rename to services/user/src/model/repository.js diff --git a/services/user-service/src/model/user-model.js b/services/user/src/model/user-model.js similarity index 100% rename from services/user-service/src/model/user-model.js rename to services/user/src/model/user-model.js diff --git a/services/user-service/src/model/user-orm.js b/services/user/src/model/user-orm.js similarity index 100% rename from services/user-service/src/model/user-orm.js rename to services/user/src/model/user-orm.js diff --git a/services/user-service/src/routes/auth-routes.js b/services/user/src/routes/auth-routes.js similarity index 100% rename from services/user-service/src/routes/auth-routes.js rename to services/user/src/routes/auth-routes.js diff --git a/services/user-service/src/routes/user-routes.js b/services/user/src/routes/user-routes.js similarity index 100% rename from services/user-service/src/routes/user-routes.js rename to services/user/src/routes/user-routes.js diff --git a/services/user-service/tests/endpointTests/basicEndpointTesting.spec.ts b/services/user/tests/endpointTests/basicEndpointTesting.spec.ts similarity index 100% rename from services/user-service/tests/endpointTests/basicEndpointTesting.spec.ts rename to services/user/tests/endpointTests/basicEndpointTesting.spec.ts From 7f27325894b41cdc2dfeb9c001ac160694515b4e Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 27 Sep 2024 21:46:47 +0800 Subject: [PATCH 115/188] Fix minor user service issues * Remove orphan history file * Move `index.js` and `server.js` to the correct directory * Reduce use of port --- .env.sample | 2 -- docker-compose.yml | 7 ++--- services/history/package.json | 47 ------------------------------- services/question/src/index.ts | 2 +- services/user/.env.sample | 2 +- services/user/Dockerfile | 2 +- services/user/{ => src}/index.js | 4 +-- services/user/{ => src}/server.js | 5 ++-- 8 files changed, 9 insertions(+), 62 deletions(-) delete mode 100644 services/history/package.json rename services/user/{ => src}/index.js (92%) rename services/user/{ => src}/server.js (77%) diff --git a/.env.sample b/.env.sample index 6020f334c5..b572969a2b 100644 --- a/.env.sample +++ b/.env.sample @@ -6,12 +6,10 @@ QUESTION_DB_CLOUD_URI= QUESTION_DB_LOCAL_URI=mongodb://question-db:27017/question QUESTION_DB_USERNAME=user QUESTION_DB_PASSWORD=password -QUESTION_SERVICE_PORT=8081 # User Service USER_SERVICE_CLOUD_URI=mongodb+srv://admin:@cluster0.uo0vu.mongodb.net/?retryWrites=true&w=majority&appName=Cluster0 USER_SERVICE_LOCAL_URI=mongodb://127.0.0.1:27017/peerprepUserServiceDB -USER_SERVICE_PORT=3001 # Will use cloud MongoDB Atlas database ENV=PROD diff --git a/docker-compose.yml b/docker-compose.yml index 5d91ecd405..43ed7ca15a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -21,13 +21,12 @@ services: context: services/question dockerfile: Dockerfile ports: - - "${QUESTION_SERVICE_PORT}:${QUESTION_SERVICE_PORT}" + - 8081:8081 environment: DB_CLOUD_URI: ${QUESTION_DB_CLOUD_URI} DB_LOCAL_URI: ${QUESTION_DB_LOCAL_URI} DB_USERNAME: ${QUESTION_DB_USERNAME} DB_PASSWORD: ${QUESTION_DB_PASSWORD} - QUESTION_SERVICE_PORT: ${QUESTION_SERVICE_PORT} volumes: - /app/node_modules - ./services/question:/app @@ -56,18 +55,16 @@ services: context: services/user dockerfile: Dockerfile ports: - - "${USER_SERVICE_PORT}:${USER_SERVICE_PORT}" + - 3001 environment: USER_SERVICE_CLOUD_URI: ${USER_SERVICE_CLOUD_URI} USER_SERVICE_LOCAL_URI: ${USER_SERVICE_LOCAL_URI} ENV: ${ENV} JWT_SECRET: ${JWT_SECRET} - USER_SERVICE_PORT: ${USER_SERVICE_PORT} volumes: - /app/node_modules - ./services/user:/app networks: - - question-network - user-network restart: always diff --git a/services/history/package.json b/services/history/package.json deleted file mode 100644 index 45a7ce8fcb..0000000000 --- a/services/history/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "history", - "version": "0.0.0", - "main": "index.js", - "scripts": { - "build": "npx tsc", - "dev": "node src/index.ts", - "start": "nodemon src/index.ts", - "lint": "npx eslint .", - "lint:fix": "npx eslint . --fix", - "test": "mocha --require ts-node/register tests/**/*.spec.ts --exit" - }, - "author": "", - "license": "ISC", - "description": "", - "dependencies": { - "body-parser": "^1.20.3", - "cors": "^2.8.5", - "express": "^4.21.0", - "mongoose": "^8.6.2", - "morgan": "^1.10.0" - }, - "devDependencies": { - "@eslint/js": "^9.10.0", - "@types/chai": "^4.3.19", - "@types/cors": "^2.8.17", - "@types/eslint__js": "^8.42.3", - "@types/express": "^4.17.21", - "@types/mocha": "^10.0.8", - "@types/morgan": "^1.9.9", - "@types/node": "^22.5.4", - "@typescript-eslint/eslint-plugin": "^8.5.0", - "chai": "^4.5.0", - "chai-http": "^4.4.0", - "eslint": "^9.10.0", - "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.2.1", - "mocha": "^10.7.3", - "mongodb-memory-server": "^10.0.0", - "nodemon": "^3.1.4", - "prettier": "3.3.3", - "prettier-eslint": "^16.3.0", - "ts-node": "^10.9.2", - "typescript": "^5.5.4", - "typescript-eslint": "^8.5.0" - } -} diff --git a/services/question/src/index.ts b/services/question/src/index.ts index 0022b676da..4802d8777b 100644 --- a/services/question/src/index.ts +++ b/services/question/src/index.ts @@ -3,7 +3,7 @@ import { connectToDB, upsertManyQuestions } from './models'; import { getDemoQuestions } from './utils/data'; import { initializeCounter } from './utils/sequence'; -const port = process.env.QUESTION_SERVICE_PORT || 8081; +const port = process.env.PORT || 8081; connectToDB() .then(async () => { diff --git a/services/user/.env.sample b/services/user/.env.sample index b58d72f5a8..8b5891ccae 100644 --- a/services/user/.env.sample +++ b/services/user/.env.sample @@ -1,7 +1,7 @@ # User Service USER_SERVICE_CLOUD_URI= USER_SERVICE_LOACL_URI=mongodb://127.0.0.1:27017/peerprepUserServiceDB -USER_SERVICE_PORT=3001 +PORT=3001 # Will use cloud MongoDB Atlas database ENV=PROD diff --git a/services/user/Dockerfile b/services/user/Dockerfile index 08bac7580f..263b6d23bd 100644 --- a/services/user/Dockerfile +++ b/services/user/Dockerfile @@ -4,6 +4,6 @@ WORKDIR /app COPY package.json package-lock.json ./ RUN npm install COPY . . -EXPOSE ${USER_SERVICE_PORT} +EXPOSE 3001 CMD ["npm", "start"] diff --git a/services/user/index.js b/services/user/src/index.js similarity index 92% rename from services/user/index.js rename to services/user/src/index.js index 8063892571..24a5835874 100644 --- a/services/user/index.js +++ b/services/user/src/index.js @@ -1,8 +1,8 @@ import express from "express"; import cors from "cors"; -import userRoutes from "./src/routes/user-routes.js"; -import authRoutes from "./src/routes/auth-routes.js"; +import userRoutes from "./routes/user-routes.js"; +import authRoutes from "./routes/auth-routes.js"; const app = express(); diff --git a/services/user/server.js b/services/user/src/server.js similarity index 77% rename from services/user/server.js rename to services/user/src/server.js index d7376eb68a..5808c48ea0 100644 --- a/services/user/server.js +++ b/services/user/src/server.js @@ -1,9 +1,9 @@ import http from "http"; import index from "./index.js"; import "dotenv/config"; -import { connectToDB } from "./src/model/repository.js"; +import { connectToDB } from "./model/repository.js"; -const port = process.env.USER_SERVICE_PORT || 3001; +const port = process.env.PORT || 3001; const server = http.createServer(index); @@ -16,4 +16,3 @@ await connectToDB().then(() => { console.error("Failed to connect to DB"); console.error(err); }); - From 6fc20415a4894a70d380d8b2c3ed076ab7049429 Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 27 Sep 2024 22:00:31 +0800 Subject: [PATCH 116/188] Update topics dropdown to allow addition of new topics --- .../questions/question-dialog.component.html | 16 ++++++++- .../questions/question-dialog.component.ts | 35 +++++++++++++++++++ .../src/app/questions/questions.component.ts | 1 - 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/questions/question-dialog.component.html b/frontend/src/app/questions/question-dialog.component.html index 2513dead94..d8a5ff5bf2 100644 --- a/frontend/src/app/questions/question-dialog.component.html +++ b/frontend/src/app/questions/question-dialog.component.html @@ -32,10 +32,24 @@ required="true" [style]="{ width: '100%' }" [options]="topics" + (onFilter)="onFilterTopics($event)" formControlName="topics" optionLabel="label" optionValue="value" - placeholder="Select Topics" /> + placeholder="Select Topics"> + + {{ option.label }} + + + + + + @if (isTopicsInvalid) { Topic(s) is required. } diff --git a/frontend/src/app/questions/question-dialog.component.ts b/frontend/src/app/questions/question-dialog.component.ts index b71c56b401..70d791792f 100644 --- a/frontend/src/app/questions/question-dialog.component.ts +++ b/frontend/src/app/questions/question-dialog.component.ts @@ -10,6 +10,7 @@ import { QuestionService } from '../../_services/question.service'; import { Difficulty } from './difficulty.model'; import { Topic } from './topic.model'; import { HttpErrorResponse } from '@angular/common/http'; +import { CommonModule } from '@angular/common'; @Component({ selector: 'app-question-dialog', @@ -22,6 +23,7 @@ import { HttpErrorResponse } from '@angular/common/http'; MultiSelectModule, DropdownModule, QuestionDialogComponent, + CommonModule, ], providers: [QuestionService, ConfirmationService, MessageService], templateUrl: './question-dialog.component.html', @@ -45,6 +47,12 @@ export class QuestionDialogComponent implements OnInit { questions: Question[] = []; + topicSearchValue = ''; + + isNoResultsFound = false; + + filteredTopics: Topic[] = []; + constructor(private questionService: QuestionService) {} ngOnInit(): void { @@ -153,4 +161,31 @@ export class QuestionDialogComponent implements OnInit { description: '', }); } + + onFilterTopics(event: { filter: string }) { + this.topicSearchValue = event.filter; + + this.filteredTopics = this.topics.filter(topic => + topic.label.toLowerCase().includes(this.topicSearchValue.toLowerCase()), + ); + + this.isNoResultsFound = this.filteredTopics.length == 0; + } + + addNewTopic() { + const newValue: Topic = { + label: this.topicSearchValue, + value: this.topicSearchValue, + }; + + const topicExists = this.topics.some( + topic => + topic.label.toLowerCase() === newValue.label.toLowerCase() || + topic.value.toLowerCase() === newValue.value.toLowerCase(), + ); + + if (!topicExists) { + this.topics = [...this.topics, newValue]; + } + } } diff --git a/frontend/src/app/questions/questions.component.ts b/frontend/src/app/questions/questions.component.ts index 3a37606851..70f4a7e8c6 100644 --- a/frontend/src/app/questions/questions.component.ts +++ b/frontend/src/app/questions/questions.component.ts @@ -92,7 +92,6 @@ export class QuestionsComponent implements OnInit { this.question = {} as Question; this.submitted = false; this.isDialogVisible = true; - console.log('isDialogVisible: ' + this.isDialogVisible); } editQuestion(question: Question) { From ab2ce43cbe51bc8487710754876330be419be50d Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 27 Sep 2024 22:00:45 +0800 Subject: [PATCH 117/188] Change login to use username --- services/user/README.md | 4 ++-- services/user/src/controller/auth-controller.js | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/services/user/README.md b/services/user/README.md index 32f0a140e5..095b8cce84 100644 --- a/services/user/README.md +++ b/services/user/README.md @@ -237,11 +237,11 @@ - HTTP Method: `POST` - Endpoint: http://localhost:3001/auth/login - Body - - Required: `email` (string), `password` (string) + - Required: `username` (string), `password` (string) ```json { - "email": "sample@gmail.com", + "username": "sample123", "password": "SecurePassword" } ``` diff --git a/services/user/src/controller/auth-controller.js b/services/user/src/controller/auth-controller.js index 15da6bcbea..1ff1a62680 100644 --- a/services/user/src/controller/auth-controller.js +++ b/services/user/src/controller/auth-controller.js @@ -1,20 +1,20 @@ import bcrypt from "bcryptjs"; import jwt from "jsonwebtoken"; -import { findUserByEmail as _findUserByEmail } from "../model/repository.js"; +import { findUserByUsername as _findUserByUsername } from "../model/repository.js"; import { formatUserResponse } from "./user-controller.js"; export async function handleLogin(req, res) { - const { email, password } = req.body; - if (email && password) { + const { username, password } = req.body; + if (username && password) { try { - const user = await _findUserByEmail(email); + const user = await _findUserByUsername(username); if (!user) { - return res.status(401).json({ message: "Wrong email and/or password" }); + return res.status(401).json({ message: "Wrong username and/or password" }); } const match = await bcrypt.compare(password, user.password); if (!match) { - return res.status(401).json({ message: "Wrong email and/or password" }); + return res.status(401).json({ message: "Wrong username and/or password" }); } const accessToken = jwt.sign({ @@ -27,7 +27,7 @@ export async function handleLogin(req, res) { return res.status(500).json({ message: err.message }); } } else { - return res.status(400).json({ message: "Missing email and/or password" }); + return res.status(400).json({ message: "Missing username and/or password" }); } } From 5c490d08a185f678c018c065f478cd22f0266f01 Mon Sep 17 00:00:00 2001 From: Samuel Lim Date: Fri, 27 Sep 2024 22:16:15 +0800 Subject: [PATCH 118/188] Fix user env typo --- services/user/.env.sample | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/user/.env.sample b/services/user/.env.sample index 8b5891ccae..9673e9775d 100644 --- a/services/user/.env.sample +++ b/services/user/.env.sample @@ -1,6 +1,6 @@ # User Service USER_SERVICE_CLOUD_URI= -USER_SERVICE_LOACL_URI=mongodb://127.0.0.1:27017/peerprepUserServiceDB +USER_SERVICE_LOCAL_URI=mongodb://127.0.0.1:27017/peerprepUserServiceDB PORT=3001 # Will use cloud MongoDB Atlas database From b5168bbe1087903ad037e50b1d28900f1b6c46dc Mon Sep 17 00:00:00 2001 From: limcaaarl Date: Fri, 27 Sep 2024 22:40:30 +0800 Subject: [PATCH 119/188] Fix margin issue with dialog box --- .../questions/question-dialog.component.css | 22 +++++ .../questions/question-dialog.component.html | 91 ++++++++++--------- 2 files changed, 69 insertions(+), 44 deletions(-) diff --git a/frontend/src/app/questions/question-dialog.component.css b/frontend/src/app/questions/question-dialog.component.css index e69de29bb2..516b236f7b 100644 --- a/frontend/src/app/questions/question-dialog.component.css +++ b/frontend/src/app/questions/question-dialog.component.css @@ -0,0 +1,22 @@ +.container { + padding: 2rem; + background-color: var(--surface-section); + border-radius: 0.75rem; + display: flex; + flex-direction: column; + align-items: center; +} + +.form-container { + display: flex; + flex-direction: column; + gap: 1rem; + width: 100%; +} + +.form-field { + display: flex; + flex-direction: column; + gap: 0.5rem; + width: 100%; +} \ No newline at end of file diff --git a/frontend/src/app/questions/question-dialog.component.html b/frontend/src/app/questions/question-dialog.component.html index d8a5ff5bf2..a172ef815a 100644 --- a/frontend/src/app/questions/question-dialog.component.html +++ b/frontend/src/app/questions/question-dialog.component.html @@ -12,7 +12,7 @@
-
+
Title is required. }
-
-
- - - - {{ option.label }} - +
+ - - - - - @if (isTopicsInvalid) { - Topic(s) is required. - } -
-
- - - @if (isDifficultyInvalid) { - Difficulty is required. - } -
+ + + {{ option.label }} + + + + + + + @if (isTopicsInvalid) { + Topic(s) is required. + } +
+
+ + + + @if (isDifficultyInvalid) { + Difficulty is required. + }
-
+