From c3a0ce183e8eac540f00ebf5549f5776cdd17a89 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Mon, 15 Aug 2022 18:38:31 +0700 Subject: [PATCH 001/177] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=B0=D1=8F=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83?= =?UTF-8?q?=D1=80=D0=B0=20=D0=B4=D0=B8=D1=80=D0=B5=D0=BA=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D0=B9,=20=D0=BA=D0=B0=D1=80=D0=BA=D0=B0=D1=81=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/linux.js | 15 + build/webpack.base.config.js | 72 + build/webpack.dev.config.js | 43 + build/webpack.prod.config.js | 58 + build/win.js | 15 + package-lock.json | 15249 ++++++++++++++++++++ server/config/application_env | 1 + server/config/base.js | 28 + server/config/development.js | 5 + server/config/index.js | 89 + server/config/production.js | 20 + server/controllers/WebSocketController.js | 105 + server/controllers/index.js | 3 + server/core/AppLogger.js | 60 + server/core/AsyncExit.js | 105 + server/core/Logger.js | 232 + server/core/utils.js | 7 + server/dev.js | 43 + server/index.js | 121 + 19 files changed, 16271 insertions(+) create mode 100644 build/linux.js create mode 100644 build/webpack.base.config.js create mode 100644 build/webpack.dev.config.js create mode 100644 build/webpack.prod.config.js create mode 100644 build/win.js create mode 100644 package-lock.json create mode 100644 server/config/application_env create mode 100644 server/config/base.js create mode 100644 server/config/development.js create mode 100644 server/config/index.js create mode 100644 server/config/production.js create mode 100644 server/controllers/WebSocketController.js create mode 100644 server/controllers/index.js create mode 100644 server/core/AppLogger.js create mode 100644 server/core/AsyncExit.js create mode 100644 server/core/Logger.js create mode 100644 server/core/utils.js create mode 100644 server/dev.js create mode 100644 server/index.js diff --git a/build/linux.js b/build/linux.js new file mode 100644 index 0000000..252babd --- /dev/null +++ b/build/linux.js @@ -0,0 +1,15 @@ +const fs = require('fs-extra'); +const path = require('path'); + +const distDir = path.resolve(__dirname, '../dist'); +const publicDir = `${distDir}/tmp/public`; +const outDir = `${distDir}/linux`; + +async function main() { + await fs.emptyDir(outDir); + // перемещаем public на место + if (await fs.pathExists(publicDir)) + await fs.move(publicDir, `${outDir}/public`); +} + +main(); diff --git a/build/webpack.base.config.js b/build/webpack.base.config.js new file mode 100644 index 0000000..360f1df --- /dev/null +++ b/build/webpack.base.config.js @@ -0,0 +1,72 @@ +const path = require('path'); +const DefinePlugin = require('webpack').DefinePlugin; +const { VueLoaderPlugin } = require('vue-loader'); + +const clientDir = path.resolve(__dirname, '../client'); + +module.exports = { + resolve: { + alias: { + ws: false, + } + }, + entry: [`${clientDir}/main.js`], + output: { + publicPath: '/app/', + }, + + module: { + rules: [ + { + test: /\.vue$/, + loader: 'vue-loader', + }, + { + resourceQuery: /^\?vue/, + use: path.resolve(__dirname, 'includer.js') + }, + { + test: /\.js$/, + loader: 'babel-loader', + exclude: /node_modules/, + options: { + presets: [['@babel/preset-env', { targets: { esmodules: true } }]], + plugins: [ + ['@babel/plugin-proposal-decorators', { legacy: true }] + ] + } + }, + { + test: /\.(gif|png)$/, + type: 'asset/inline', + }, + { + test: /\.jpg$/, + type: 'asset/resource', + generator: { + filename: 'images/[name]-[hash:6][ext]' + }, + }, + + { + test: /\.(ttf|eot|woff|woff2)$/, + type: 'asset/resource', + generator: { + filename: 'fonts/[name]-[hash:6][ext]' + }, + }, + ] + }, + + plugins: [ + new DefinePlugin({ + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + __QUASAR_SSR__: false, + __QUASAR_SSR_SERVER__: false, + __QUASAR_SSR_CLIENT__: false, + __QUASAR_VERSION__: false, + }), + new VueLoaderPlugin(), + ] +}; diff --git a/build/webpack.dev.config.js b/build/webpack.dev.config.js new file mode 100644 index 0000000..f27ee9b --- /dev/null +++ b/build/webpack.dev.config.js @@ -0,0 +1,43 @@ +const path = require('path'); +const webpack = require('webpack'); + +const { merge } = require('webpack-merge'); +const baseWpConfig = require('./webpack.base.config'); + +baseWpConfig.entry.unshift('webpack-hot-middleware/client'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); + +const publicDir = path.resolve(__dirname, '../server/public'); +const clientDir = path.resolve(__dirname, '../client'); + +module.exports = merge(baseWpConfig, { + mode: 'development', + devtool: 'inline-source-map', + output: { + path: `${publicDir}/app`, + filename: 'bundle.js' + }, + + module: { + rules: [ + { + test: /\.css$/, + use: [ + 'vue-style-loader', + 'css-loader' + ] + }, + ] + }, + + plugins: [ + new webpack.HotModuleReplacementPlugin(), + new webpack.NoEmitOnErrorsPlugin(), + new HtmlWebpackPlugin({ + template: `${clientDir}/index.html.template`, + filename: `${publicDir}/index.html` + }), + new CopyWebpackPlugin({patterns: [{from: `${clientDir}/assets/*`, to: `${publicDir}/`}]}) + ] +}); diff --git a/build/webpack.prod.config.js b/build/webpack.prod.config.js new file mode 100644 index 0000000..de03b04 --- /dev/null +++ b/build/webpack.prod.config.js @@ -0,0 +1,58 @@ +const path = require('path'); +//const webpack = require('webpack'); + +const { merge } = require('webpack-merge'); +const baseWpConfig = require('./webpack.base.config'); +const TerserPlugin = require('terser-webpack-plugin'); +const CssMinimizerWebpackPlugin = require('css-minimizer-webpack-plugin'); +const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const HtmlWebpackPlugin = require('html-webpack-plugin'); +const CopyWebpackPlugin = require('copy-webpack-plugin'); + +const publicDir = path.resolve(__dirname, '../dist/tmp/public'); +const clientDir = path.resolve(__dirname, '../client'); + +module.exports = merge(baseWpConfig, { + mode: 'production', + output: { + path: `${publicDir}/app_new`, + filename: 'bundle.[contenthash].js' + }, + module: { + rules: [ + { + test: /\.css$/, + use: [ + MiniCssExtractPlugin.loader, + 'css-loader' + ] + } + ] + }, + optimization: { + minimizer: [ + new TerserPlugin({ + parallel: true, + terserOptions: { + format: { + comments: false, + }, + }, + }), + new CssMinimizerWebpackPlugin() + ] + }, + plugins: [ + //new CleanWebpackPlugin({ cleanOnceBeforeBuildPatterns: [`${publicDir}/**`] }), + new MiniCssExtractPlugin({ + filename: "[name].[contenthash].css" + }), + new HtmlWebpackPlugin({ + template: `${clientDir}/index.html.template`, + filename: `${publicDir}/index.html` + }), + new CopyWebpackPlugin({patterns: + [{from: `${clientDir}/assets/*`, to: `${publicDir}/`, context: `${clientDir}/assets` }] + }), + ] +}); diff --git a/build/win.js b/build/win.js new file mode 100644 index 0000000..286eb12 --- /dev/null +++ b/build/win.js @@ -0,0 +1,15 @@ +const fs = require('fs-extra'); +const path = require('path'); + +const distDir = path.resolve(__dirname, '../dist'); +const publicDir = `${distDir}/tmp/public`; +const outDir = `${distDir}/win`; + +async function main() { + await fs.emptyDir(outDir); + // перемещаем public на место + if (await fs.pathExists(publicDir)) + await fs.move(publicDir, `${outDir}/public`); +} + +main(); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..c923da0 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,15249 @@ +{ + "name": "inpx-web", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "inpx-web", + "version": "0.1.0", + "hasInstallScript": true, + "license": "CC0-1.0", + "dependencies": { + "@quasar/extras": "^1.15.0", + "axios": "^0.27.2", + "compression": "^1.7.4", + "express": "^4.18.1", + "fs-extra": "^10.1.0", + "jembadb": "^3.0.10", + "localforage": "^1.10.0", + "lodash": "^4.17.21", + "minimist": "^1.2.6", + "quasar": "^2.7.5", + "vue": "^3.2.37", + "vue-router": "^4.1.2", + "vuex": "^4.0.2", + "vuex-persist": "^3.1.3", + "ws": "^8.8.1" + }, + "bin": { + "inpx-web": "server/index.js" + }, + "devDependencies": { + "@babel/core": "^7.18.9", + "@babel/eslint-parser": "^7.18.9", + "@babel/eslint-plugin": "^7.17.7", + "@babel/plugin-proposal-decorators": "^7.18.9", + "@babel/preset-env": "^7.18.9", + "@vue/compiler-sfc": "^3.2.22", + "babel-loader": "^8.2.5", + "copy-webpack-plugin": "^11.0.0", + "css-loader": "^6.7.1", + "css-minimizer-webpack-plugin": "^4.0.0", + "eslint": "^8.20.0", + "eslint-plugin-vue": "^9.3.0", + "html-webpack-plugin": "^5.5.0", + "mini-css-extract-plugin": "^2.6.1", + "pkg": "^5.8.0", + "terser-webpack-plugin": "^5.3.3", + "vue-eslint-parser": "^9.0.3", + "vue-loader": "^17.0.0", + "vue-style-loader": "^4.1.3", + "webpack": "^5.74.0", + "webpack-cli": "^4.10.0", + "webpack-dev-middleware": "^5.3.3", + "webpack-hot-middleware": "^2.25.1", + "webpack-merge": "^5.8.0" + }, + "engines": { + "node": ">=14.4.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/eslint-parser": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz", + "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==", + "dev": true, + "dependencies": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.11.0", + "eslint": "^7.5.0 || ^8.0.0" + } + }, + "node_modules/@babel/eslint-plugin": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.18.10.tgz", + "integrity": "sha512-iV1OZj/7eg4wZIcsVEkXS3MUWdhmpLsu2h+9Zr2ppywKWdCRs6VfjxbRzmHHYeurTizrrnaJ9ZkbO8KOv4lauQ==", + "dev": true, + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || >=14.0.0" + }, + "peerDependencies": { + "@babel/eslint-parser": ">=7.11.0", + "eslint": ">=7.5.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", + "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz", + "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", + "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", + "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", + "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz", + "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.18.9", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.11", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", + "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "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.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", + "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.10.tgz", + "integrity": "sha512-wdGTwWF5QtpTY/gbBtQLAiCnoxfD4qMbN87NYZle1dOZ9Os8Y6zXcKrIaOU8W+TIvFUWVGG9tUgNww3CjXRVVw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/plugin-syntax-decorators": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@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-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@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-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", + "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@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-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@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-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "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, + "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, + "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, + "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-decorators": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.18.6.tgz", + "integrity": "sha512-fqyLgjcxf/1yhyZ6A+yo1u9gJ7eleFQod2lkaUsF9DQ7sbbY3Ligym3L0+I2c0WmqNKDpoD9UTb1AKP3qRMOAQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "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, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", + "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz", + "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "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.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz", + "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dev": true, + "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-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz", + "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", + "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", + "dev": true, + "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-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz", + "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dev": true, + "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-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", + "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@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.18.6", + "@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-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", + "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.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" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "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, + "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, + "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, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@quasar/extras": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@quasar/extras/-/extras-1.15.1.tgz", + "integrity": "sha512-c8nL5ccja+2xlQrcyraxdzcnn297rDzjH0LcyeqShcsRA5+6Yr6wQD9BEzpFgNTZvpP51sZlQHfV07nUd9OxDA==", + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/eslint": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", + "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.7.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.3.tgz", + "integrity": "sha512-LJgzOEwWuMTBxHzgBR/fhhBOWrvBjvO+zPteUgbbuQi80rYIZHrk1mNbRUqPZqSLP2H7Rwt1EFLL/tNLD1Xx/w==", + "dev": true + }, + "node_modules/@vue/compiler-core": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", + "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", + "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", + "dependencies": { + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", + "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.37", + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-ssr": "3.2.37", + "@vue/reactivity-transform": "3.2.37", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", + "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", + "dependencies": { + "@vue/compiler-dom": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.2.1.tgz", + "integrity": "sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==" + }, + "node_modules/@vue/reactivity": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", + "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "dependencies": { + "@vue/shared": "3.2.37" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", + "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz", + "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", + "dependencies": { + "@vue/reactivity": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", + "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", + "dependencies": { + "@vue/runtime-core": "3.2.37", + "@vue/shared": "3.2.37", + "csstype": "^2.6.8" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz", + "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "dependencies": { + "@vue/compiler-ssr": "3.2.37", + "@vue/shared": "3.2.37" + }, + "peerDependencies": { + "vue": "3.2.37" + } + }, + "node_modules/@vue/shared": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", + "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "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 + }, + "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 + }, + "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.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "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, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.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, + "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/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, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/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 + }, + "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, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "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" + ], + "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, + "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, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "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 + }, + "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/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "dependencies": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "node_modules/babel-loader": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", + "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.2", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", + "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.2", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", + "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/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" + } + ] + }, + "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, + "engines": { + "node": "*" + } + }, + "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, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/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/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==", + "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==" + }, + "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 + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "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" + } + ], + "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 + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001376", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001376.tgz", + "integrity": "sha512-I27WhtOQ3X3v3it9gNs/oTpoE5KpwmqKR5oKPA8M0G7uMXh9Ty81Q904HpKUrM30ei7zfcL5jE7AXefgbOfMig==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "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, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-css": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "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, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "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, + "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, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=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, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "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 + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "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 + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "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==", + "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/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/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "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-disposition/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/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/copy-webpack-plugin/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, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/copy-webpack-plugin/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 + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/core-js-compat": { + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.24.1.tgz", + "integrity": "sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.3", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.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 + }, + "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, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz", + "integrity": "sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.7", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-7ZXXRzRHvofv3Uac5Y+RkWRNo0ZMlcg8e9/OtrqUYmwDWJo+qs67GvdeFrXLsFb7czKNwjQhPkM0avlIYl+1nA==", + "dev": true, + "dependencies": { + "cssnano": "^5.1.8", + "jest-worker": "^27.5.1", + "postcss": "^8.4.13", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/css-minimizer-webpack-plugin/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, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/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 + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "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, + "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, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", + "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^5.2.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", + "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.0", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.2", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.6", + "postcss-merge-rules": "^5.1.2", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.3", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "2.6.20", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", + "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dev": true, + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "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 + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.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==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "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/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "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, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.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" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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/electron-to-chromium": { + "version": "1.4.219", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.219.tgz", + "integrity": "sha512-zoQJsXOUw0ZA0YxbjkmzBumAJRtr6je5JySuL/bAoFs0DuLiLJ+5FzRF7/ZayihxR2QcewlRZVm5QZdUhwjOgA==", + "dev": true + }, + "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 + }, + "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, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "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": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", + "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.3.0.tgz", + "integrity": "sha512-iscKKkBZgm6fGZwFt6poRoWC0Wy2dQOlwUPW++CiPoQiw1enctV2Hj5DBzzjJZfyqs+FAXhgzL4q0Ww03AgSmQ==", + "dev": true, + "dependencies": { + "eslint-utils": "^3.0.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", + "semver": "^7.3.5", + "vue-eslint-parser": "^9.0.1", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true, + "engines": { + "node": ">=4.0.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, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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, + "dependencies": { + "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, + "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/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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 + }, + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "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, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "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/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + } + }, + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "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, + "engines": { + "node": ">=4.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, + "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, + "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, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "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, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "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, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/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/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/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/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 + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "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-glob/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/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 + }, + "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 + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "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, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/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/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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, + "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, + "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": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/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, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "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, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "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 + }, + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", + "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-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.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "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/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "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, + "bin": { + "he": "bin/he" + } + }, + "node_modules/html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "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/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, + "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" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "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, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "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, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/into-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", + "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==", + "dev": true, + "dependencies": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "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-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/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, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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 + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jembadb": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/jembadb/-/jembadb-3.0.10.tgz", + "integrity": "sha512-XA9o+jyl6U1fGwwSyMqAD9n7oY5MajS4DozXfdi9/Mrh7PH9gx6hRpFpcoGltb/WnP7qtfiD7bf+WH9pDkqfbg==", + "engines": { + "node": ">=14.4.0" + } + }, + "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, + "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, + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "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 + }, + "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, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "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 + }, + "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 + }, + "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 + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "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, + "engines": { + "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, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "dependencies": { + "lie": "3.1.1" + } + }, + "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, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "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==" + }, + "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 + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "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 + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "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, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "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/memfs": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", + "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "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/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 + }, + "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, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "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", + "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/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", + "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/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, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/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 + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "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/multistream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", + "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", + "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" + } + ], + "dependencies": { + "once": "^1.4.0", + "readable-stream": "^3.6.0" + } + }, + "node_modules/multistream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, + "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 + }, + "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/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 + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "dev": true, + "dependencies": { + "semver": "^5.4.1" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "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/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "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, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz", + "integrity": "sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "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/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==", + "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, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "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.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "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, + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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, + "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", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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, + "engines": { + "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, + "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, + "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 + }, + "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/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "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": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/pkg/-/pkg-5.8.0.tgz", + "integrity": "sha512-8h9PUDYFi+LOMLbIyGRdP21g08mAtHidSpofSrf8LWhxUWGHymaRzcopEGiynB5EhQmZUKM6PQ9kCImV2TpdjQ==", + "dev": true, + "dependencies": { + "@babel/generator": "7.18.2", + "@babel/parser": "7.18.4", + "@babel/types": "7.18.4", + "chalk": "^4.1.2", + "fs-extra": "^9.1.0", + "globby": "^11.1.0", + "into-stream": "^6.0.0", + "is-core-module": "2.9.0", + "minimist": "^1.2.6", + "multistream": "^4.1.0", + "pkg-fetch": "3.4.2", + "prebuild-install": "6.1.4", + "resolve": "^1.22.0", + "stream-meter": "^1.0.4" + }, + "bin": { + "pkg": "lib-es5/bin.js" + }, + "peerDependencies": { + "node-notifier": ">=9.0.1" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "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, + "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, + "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, + "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, + "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, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-fetch": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-3.4.2.tgz", + "integrity": "sha512-0+uijmzYcnhC0hStDjm/cl2VYdrmVVBpe7Q8k9YBojxmR5tG8mvR9/nooQq3QSXiQqORDVOTY3XqMEqJVIzkHA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "fs-extra": "^9.1.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.6", + "progress": "^2.0.3", + "semver": "^7.3.5", + "tar-fs": "^2.1.1", + "yargs": "^16.2.0" + }, + "bin": { + "pkg-fetch": "lib-es5/bin.js" + } + }, + "node_modules/pkg-fetch/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pkg-fetch/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, + "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/pkg-fetch/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/pkg-fetch/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 + }, + "node_modules/pkg-fetch/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pkg-fetch/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-fetch/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pkg-fetch/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg/node_modules/@babel/generator": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/pkg/node_modules/@babel/parser": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", + "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pkg/node_modules/@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/pkg/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pkg/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pkg/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, + "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/pkg/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/pkg/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 + }, + "node_modules/pkg/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pkg/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "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/pkg/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", + "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "dev": true, + "dependencies": { + "browserslist": "^4.20.3", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", + "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", + "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", + "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "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.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "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, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", + "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", + "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "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 + }, + "node_modules/prebuild-install": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.21.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=6" + } + }, + "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, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.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 + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.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==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quasar": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.7.7.tgz", + "integrity": "sha512-tegG6EmEmv5i24MoNopRkhZOdT5kdLSAxQMA0V/fG04oco52hk2xwvB0EVS8WzT0bZZbc/9iXlAm1c29rZ3yVA==", + "engines": { + "node": ">= 10.18.1", + "npm": ">= 6.13.4", + "yarn": ">= 1.21.1" + }, + "funding": { + "type": "github", + "url": "https://donate.quasar.dev" + } + }, + "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" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "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.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/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/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "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/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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 + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", + "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "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/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "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, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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, + "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, + "engines": { + "iojs": ">=1.0.0", + "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==", + "dev": true, + "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", + "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" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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/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/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==" + }, + "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.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "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-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "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, + "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, + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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 + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "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" + } + ] + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "dev": true, + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "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, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "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/stream-meter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz", + "integrity": "sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==", + "dev": true, + "dependencies": { + "readable-stream": "^2.1.4" + } + }, + "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, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width/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, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "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, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylehacks": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", + "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "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/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 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, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/terser": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "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.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.4.tgz", + "integrity": "sha512-SmnkUhBxLDcBfTIeaq+ZqJXLVEyXxSaNcCeSezECdKjfkMrTTnPvapBILylYwyEvHFZAn2cJ8dtiXel5XnfOfQ==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "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/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "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/terser/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 + }, + "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 + }, + "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, + "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, + "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/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "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, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "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, + "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==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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, + "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, + "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.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "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, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "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 + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "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": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "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/vue": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz", + "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", + "dependencies": { + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/runtime-dom": "3.2.37", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.0.3.tgz", + "integrity": "sha512-yL+ZDb+9T0ELG4VIFo/2anAOz8SvBdlqEnQnvJ3M7Scq56DvtjY0VY88bByRZB0D4J0u8olBcfrXTVONXsh4og==", + "dev": true, + "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.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "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, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vue-loader": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.0.0.tgz", + "integrity": "sha512-OWSXjrzIvbF2LtOUmxT3HYgwwubbfFelN8PAP9R9dwpIkj48TVioHhWWSx7W7fk+iF5cgg3CBJRxwTdtLU4Ecg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "peerDependencies": { + "webpack": "^4.1.0 || ^5.0.0-0" + } + }, + "node_modules/vue-loader/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/vue-loader/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, + "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/vue-loader/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/vue-loader/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 + }, + "node_modules/vue-loader/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-loader/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vue-router": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.3.tgz", + "integrity": "sha512-XvK81bcYglKiayT7/vYAg/f36ExPC4t90R/HIpzrZ5x+17BOWptXLCrEPufGgZeuq68ww4ekSIMBZY1qdUdfjA==", + "dependencies": { + "@vue/devtools-api": "^6.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "dependencies": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "node_modules/vue-style-loader/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "node_modules/vue-style-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/vue-style-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/vuex": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz", + "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==", + "dependencies": { + "@vue/devtools-api": "^6.0.0-beta.11" + }, + "peerDependencies": { + "vue": "^3.0.2" + } + }, + "node_modules/vuex-persist": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vuex-persist/-/vuex-persist-3.1.3.tgz", + "integrity": "sha512-QWOpP4SxmJDC5Y1+0+Yl/F4n7z27syd1St/oP+IYCGe0X0GFio0Zan6kngZFufdIhJm+5dFGDo3VG5kdkCGeRQ==", + "dependencies": { + "deepmerge": "^4.2.2", + "flatted": "^3.0.5" + }, + "peerDependencies": { + "vuex": ">=2.5" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "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.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "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-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/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, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/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 + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-hot-middleware": { + "version": "2.25.2", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.2.tgz", + "integrity": "sha512-CVgm3NAQyfdIonRvXisRwPTUYuSbyZ6BY7782tMeUzWOO7RmVI2NaBYuCp41qyD4gYCkJyTneAJdK69A13B0+A==", + "dev": true, + "dependencies": { + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.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, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "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/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "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, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.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, + "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/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, + "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, + "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 + }, + "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, + "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, + "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 + }, + "node_modules/ws": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", + "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "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/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "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, + "engines": { + "node": ">=10" + } + }, + "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 + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "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, + "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, + "engines": { + "node": ">=10" + } + }, + "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, + "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, + "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": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", + "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "dev": true + }, + "@babel/core": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/eslint-parser": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.9.tgz", + "integrity": "sha512-KzSGpMBggz4fKbRbWLNyPVTuQr6cmCcBhOyXTw/fieOVaw5oYAwcAj4a7UKcDYCPxQq+CG1NCDZH9e2JTXquiQ==", + "dev": true, + "requires": { + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^2.1.0", + "semver": "^6.3.0" + } + }, + "@babel/eslint-plugin": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/eslint-plugin/-/eslint-plugin-7.18.10.tgz", + "integrity": "sha512-iV1OZj/7eg4wZIcsVEkXS3MUWdhmpLsu2h+9Zr2ppywKWdCRs6VfjxbRzmHHYeurTizrrnaJ9ZkbO8KOv4lauQ==", + "dev": true, + "requires": { + "eslint-rule-composer": "^0.3.0" + } + }, + "@babel/generator": { + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", + "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", + "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz", + "integrity": "sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", + "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.2.tgz", + "integrity": "sha512-r9QJJ+uDWrd+94BSPcP6/de67ygLtvVy6cK4luE6MOuDsZIdoaPBnfSpbO/+LTifjPckbKXRuI9BB/Z2/y3iTg==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", + "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", + "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", + "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-replace-supers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", + "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.9.tgz", + "integrity": "sha512-imytd2gHi3cJPsybLRbmFrF7u5BIEuI2cNheyKi3/iOBC63kNn3q8Crn2xVuESli0aM4KYsyEqKyS7lFL8YVtw==", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.11.tgz", + "integrity": "sha512-oBUlbv+rjZLh2Ks9SKi4aL7eKaAXBWleHzU89mP0G6BMUlRxSckk9tSIkgDGydhgFxHuGSlBQZfnaD47oBEB7w==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.18.9", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.11", + "@babel/types": "^7.18.10" + } + }, + "@babel/helpers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", + "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.11.tgz", + "integrity": "sha512-9JKn5vN+hDt0Hdqn1PiJ2guflwP+B6Ga8qbDuoF0PzzVhrzsKIJo8yGqVk6CmMHiMei9w1C1Bp9IMJSIK+HPIQ==" + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "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.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", + "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-proposal-optional-chaining": "^7.18.9" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", + "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.10.tgz", + "integrity": "sha512-wdGTwWF5QtpTY/gbBtQLAiCnoxfD4qMbN87NYZle1dOZ9Os8Y6zXcKrIaOU8W+TIvFUWVGG9tUgNww3CjXRVVw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/plugin-syntax-decorators": "^7.18.6" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", + "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.9.tgz", + "integrity": "sha512-kDDHQ5rflIeY5xl69CEqGEZ0KY369ehsCIEbTGb4siHG5BE9sga/T0r0OUwyZNLMmZE79E1kbsqAjwFCW4ds6Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.8" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", + "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.18.6.tgz", + "integrity": "sha512-fqyLgjcxf/1yhyZ6A+yo1u9gJ7eleFQod2lkaUsF9DQ7sbbY3Ligym3L0+I2c0WmqNKDpoD9UTb1AKP3qRMOAQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@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, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.9.tgz", + "integrity": "sha512-5sDIJRV1KtQVEbt/EIBwGy4T01uYIo4KRB3VUqzkhrAIOGx7AoctL9+Ux88btY0zXdDyPJ9mW+bg+v+XEkGmtw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.9.tgz", + "integrity": "sha512-EkRQxsxoytpTlKJmSPYrsOMjCILacAjtSVkd4gChEe2kXjFCun3yohhW5I7plXJhCemM0gKsaGMcO8tinvCA5g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", + "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.9.tgz", + "integrity": "sha512-p5VCYNddPLkZTq4XymQIaIfZNJwT9YsjkPOhkVEqt6QIpQFZVM9IltqqYpOEkJoN1DPznmxUDyZ5CTZs/ZCuHA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", + "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.9.tgz", + "integrity": "sha512-zY/VSIbbqtoRoJKo2cDTewL364jSlZGvn0LKOf9ntbfxOvjfmyrdtEEOAdswOswhZEb8UH3jDkCKHd1sPgsS0A==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", + "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.18.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", + "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.9.tgz", + "integrity": "sha512-39Q814wyoOPtIB/qGopNIL9xDChOE1pNU0ZY5dO0owhiVt/5kFm4li+/bBtwc7QotG0u5EPzqhZdjMtmqBqyQA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", + "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.9" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", + "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@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.18.6", + "@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-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.18.11", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.11.tgz", + "integrity": "sha512-TG9PiM2R/cWCAy6BPJKeHzNbu4lPzOSZpeMfeNErskGpTJx6trEvFaVCbDvpcxwy49BKWmEPwiW8mrysNiDvIQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.11", + "@babel/types": "^7.18.10", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.10.tgz", + "integrity": "sha512-MJvnbEiiNkpjo+LknnmRrqbY1GPUUggjv+wQVjetM/AONoupqRALB7I6jGqNUAZsKcRIEu2J6FRFvsczljjsaQ==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.18.10", + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.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" + }, + "dependencies": { + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@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, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@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 + }, + "@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, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@quasar/extras": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@quasar/extras/-/extras-1.15.1.tgz", + "integrity": "sha512-c8nL5ccja+2xlQrcyraxdzcnn297rDzjH0LcyeqShcsRA5+6Yr6wQD9BEzpFgNTZvpP51sZlQHfV07nUd9OxDA==" + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@types/eslint": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", + "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/node": { + "version": "18.7.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.3.tgz", + "integrity": "sha512-LJgzOEwWuMTBxHzgBR/fhhBOWrvBjvO+zPteUgbbuQi80rYIZHrk1mNbRUqPZqSLP2H7Rwt1EFLL/tNLD1Xx/w==", + "dev": true + }, + "@vue/compiler-core": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", + "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", + "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", + "requires": { + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", + "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.37", + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-ssr": "3.2.37", + "@vue/reactivity-transform": "3.2.37", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-ssr": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", + "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", + "requires": { + "@vue/compiler-dom": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@vue/devtools-api": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.2.1.tgz", + "integrity": "sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==" + }, + "@vue/reactivity": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.37.tgz", + "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "requires": { + "@vue/shared": "3.2.37" + } + }, + "@vue/reactivity-transform": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", + "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "@vue/runtime-core": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.37.tgz", + "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", + "requires": { + "@vue/reactivity": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@vue/runtime-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", + "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", + "requires": { + "@vue/runtime-core": "3.2.37", + "@vue/shared": "3.2.37", + "csstype": "^2.6.8" + } + }, + "@vue/server-renderer": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.2.37.tgz", + "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "requires": { + "@vue/compiler-ssr": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@vue/shared": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", + "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" + }, + "@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "requires": {} + }, + "@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 + }, + "@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 + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "dev": true, + "requires": {} + }, + "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, + "requires": {} + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "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, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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 + } + } + }, + "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, + "requires": {} + }, + "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 + }, + "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 + }, + "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, + "requires": { + "color-convert": "^1.9.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "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 + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "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 + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "axios": { + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz", + "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==", + "requires": { + "follow-redirects": "^1.14.9", + "form-data": "^4.0.0" + } + }, + "babel-loader": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "dev": true, + "requires": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.2.tgz", + "integrity": "sha512-LPnodUl3lS0/4wN3Rb+m+UK8s7lj2jcLRrjho4gLw+OJs+I4bvGXshINesY5xx/apM+biTnQ9reDI8yj+0M5+Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.2", + "semver": "^6.1.1" + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", + "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.2", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.0.tgz", + "integrity": "sha512-RW1cnryiADFeHmfLS+WW/G431p1PsW5qdRdz0SDRi7TKcUgc7Oh/uXkT7MZ/+tGsT1BkczEAmD5XjUyJ5SWDTw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.2" + } + }, + "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 + }, + "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 + }, + "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 + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "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 + }, + "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, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "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 + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "requires": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001376", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001376.tgz", + "integrity": "sha512-I27WhtOQ3X3v3it9gNs/oTpoE5KpwmqKR5oKPA8M0G7uMXh9Ty81Q904HpKUrM30ei7zfcL5jE7AXefgbOfMig==", + "dev": true + }, + "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, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "clean-css": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", + "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "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, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "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 + }, + "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, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "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, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "dev": true + }, + "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, + "requires": { + "color-name": "1.1.3" + } + }, + "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 + }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "colorette": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "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" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "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==" + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "requires": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "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 + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "core-js-compat": { + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.24.1.tgz", + "integrity": "sha512-XhdNAGeRnTpp8xbD+sR/HFDK9CbeeeqXT6TuofXh3urqEevzkWmLRgrVoykodsw8okqo2pu1BOmuCKrHx63zdw==", + "dev": true, + "requires": { + "browserslist": "^4.21.3", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "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 + }, + "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, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-declaration-sorter": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.0.tgz", + "integrity": "sha512-OGT677UGHJTAVMRhPO+HJ4oKln3wkBTwtDFH0ojbqm+MJm6xuDMHp2nkhh/ThaBqq20IbraBQSWKfSLNHQO9Og==", + "dev": true, + "requires": {} + }, + "css-loader": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.7", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "css-minimizer-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-7ZXXRzRHvofv3Uac5Y+RkWRNo0ZMlcg8e9/OtrqUYmwDWJo+qs67GvdeFrXLsFb7czKNwjQhPkM0avlIYl+1nA==", + "dev": true, + "requires": { + "cssnano": "^5.1.8", + "jest-worker": "^27.5.1", + "postcss": "^8.4.13", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "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 + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "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 + }, + "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 + }, + "cssnano": { + "version": "5.1.13", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.13.tgz", + "integrity": "sha512-S2SL2ekdEz6w6a2epXn4CmMKU4K3KpcyXLKfAYc9UQQqJRkD/2eLUG0vJ3Db/9OvO5GuAdgXw3pFbR6abqghDQ==", + "dev": true, + "requires": { + "cssnano-preset-default": "^5.2.12", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.2.12", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.12.tgz", + "integrity": "sha512-OyCBTZi+PXgylz9HAA5kHyoYhfGcYdwFmyaJzWnzxuGRtnMw/kR6ilW9XzlzlRAtB6PLT/r+prYgkef7hngFew==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.3.0", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.0", + "postcss-convert-values": "^5.1.2", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.6", + "postcss-merge-rules": "^5.1.2", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.3", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.0", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.0", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + } + }, + "cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "requires": {} + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "csstype": { + "version": "2.6.20", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.20.tgz", + "integrity": "sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dev": true, + "requires": { + "mimic-response": "^2.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "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 + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dev": true, + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true + }, + "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, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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==" + }, + "electron-to-chromium": { + "version": "1.4.219", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.219.tgz", + "integrity": "sha512-zoQJsXOUw0ZA0YxbjkmzBumAJRtr6je5JySuL/bAoFs0DuLiLJ+5FzRF7/ZayihxR2QcewlRZVm5QZdUhwjOgA==", + "dev": true + }, + "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 + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", + "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "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==" + }, + "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 + }, + "eslint": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", + "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "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.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "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.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "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 + }, + "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 + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "globals": { + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz", + "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "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" + } + }, + "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 + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-plugin-vue": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.3.0.tgz", + "integrity": "sha512-iscKKkBZgm6fGZwFt6poRoWC0Wy2dQOlwUPW++CiPoQiw1enctV2Hj5DBzzjJZfyqs+FAXhgzL4q0Ww03AgSmQ==", + "dev": true, + "requires": { + "eslint-utils": "^3.0.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.0.1", + "postcss-selector-parser": "^6.0.9", + "semver": "^7.3.5", + "vue-eslint-parser": "^9.0.1", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true + }, + "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, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "espree": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "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, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true + }, + "express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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==" + } + } + }, + "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 + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "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 + }, + "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 + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "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, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "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, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "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, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", + "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==" + }, + "follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-monkey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", + "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", + "dev": true + }, + "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 + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "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 + }, + "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, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "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 + }, + "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 + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "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" + } + }, + "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, + "requires": { + "is-glob": "^4.0.3" + } + }, + "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 + }, + "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 + }, + "globby": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", + "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", + "dev": true, + "requires": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-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 + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "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 + }, + "html-entities": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", + "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", + "dev": true + }, + "html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "requires": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + } + }, + "html-webpack-plugin": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", + "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", + "dev": true, + "requires": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "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, + "requires": {} + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "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, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "into-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", + "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==", + "dev": true, + "requires": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + } + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "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, + "requires": { + "isobject": "^3.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "jembadb": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/jembadb/-/jembadb-3.0.10.tgz", + "integrity": "sha512-XA9o+jyl6U1fGwwSyMqAD9n7oY5MajS4DozXfdi9/Mrh7PH9gx6hRpFpcoGltb/WnP7qtfiD7bf+WH9pDkqfbg==" + }, + "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, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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 + }, + "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, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "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 + }, + "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 + }, + "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 + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "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 + }, + "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, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "requires": { + "immediate": "~3.0.5" + } + }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true + }, + "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 + }, + "loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "requires": { + "lie": "3.1.1" + } + }, + "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, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "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 + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "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 + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "requires": { + "tslib": "^2.0.3" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "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, + "requires": { + "semver": "^6.0.0" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "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==" + }, + "memfs": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.7.tgz", + "integrity": "sha512-ygaiUSNalBX85388uskeCyhSAoOSgzBbtVCr9jA2RROssFL9Q19/ZXFqS+2Th2sr1ewNIWgFdLzLC3Yl1Zv+lw==", + "dev": true, + "requires": { + "fs-monkey": "^1.0.3" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "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 + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", + "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", + "dev": true, + "requires": { + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "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 + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "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 + }, + "multistream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", + "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", + "dev": true, + "requires": { + "once": "^1.4.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "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 + }, + "no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "requires": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "dev": true, + "requires": { + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, + "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 + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "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, + "requires": { + "boolbase": "^1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.3.tgz", + "integrity": "sha512-ZFJnX3zltyjcYJL0RoCJuzb+11zWGyaDbjgxZbdV7rFEcHQuYxrZqhow67aA7xpes6LhojyFDaBKAFfogQrikA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "requires": { + "ee-first": "1.1.1" + } + }, + "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==" + }, + "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, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "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.3" + } + }, + "p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", + "dev": true + }, + "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, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "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, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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 + }, + "param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "requires": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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, + "requires": { + "callsites": "^3.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "requires": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "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 + }, + "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 + }, + "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 + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "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 + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pkg": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/pkg/-/pkg-5.8.0.tgz", + "integrity": "sha512-8h9PUDYFi+LOMLbIyGRdP21g08mAtHidSpofSrf8LWhxUWGHymaRzcopEGiynB5EhQmZUKM6PQ9kCImV2TpdjQ==", + "dev": true, + "requires": { + "@babel/generator": "7.18.2", + "@babel/parser": "7.18.4", + "@babel/types": "7.18.4", + "chalk": "^4.1.2", + "fs-extra": "^9.1.0", + "globby": "^11.1.0", + "into-stream": "^6.0.0", + "is-core-module": "2.9.0", + "minimist": "^1.2.6", + "multistream": "^4.1.0", + "pkg-fetch": "3.4.2", + "prebuild-install": "6.1.4", + "resolve": "^1.22.0", + "stream-meter": "^1.0.4" + }, + "dependencies": { + "@babel/generator": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "dev": true, + "requires": { + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" + } + }, + "@babel/parser": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", + "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==", + "dev": true + }, + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "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 + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "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" + } + }, + "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 + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "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, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "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, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "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, + "requires": { + "p-locate": "^4.1.0" + } + }, + "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, + "requires": { + "p-try": "^2.0.0" + } + }, + "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, + "requires": { + "p-limit": "^2.2.0" + } + } + } + }, + "pkg-fetch": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-3.4.2.tgz", + "integrity": "sha512-0+uijmzYcnhC0hStDjm/cl2VYdrmVVBpe7Q8k9YBojxmR5tG8mvR9/nooQq3QSXiQqORDVOTY3XqMEqJVIzkHA==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "fs-extra": "^9.1.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.6", + "progress": "^2.0.3", + "semver": "^7.3.5", + "tar-fs": "^2.1.1", + "yargs": "^16.2.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "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 + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "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 + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "postcss": { + "version": "8.4.16", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", + "integrity": "sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-colormin": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", + "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-convert-values": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.2.tgz", + "integrity": "sha512-c6Hzc4GAv95B7suy4udszX9Zy4ETyMCgFPUDtWjdFTKH1SE9eFY/jEpHSwTH1QPuwxHpWslhckUQWbNRM4ho5g==", + "dev": true, + "requires": { + "browserslist": "^4.20.3", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true, + "requires": {} + }, + "postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true, + "requires": {} + }, + "postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "requires": {} + }, + "postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "requires": {} + }, + "postcss-merge-longhand": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.6.tgz", + "integrity": "sha512-6C/UGF/3T5OE2CEbOuX7iNO63dnvqhGZeUnKkDeifebY0XqkkvrctYSZurpNE902LDf2yKwwPFgotnfSoPhQiw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.0" + } + }, + "postcss-merge-rules": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.2.tgz", + "integrity": "sha512-zKMUlnw+zYCWoPN6yhPjtcEdlJaMUZ0WyVcxTAmw3lkkN/NDMRkOkiuctQEoWAOvH7twaxUUdvBWl0d4+hifRQ==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-params": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.3.tgz", + "integrity": "sha512-bkzpWcjykkqIujNL+EVEPOlLYi/eZ050oImVtHU7b4lFS82jPnsCb44gvC6pxaNt38Els3jWYDHTjHKf0koTgg==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "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, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", + "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "requires": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-initial": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", + "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + } + }, + "postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.5" + } + }, + "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 + }, + "prebuild-install": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.21.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, + "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 + }, + "pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "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 + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "quasar": { + "version": "2.7.7", + "resolved": "https://registry.npmjs.org/quasar/-/quasar-2.7.7.tgz", + "integrity": "sha512-tegG6EmEmv5i24MoNopRkhZOdT5kdLSAxQMA0V/fG04oco52hk2xwvB0EVS8WzT0bZZbc/9iXlAm1c29rZ3yVA==" + }, + "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 + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "dependencies": { + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "requires": { + "resolve": "^1.9.0" + } + }, + "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 + }, + "regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regexpu-core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", + "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } + }, + "regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true + }, + "renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "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 + }, + "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 + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "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 + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "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, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "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==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "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, + "requires": { + "kind-of": "^6.0.2" + } + }, + "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, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "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 + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "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 + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true + }, + "simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "dev": true, + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "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, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + }, + "stream-meter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz", + "integrity": "sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==", + "dev": true, + "requires": { + "readable-stream": "^2.1.4" + } + }, + "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, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "dependencies": { + "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 + }, + "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, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "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, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "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 + }, + "stylehacks": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", + "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "postcss-selector-parser": "^6.0.4" + } + }, + "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, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "terser": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "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 + } + } + }, + "terser-webpack-plugin": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.4.tgz", + "integrity": "sha512-SmnkUhBxLDcBfTIeaq+ZqJXLVEyXxSaNcCeSezECdKjfkMrTTnPvapBILylYwyEvHFZAn2cJ8dtiXel5XnfOfQ==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "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 + }, + "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 + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "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, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "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 + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "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 + }, + "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, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + }, + "update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "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 + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "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==" + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + }, + "vue": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.37.tgz", + "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", + "requires": { + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/runtime-dom": "3.2.37", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "vue-eslint-parser": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.0.3.tgz", + "integrity": "sha512-yL+ZDb+9T0ELG4VIFo/2anAOz8SvBdlqEnQnvJ3M7Scq56DvtjY0VY88bByRZB0D4J0u8olBcfrXTVONXsh4og==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "vue-loader": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.0.0.tgz", + "integrity": "sha512-OWSXjrzIvbF2LtOUmxT3HYgwwubbfFelN8PAP9R9dwpIkj48TVioHhWWSx7W7fk+iF5cgg3CBJRxwTdtLU4Ecg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "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 + }, + "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 + }, + "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, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "vue-router": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.3.tgz", + "integrity": "sha512-XvK81bcYglKiayT7/vYAg/f36ExPC4t90R/HIpzrZ5x+17BOWptXLCrEPufGgZeuq68ww4ekSIMBZY1qdUdfjA==", + "requires": { + "@vue/devtools-api": "^6.1.4" + } + }, + "vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "vuex": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz", + "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==", + "requires": { + "@vue/devtools-api": "^6.0.0-beta.11" + } + }, + "vuex-persist": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vuex-persist/-/vuex-persist-3.1.3.tgz", + "integrity": "sha512-QWOpP4SxmJDC5Y1+0+Yl/F4n7z27syd1St/oP+IYCGe0X0GFio0Zan6kngZFufdIhJm+5dFGDo3VG5kdkCGeRQ==", + "requires": { + "deepmerge": "^4.2.2", + "flatted": "^3.0.5" + } + }, + "watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "webpack": { + "version": "5.74.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", + "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "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.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + } + } + }, + "webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "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, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "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 + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + } + } + } + }, + "webpack-hot-middleware": { + "version": "2.25.2", + "resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.2.tgz", + "integrity": "sha512-CVgm3NAQyfdIonRvXisRwPTUYuSbyZ6BY7782tMeUzWOO7RmVI2NaBYuCp41qyD4gYCkJyTneAJdK69A13B0+A==", + "dev": true, + "requires": { + "ansi-html-community": "0.0.8", + "html-entities": "^2.1.0", + "strip-ansi": "^6.0.0" + } + }, + "webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, + "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 + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "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, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "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, + "requires": { + "color-convert": "^2.0.1" + } + }, + "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, + "requires": { + "color-name": "~1.1.4" + } + }, + "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 + }, + "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 + }, + "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, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "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 + }, + "ws": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", + "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "requires": {} + }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "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 + }, + "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, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + } + } + }, + "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 + }, + "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 + } + } +} diff --git a/server/config/application_env b/server/config/application_env new file mode 100644 index 0000000..baec8fc --- /dev/null +++ b/server/config/application_env @@ -0,0 +1 @@ +development \ No newline at end of file diff --git a/server/config/base.js b/server/config/base.js new file mode 100644 index 0000000..72d1c28 --- /dev/null +++ b/server/config/base.js @@ -0,0 +1,28 @@ +const path = require('path'); +const pckg = require('../../package.json'); + +const execDir = path.resolve(__dirname, '..'); +const dataDir = `${execDir}/.${pckg.name}/data`; + +module.exports = { + branch: 'unknown', + version: pckg.version, + name: pckg.name, + + dataDir, + tempDir: `${dataDir}/tmp`, + logDir: `${dataDir}/log`, + publicDir: `${dataDir}/public`, + + loggingEnabled: true, + + maxFilesDirSize: 1024*1024*1024,//1Gb + + webConfigParams: ['name', 'version', 'branch'], + + server: { + ip: '0.0.0.0', + port: '22380', + }, +}; + diff --git a/server/config/development.js b/server/config/development.js new file mode 100644 index 0000000..89c647c --- /dev/null +++ b/server/config/development.js @@ -0,0 +1,5 @@ +const base = require('./base'); + +module.exports = Object.assign({}, base, { + branch: 'development', +}); diff --git a/server/config/index.js b/server/config/index.js new file mode 100644 index 0000000..ec662f6 --- /dev/null +++ b/server/config/index.js @@ -0,0 +1,89 @@ +const _ = require('lodash'); +const fs = require('fs-extra'); + +const branchFilename = __dirname + '/application_env'; + +const propsToSave = [ + 'loggingEnabled', + 'maxFilesDirSize', + 'server', +]; + +let instance = null; + +//singleton +class ConfigManager { + constructor() { + if (!instance) { + this.inited = false; + + instance = this; + } + + return instance; + } + + async init() { + if (this.inited) + throw new Error('already inited'); + + this.branch = 'production'; + try { + await fs.access(branchFilename); + this.branch = (await fs.readFile(branchFilename, 'utf8')).trim(); + } catch (err) { + // + } + + process.env.NODE_ENV = this.branch; + + this.branchConfigFile = __dirname + `/${this.branch}.js`; + this._config = require(this.branchConfigFile); + + await fs.ensureDir(this._config.dataDir); + this._userConfigFile = `${this._config.dataDir}/config.json`; + + this.inited = true; + } + + get config() { + if (!this.inited) + throw new Error('not inited'); + return _.cloneDeep(this._config); + } + + set config(value) { + Object.assign(this._config, value); + } + + get userConfigFile() { + return this._userConfigFile; + } + + set userConfigFile(value) { + if (value) + this._userConfigFile = value; + } + + async load() { + if (!this.inited) + throw new Error('not inited'); + if (!await fs.pathExists(this.userConfigFile)) { + await this.save(); + return; + } + + const data = await fs.readFile(this.userConfigFile, 'utf8'); + this.config = JSON.parse(data); + } + + async save() { + if (!this.inited) + throw new Error('not inited'); + + const dataToSave = _.pick(this._config, propsToSave); + await fs.writeFile(this.userConfigFile, JSON.stringify(dataToSave, null, 4)); + } +} + +module.exports = ConfigManager; \ No newline at end of file diff --git a/server/config/production.js b/server/config/production.js new file mode 100644 index 0000000..fd4a516 --- /dev/null +++ b/server/config/production.js @@ -0,0 +1,20 @@ +const path = require('path'); +const pckg = require('../../package.json'); +const base = require('./base'); + +const execDir = path.dirname(process.execPath); +const dataDir = `${execDir}/.${pckg.name}/data`; + +module.exports = Object.assign({}, base, { + branch: 'production', + dataDir, + tempDir: `${dataDir}/tmp`, + logDir: `${dataDir}/log`, + publicDir: `${dataDir}/public`, + + server: { + ip: '0.0.0.0', + port: '12380', + }, + +}); diff --git a/server/controllers/WebSocketController.js b/server/controllers/WebSocketController.js new file mode 100644 index 0000000..5cafd99 --- /dev/null +++ b/server/controllers/WebSocketController.js @@ -0,0 +1,105 @@ +const WebSocket = require ('ws'); +const _ = require('lodash'); + +const log = new (require('../core/AppLogger'))().log;//singleton +//const utils = require('../core/utils'); + +const cleanPeriod = 1*60*1000;//1 минута +const closeSocketOnIdle = 5*60*1000;//5 минут + +class WebSocketController { + constructor(wss, config) { + this.config = config; + this.isDevelopment = (config.branch == 'development'); + + this.wss = wss; + + wss.on('connection', (ws) => { + ws.on('message', (message) => { + this.onMessage(ws, message.toString()); + }); + + ws.on('error', (err) => { + log(LM_ERR, err); + }); + }); + + setTimeout(() => { this.periodicClean(); }, cleanPeriod); + } + + periodicClean() { + try { + const now = Date.now(); + this.wss.clients.forEach((ws) => { + if (!ws.lastActivity || now - ws.lastActivity > closeSocketOnIdle - 50) { + ws.terminate(); + } + }); + } finally { + setTimeout(() => { this.periodicClean(); }, cleanPeriod); + } + } + + async onMessage(ws, message) { + let req = {}; + try { + if (this.isDevelopment) { + log(`WebSocket-IN: ${message.substr(0, 4000)}`); + } + + req = JSON.parse(message); + + ws.lastActivity = Date.now(); + + //pong for WebSocketConnection + this.send({_rok: 1}, req, ws); + + switch (req.action) { + case 'test': + await this.test(req, ws); break; + case 'get-config': + await this.getConfig(req, ws); break; + + default: + throw new Error(`Action not found: ${req.action}`); + } + } catch (e) { + this.send({error: e.message}, req, ws); + } + } + + send(res, req, ws) { + if (ws.readyState == WebSocket.OPEN) { + ws.lastActivity = Date.now(); + let r = res; + if (req.requestId) + r = Object.assign({requestId: req.requestId}, r); + + const message = JSON.stringify(r); + ws.send(message); + + if (this.isDevelopment) { + log(`WebSocket-OUT: ${message.substr(0, 4000)}`); + } + + } + } + + //Actions ------------------------------------------------------------------ + async test(req, ws) { + this.send({message: `${this.config.name} project is awesome`}, req, ws); + } + + async getConfig(req, ws) { + if (Array.isArray(req.params)) { + const paramsSet = new Set(req.params); + + this.send(_.pick(this.config, this.config.webConfigParams.filter(x => paramsSet.has(x))), req, ws); + } else { + throw new Error('params is not an array'); + } + } + +} + +module.exports = WebSocketController; diff --git a/server/controllers/index.js b/server/controllers/index.js new file mode 100644 index 0000000..4fc879c --- /dev/null +++ b/server/controllers/index.js @@ -0,0 +1,3 @@ +module.exports = { + WebSocketController: require('./WebSocketController'), +} \ No newline at end of file diff --git a/server/core/AppLogger.js b/server/core/AppLogger.js new file mode 100644 index 0000000..68c8e1f --- /dev/null +++ b/server/core/AppLogger.js @@ -0,0 +1,60 @@ +const fs = require('fs-extra'); +const Logger = require('./Logger'); + +let instance = null; + +//singleton +class AppLogger { + constructor() { + if (!instance) { + this.inited = false; + this.logFileName = ''; + this.errLogFileName = ''; + this.fatalLogFileName = ''; + + instance = this; + } + + return instance; + } + + async init(config) { + if (this.inited) + throw new Error('already inited'); + + let loggerParams = null; + + if (config.loggingEnabled) { + await fs.ensureDir(config.logDir); + + this.logFileName = `${config.logDir}/${config.name}.log`; + this.errLogFileName = `${config.logDir}/${config.name}.err.log`; + this.fatalLogFileName = `${config.logDir}/${config.name}.fatal.log`; + + loggerParams = [ + {log: 'ConsoleLog'}, + {log: 'FileLog', fileName: this.logFileName}, + {log: 'FileLog', fileName: this.errLogFileName, exclude: [LM_OK, LM_INFO, LM_TOTAL]}, + {log: 'FileLog', fileName: this.fatalLogFileName, exclude: [LM_OK, LM_INFO, LM_WARN, LM_ERR, LM_TOTAL]},//LM_FATAL only + ]; + } + + this._logger = new Logger(loggerParams); + + this.inited = true; + return this.logger; + } + + get logger() { + if (!this.inited) + throw new Error('not inited'); + return this._logger; + } + + get log() { + const l = this.logger; + return l.log.bind(l); + } +} + +module.exports = AppLogger; diff --git a/server/core/AsyncExit.js b/server/core/AsyncExit.js new file mode 100644 index 0000000..1ea5944 --- /dev/null +++ b/server/core/AsyncExit.js @@ -0,0 +1,105 @@ +let instance = null; + +const defaultTimeout = 15*1000;//15 sec +const exitSignals = ['SIGINT', 'SIGTERM', 'SIGBREAK', 'SIGHUP', 'uncaughtException']; + +//singleton +class AsyncExit { + constructor(signals = exitSignals, codeOnSignal = 2) { + if (!instance) { + this.onSignalCallbacks = new Map(); + this.callbacks = new Map(); + this.afterCallbacks = new Map(); + this.exitTimeout = defaultTimeout; + + this._init(signals, codeOnSignal); + + instance = this; + } + + return instance; + } + + _init(signals, codeOnSignal) { + const runSingalCallbacks = async(signal, err, origin) => { + for (const signalCallback of this.onSignalCallbacks.keys()) { + try { + await signalCallback(signal, err, origin); + } catch(e) { + console.error(e); + } + } + }; + + for (const signal of signals) { + process.once(signal, async(err, origin) => { + await runSingalCallbacks(signal, err, origin); + this.exit(codeOnSignal); + }); + } + } + + onSignal(signalCallback) { + if (!this.onSignalCallbacks.has(signalCallback)) { + this.onSignalCallbacks.set(signalCallback, true); + } + } + + add(exitCallback) { + if (!this.callbacks.has(exitCallback)) { + this.callbacks.set(exitCallback, true); + } + } + + addAfter(exitCallback) { + if (!this.afterCallbacks.has(exitCallback)) { + this.afterCallbacks.set(exitCallback, true); + } + } + + remove(exitCallback) { + if (this.callbacks.has(exitCallback)) { + this.callbacks.delete(exitCallback); + } + if (this.afterCallbacks.has(exitCallback)) { + this.afterCallbacks.delete(exitCallback); + } + } + + setExitTimeout(timeout) { + this.exitTimeout = timeout; + } + + exit(code = 0) { + if (this.exiting) + return; + + this.exiting = true; + + const timer = setTimeout(() => { process.exit(code); }, this.exitTimeout); + + (async() => { + for (const exitCallback of this.callbacks.keys()) { + try { + await exitCallback(); + } catch(e) { + console.error(e); + } + } + + for (const exitCallback of this.afterCallbacks.keys()) { + try { + await exitCallback(); + } catch(e) { + console.error(e); + } + } + + clearTimeout(timer); + //console.log('Exited gracefully'); + process.exit(code); + })(); + } +} + +module.exports = AsyncExit; diff --git a/server/core/Logger.js b/server/core/Logger.js new file mode 100644 index 0000000..0b9dae6 --- /dev/null +++ b/server/core/Logger.js @@ -0,0 +1,232 @@ +/* + Журналирование с буферизацией вывода +*/ +const fs = require('fs-extra'); +const ayncExit = new (require('./AsyncExit'))(); + +const sleep = (ms) => { return new Promise(resolve => setTimeout(resolve, ms)) }; + +global.LM_OK = 0; +global.LM_INFO = 1; +global.LM_WARN = 2; +global.LM_ERR = 3; +global.LM_FATAL = 4; +global.LM_TOTAL = 5; + +const LOG_CACHE_BUFFER_SIZE = 8192; +const LOG_BUFFER_FLUSH_INTERVAL = 200; + +const LOG_ROTATE_FILE_LENGTH = 1000000; +const LOG_ROTATE_FILE_DEPTH = 9; +const LOG_ROTATE_FILE_CHECK_INTERVAL = 60000; + +let msgTypeToStr = { + [LM_OK]: ' OK', + [LM_INFO]: ' INFO', + [LM_WARN]: ' WARN', + [LM_ERR]: 'ERROR', + [LM_FATAL]: 'FATAL ERROR', + [LM_TOTAL]: 'TOTAL' +}; + +class BaseLog { + + constructor(params) { + this.params = params; + this.exclude = new Set(params.exclude); + this.outputBufferLength = 0; + this.outputBuffer = []; + this.flushing = false; + } + + async flush() { + if (this.flushing || !this.outputBufferLength) + return; + this.flushing = true; + + this.data = this.outputBuffer; + this.outputBufferLength = 0; + this.outputBuffer = []; + + await this.flushImpl(this.data) + .catch(e => { console.error(`Logger error: ${e}`); ayncExit.exit(1); } ); + this.flushing = false; + } + + log(msgType, message) { + if (this.closed) + return; + + if (!this.exclude.has(msgType)) { + this.outputBuffer.push(message); + this.outputBufferLength += message.length; + + if (this.outputBufferLength >= LOG_CACHE_BUFFER_SIZE && !this.flushing) { + this.flush(); + } + + if (!this.iid) { + this.iid = setInterval(() => { + if (!this.flushing) { + clearInterval(this.iid); + this.iid = 0; + this.flush(); + } + }, LOG_BUFFER_FLUSH_INTERVAL); + } + } + } + + async close() { + if (this.closed) + return; + + if (this.iid) + clearInterval(this.iid); + + try { + while (this.outputBufferLength) { + await this.flush(); + await sleep(1); + } + } catch(e) { + console.log(e); + ayncExit.exit(1); + } + this.outputBufferLength = 0; + this.outputBuffer = []; + this.closed = true; + } +} + +class FileLog extends BaseLog { + + constructor(params) { + super(params); + this.fileName = params.fileName; + this.fd = fs.openSync(this.fileName, 'a'); + this.rcid = 0; + } + + async close() { + if (this.closed) + return; + await super.close(); + if (this.fd) { + await fs.close(this.fd); + this.fd = null; + } + if (this.rcid) + clearTimeout(this.rcid); + } + + async rotateFile(fileName, i) { + let fn = fileName; + if (i > 0) + fn += `.${i}`; + let tn = fileName + '.' + (i + 1); + let exists = await fs.access(tn).then(() => true).catch(() => false); + if (exists) { + if (i >= LOG_ROTATE_FILE_DEPTH - 1) { + await fs.unlink(tn); + } else { + await this.rotateFile(fileName, i + 1); + } + } + await fs.rename(fn, tn); + } + + async doFileRotationIfNeeded() { + this.rcid = 0; + + let stat = await fs.fstat(this.fd); + if (stat.size > LOG_ROTATE_FILE_LENGTH) { + await fs.close(this.fd); + await this.rotateFile(this.fileName, 0); + this.fd = await fs.open(this.fileName, "a"); + } + } + + async flushImpl(data) { + if (this.closed) + return; + + if (!this.rcid) { + await this.doFileRotationIfNeeded(); + this.rcid = setTimeout(() => { + this.rcid = 0; + }, LOG_ROTATE_FILE_CHECK_INTERVAL); + } + + if (this.fd) + await fs.write(this.fd, Buffer.from(data.join(''))); + } +} + +class ConsoleLog extends BaseLog { + async flushImpl(data) { + process.stdout.write(data.join('')); + } +} + +//------------------------------------------------------------------ +const factory = { + ConsoleLog, + FileLog, +}; + +class Logger { + + constructor(params = null) { + this.handlers = []; + if (params) { + params.forEach((logParams) => { + let className = logParams.log; + let loggerClass = factory[className]; + this.handlers.push(new loggerClass(logParams)); + }); + } + + this.closed = false; + ayncExit.onSignal((signal, err) => { + this.log(LM_FATAL, `Signal "${signal}" received, error: "${(err.stack ? err.stack : err)}", exiting...`); + }); + ayncExit.addAfter(this.close.bind(this)); + } + + formatDate(date) { + return `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date.getDate().toString().padStart(2, '0')} ` + + `${date.getHours().toString().padStart(2, '0')}:${date.getMinutes().toString().padStart(2, '0')}:${date.getSeconds().toString().padStart(2, '0')}.` + + `${date.getMilliseconds().toString().padStart(3, '0')}`; + } + + prepareMessage(msgType, message) { + return this.formatDate(new Date()) + ` ${msgTypeToStr[msgType]}: ${message}\n`; + } + + log(msgType, message) { + if (message == null) { + message = msgType; + msgType = LM_INFO; + } + + const mes = this.prepareMessage(msgType, message); + + if (!this.closed) { + for (let i = 0; i < this.handlers.length; i++) + this.handlers[i].log(msgType, mes); + } else { + console.log(mes); + } + + return mes; + } + + async close() { + for (let i = 0; i < this.handlers.length; i++) + await this.handlers[i].close(); + this.closed = true; + } +} + +module.exports = Logger; \ No newline at end of file diff --git a/server/core/utils.js b/server/core/utils.js new file mode 100644 index 0000000..f81ae0b --- /dev/null +++ b/server/core/utils.js @@ -0,0 +1,7 @@ +function versionText(config) { + return `${config.name} v${config.version}, Node.js ${process.version}`; +} + +module.exports = { + versionText, +}; \ No newline at end of file diff --git a/server/dev.js b/server/dev.js new file mode 100644 index 0000000..1ae2dfb --- /dev/null +++ b/server/dev.js @@ -0,0 +1,43 @@ +const log = new (require('./core/AppLogger'))().log;//singleton + +function webpackDevMiddleware(app) { + const webpack = require('webpack'); + const wpConfig = require('../build/webpack.dev.config'); + + const compiler = webpack(wpConfig); + const devMiddleware = require('webpack-dev-middleware'); + app.use(devMiddleware(compiler, { + publicPath: wpConfig.output.publicPath, + stats: {colors: true} + })); + + let hotMiddleware = require('webpack-hot-middleware'); + app.use(hotMiddleware(compiler, { + log: log + })); +} + +function logQueries(app) { + app.use(function(req, res, next) { + const start = Date.now(); + log(`${req.method} ${req.originalUrl} ${JSON.stringify(req.body).substr(0, 4000)}`); + //log(`${JSON.stringify(req.headers, null, 2)}`) + res.once('finish', () => { + log(`${Date.now() - start}ms`); + }); + next(); + }); +} + +function logErrors(app) { + app.use(function(err, req, res, next) {// eslint-disable-line no-unused-vars + log(LM_ERR, err.stack); + res.status(500).send(err.stack); + }); +} + +module.exports = { + webpackDevMiddleware, + logQueries, + logErrors +}; \ No newline at end of file diff --git a/server/index.js b/server/index.js new file mode 100644 index 0000000..d9473e4 --- /dev/null +++ b/server/index.js @@ -0,0 +1,121 @@ +const fs = require('fs-extra'); +const argv = require('minimist')(process.argv.slice(2)); +const express = require('express'); +const compression = require('compression'); +const http = require('http'); +const WebSocket = require ('ws'); + +const ayncExit = new (require('./core/AsyncExit'))(); +const utils = require('./core/utils'); + +let log = null; +let config = null; + +const maxPayloadSize = 50;//in MB + +async function init() { + //config + const configManager = new (require('./config'))();//singleton + await configManager.init(); + //configManager.userConfigFile = argv.config; + await configManager.load(); + config = configManager.config; + + //logger + const appLogger = new (require('./core/AppLogger'))();//singleton + await appLogger.init(config); + log = appLogger.log; + + if (!argv.help) { + log(utils.versionText(config)); + log('Initializing'); + } + + //dirs + await fs.ensureDir(config.dataDir); + await fs.ensureDir(config.tempDir); + await fs.emptyDir(config.tempDir); + + const appDir = `${config.publicDir}/app`; + const appNewDir = `${config.publicDir}/app_new`; + if (await fs.pathExists(appNewDir)) { + await fs.remove(appDir); + await fs.move(appNewDir, appDir); + } +} + +function showHelp() { + console.log(utils.versionText(config)); + console.log( +`Usage: ${config.name} [options] + +Options: + --help Print ${config.name} command line options +` + ); +} + +async function main() { + if (argv.help) { + showHelp(); + ayncExit.exit(0); + } + + const log = new (require('./core/AppLogger'))().log;//singleton + + //server + const app = express(); + + const server = http.createServer(app); + const wss = new WebSocket.Server({ server, maxPayload: maxPayloadSize*1024*1024 }); + + const serverConfig = Object.assign({}, config, config.server); + + let devModule = undefined; + if (serverConfig.branch == 'development') { + const devFileName = './dev.js'; //require ignored by pkg -50Mb executable size + devModule = require(devFileName); + devModule.webpackDevMiddleware(app); + } + + app.use(compression({ level: 1 })); + //app.use(express.json({limit: `${maxPayloadSize}mb`})); + if (devModule) + devModule.logQueries(app); + + initStatic(app, config); + + const { WebSocketController } = require('./controllers'); + new WebSocketController(wss, config); + + if (devModule) { + devModule.logErrors(app); + } else { + app.use(function(err, req, res, next) {// eslint-disable-line no-unused-vars + log(LM_ERR, err.stack); + res.sendStatus(500); + }); + } + + server.listen(serverConfig.port, serverConfig.ip, function() { + log(`Server is ready on http://${serverConfig.ip}:${serverConfig.port}`); + }); +} + +function initStatic(app, config) {// eslint-disable-line + //загрузка файлов в /files + //TODO +} + +(async() => { + try { + await init(); + await main(); + } catch (e) { + if (log) + log(LM_FATAL, e.stack); + else + console.error(e.stack); + ayncExit.exit(1); + } +})(); From 78be5a98568b927edd656835a5ff4f568b6453ca Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 16 Aug 2022 14:54:41 +0700 Subject: [PATCH 002/177] =?UTF-8?q?=D0=9A=D0=B0=D1=80=D0=BA=D0=B0=D1=81=20?= =?UTF-8?q?=D0=B1=D1=83=D0=B4=D1=83=D1=89=D0=B5=D0=B3=D0=BE=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/webpack.base.config.js | 4 - build/webpack.dev.config.js | 3 +- client/assets/robots.txt | 2 + client/components/App.vue | 141 +++++++++ client/components/Search/Search.vue | 38 +++ client/components/fonts/web-default.ttf | Bin 0 -> 156520 bytes client/components/fonts/web-default.woff | Bin 0 -> 75164 bytes client/components/share/Dialog.vue | 80 +++++ client/components/share/Notify.vue | 58 ++++ client/components/share/StdDialog.vue | 361 +++++++++++++++++++++++ client/components/vueComponent.js | 52 ++++ client/index.html.template | 11 + client/main.js | 16 + client/quasar.js | 97 ++++++ client/router.js | 38 +++ client/share/utils.js | 30 ++ client/store/index.js | 15 + client/store/root.js | 25 ++ server/config/base.js | 2 +- server/config/production.js | 2 +- server/dev.js | 2 +- server/index.js | 11 + 22 files changed, 980 insertions(+), 8 deletions(-) create mode 100644 client/assets/robots.txt create mode 100644 client/components/App.vue create mode 100644 client/components/Search/Search.vue create mode 100644 client/components/fonts/web-default.ttf create mode 100644 client/components/fonts/web-default.woff create mode 100644 client/components/share/Dialog.vue create mode 100644 client/components/share/Notify.vue create mode 100644 client/components/share/StdDialog.vue create mode 100644 client/components/vueComponent.js create mode 100644 client/index.html.template create mode 100644 client/main.js create mode 100644 client/quasar.js create mode 100644 client/router.js create mode 100644 client/share/utils.js create mode 100644 client/store/index.js create mode 100644 client/store/root.js diff --git a/build/webpack.base.config.js b/build/webpack.base.config.js index 360f1df..180ae23 100644 --- a/build/webpack.base.config.js +++ b/build/webpack.base.config.js @@ -21,10 +21,6 @@ module.exports = { test: /\.vue$/, loader: 'vue-loader', }, - { - resourceQuery: /^\?vue/, - use: path.resolve(__dirname, 'includer.js') - }, { test: /\.js$/, loader: 'babel-loader', diff --git a/build/webpack.dev.config.js b/build/webpack.dev.config.js index f27ee9b..8e0c014 100644 --- a/build/webpack.dev.config.js +++ b/build/webpack.dev.config.js @@ -1,5 +1,6 @@ const path = require('path'); const webpack = require('webpack'); +const pckg = require('../package.json'); const { merge } = require('webpack-merge'); const baseWpConfig = require('./webpack.base.config'); @@ -8,7 +9,7 @@ baseWpConfig.entry.unshift('webpack-hot-middleware/client'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const CopyWebpackPlugin = require('copy-webpack-plugin'); -const publicDir = path.resolve(__dirname, '../server/public'); +const publicDir = path.resolve(__dirname, `../server/.${pckg.name}/public`); const clientDir = path.resolve(__dirname, '../client'); module.exports = merge(baseWpConfig, { diff --git a/client/assets/robots.txt b/client/assets/robots.txt new file mode 100644 index 0000000..4d6e74a --- /dev/null +++ b/client/assets/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: /# diff --git a/client/components/App.vue b/client/components/App.vue new file mode 100644 index 0000000..88de668 --- /dev/null +++ b/client/components/App.vue @@ -0,0 +1,141 @@ + + + + + + + diff --git a/client/components/Search/Search.vue b/client/components/Search/Search.vue new file mode 100644 index 0000000..3c664f3 --- /dev/null +++ b/client/components/Search/Search.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/client/components/fonts/web-default.ttf b/client/components/fonts/web-default.ttf new file mode 100644 index 0000000000000000000000000000000000000000..4a3a5e6fc92fd5c8ee39f11f532a38f608195a1d GIT binary patch literal 156520 zcmd442V7Ohwg)^jyBvCNg2I6#y@+&C;RuS@5ET`yU_n$gY7AmDh+PpZ*gGiplA|%k z7}JHQQD3e}Of!k?=B3@l6jPM5`Tny{5sl{Mec$i>exEm+z0cmWXV$D)eXZG-P(p|s z{)j}Im6g|T=(o|o5;nFk?zZjOy+@Y4w|s@rL$UZB)ibyMp!^?QGYCEMD107Al+5jwo2WPH&$dFpZi zOQY~SiQjPe-R>j&9*5uUOQy^$pMJJ{9bmCRH(g4f8e3GH_$u0JOVFKmN>TYVX{gX1 z?U$jwc52a-@&7q_w1CiscL))xrakra%w7qD?Fd~umk`~7X*0%8bGm zLhZ@)O#Lf5^E>#vk$92OM8cc7ICHEYpcjdNr-FExuErBl+9JiH%K+0^_!lX*3}fo> zI$=NN676vO((*ggX3uz<=!tEMQ6>r@#hNV)59rSRe8g1AptfV|dxAAWzefJo^p9UN zKXQnDPAbG^k|iD>3#Cs<39j|@RZ_wBkwxrzA`3G~zF0+a=sFTBY$f|xdr~h9Brf87 zG9Aa;II3`z{E!C5QER(z@jwSth8?l%ilz&0nT{vcv>FRrHarVZu+hm4#o&-yi z$XfL2CEvoeGs(aahWkY?R_cPX?mTNn$lw1(=F(9>dRU7fHc& zDZkG|vXi;Bye9gR)%;pk(3ZEaR@?LQ7jAExq zI=xTU;Or?qMJhS&@q4v62K^i)Sy-nM@iXF2e<5qc@5m^@h`Dwr`NDcqE;OOdbTW_Q zUcGmc%whLQrPzy%6~>WSLMfTXR+5Dnd$aHZNoQ?IJ^G);qRD7skNW;hxidK>AI5Q) zR0?;^c;~o(lL4KfK6J&Lhme<&4TFpjELP^8~+enl+!N zKJt5~m`K7{4EO~6q>lZ_8E||lEhF{nGpsMpMSNXbpEdhQi6#yA!GoL+%;(AG^Ej0+ z!5dFJgJ)H~dH5`Iy1_Ur{^^@^1TE3CyfX6oi_6->8 z1X-ct&rBDb4>&Da=4*kUx54{$!u#Zqu!U3$rDO?oy$hx2KVxC&cM13 z#Te5t<^_IVTmo9|kAus+I?{-9je74@$a4+k80RPcyaRcfw-IX~UwAuCXVt2_l0i6+mg>lG`4TC`96#dsad7^v;rGO!Kx5rnzLm2{ zjz#`R-;z$C@!g<@rF<>SvgiV*dz;N94#$3Z3F)QcqK+H^|7NK3=lFBLdt86ueL0jQ z@jm5^kO33PbAaQBdT<@I(~LtiZY}szWdX;ZsZSIBj99;C$Xc5K(qJ==G)Tt@kw3&Z zb~q-I)0#l=7mM(HzAAqn{^MzXCd%71u*@g;fs#|{M<73Ps ztl<=u2OvkeZj*l_-JlovnC>bZ93Cz!an`IP<B(?pZkrF&$f_&(%k zFXE_iB>$2f$!YmZvR?Y0the!>|oMc_!R5G=?rVF@=*=w7P^_!lj+=|*gi|9 z+tlK|S+4N$gMzW#g-RN4Uk0n=`=1ZOYMq;JbB^82K> z)I{Pquc^3rnH+$gUS$&kT5HC57FlT48Jx#NtP}bPGtbd-&fsgNNhZnCTB7B2!`DtK z!?{#FSK+))eiuCQddruVGpBJYtQqIZ~BHaL|iYMz?Lxy9HW8?mt@wjhj*|9LAZ)6MWE+=RR-Bpfz;VRwIE&7B^lZV`W6ne@ZrS~q`;WIJ9>Krm zJq!Myd~UfV#mzo0Q$=n_3%HwA#;T*WRlHA=n0WbkbKA{ z`E@c`Glb04EFsT8{!NB$nJsN2`(c~%arcWKk#w65q=Y%PoDmn0@sPut#1ygv{cV99 z3WpavUYtqVihD_l#tTO_N#S#}Ng%^*63GbeBf#z-i}99=cHl*49Cj^(LHp(6X%Y&U zpJp0TC(eevt%ZC%h;vUI0XW{r@B7?d# z^w1TSqX>2e4w;d3KKA1d%%!J#06vU2n!~9cN6@e3;QgBqKAz>^aI`umao9MFfORE~ z&aiVo#IXrS9iM|b7d{`$!RPqs!RO9#(E0$5IG)r4^WpOl8ptxsd@QiFK64l`?rt3C zIqq;i`IoWy7?yq?cjmY`*m74rZlNvkA;3=LV`I&h(KV!ybtLXgYi97tNExhP_oNGxXk%=3wY>6YOpz~-gt)~WhhqkabESa5Q@38aibM}is1wpVC zoCTdwB~%Ob!e!x#a8+C)x%*T9bpOTve+Kl^+G{~k~iW|x~CuaCYNa^v2Op ztF(%knoKl^*4Yv}Vow}EpH9RXQAk(Nt2^-^o`}hL6Ccus_!2)*bUWft0*ICbk|3fZ z?MW~RA)zFUgp&voNuo$Ji6I>jyX#2eNIXd(i6n_6LvnW_siZUMLb{SPl8%U6Hg5W13?q?k+~lZABhEZI$FkSW3-Qcg;RB2q=R38Tm}!WdyJnMh^}1;TJ) z7~Lj}CR4%1i^)N9hAbrGAumSK?m{7*PM$&>sv8+c77=(D)QfrxaYDS1Ds&c-gkvV^Q8i^(cdP1ZnStR<@v58Z?rZXi3zPO_cc zrFnE1d72KPLuo#lONY|}I+$Q;QQC0^ZDFy_KyvfP7epHm!7<3FVyT0<pOlGY8}wG?|gdL9UsF z83wQMZP8AM!ZU3TgKg$mgI(sB?$HL(bVrL0b;o2exKP`pN>{|EqK-`bICKWBA7)?~ z&maWrin`-nDat?#wOWH?W^axKT<9_i3{L#lK>TvTuV{nJ2QaYU3^OFh9C3Zj34aXK zOQ%I==pQY_;Ebv&EygxT5rH}bEwWr=uIl^fLw#0&@p@vEo`r_WF_xKVk5S^8sm;Rs zDF$Y~c#%;?DaG{hU$j9JMGQ8&jFZmJHjGf4%#4goZDAosIwrHoXoF3Zw$R{QsLjOS zg?vQ(Hy~f9?Sh{=gWLGFeu06Qk8PB}CemON5pA%G(rSBZEf8Q}owjOl{=>KY_$&4p zn0guPA`H|sHrn72rAQgj9Pt9|Eu|Mb_&s9N`5+Ylf`M6BitdApLzi+rryvD+>RfGoa`jd zRvaBzm?A9}i6czFU&tFjU0{K=Q(S==ungw)LI*JhTP&LwrfbEKKc72MfA7iji;03X=n!RyF=;xOQ7_xT${h=9hO-jUO*6RkfNTgW zgpo5iAL?!_bdRkr;{{0;SmX;D2maU54S)TP+1h1h6dbn?V?73D;EBj0(I5Ub!scvL z|8C`(WZ6edB}6Hd8e6`Tqs5$-@032IyX302je>1#`CmS~T$#?Kzp)+cEv5(=LYZ(> z_*iHbeZ(YjuDC<|K`NB$WFk+McWIn7&uXeQJ2a;?-`dDFg|<^|_uJXn726%OyKV1f zUuM7G{;a*?km@kXVVlE6M_~y>hZJZ7|)ZQ&0aITzV+_ny~F!^pDsR=d@i&h zZL-_UZF8>8SH5w+6~0S+-|~y_TiKSi&1<`$om;zzP5cs`+LC-!T!Oq!5P7M!NtMVArT>6LUKY1LuQ053b`Dr4;>gfE_7z-qR@4r zd&4rq^1_P4%EOk0Z3;UWb~@~0*cais;f3Kd!WV_F3vUQN5q>9PYD8s3ZN#pK;}K^g z{Uc){^^v)eVkvAiMjgq6hqQat5qgF?2qvN78qVuB1MVCb{ zi(VJKH~Licx#&-$zm0B=af;E##Km-v84^wRfj)f?PA-;#>7sFog2F{wl4N~?Ah3>v0umD>loLuu;Yx5i#l%TxWD7+ zju$#!i;Icd6?Y=;Y~0njujB5;JH($$7??0Fp)6rp!j^=?31<>6CtOeXIgurLB!(oW zBxWZLODs*SNL-zGF)1o3Eh#6dFlk28qNEK;`;$&5T}=8S>D#2=l5LWGlcSQmB%6k_#V%r(xm`|ob?EBfHMVPN*Jrz)?s~23y|kFL)U=GWytLx9^0Y;1tJAin9Zfr# z_FCHQbdU75>Fv{_(wC*LPT!P%HvMAy2YM&Hmp)COrC+9Bt>4rQ!RT&%yESw>+3j4n zPrH5JP04V{2+FveIVy8q=5O7LyT8`MtH-1s4LuHLrDkPh_0Bq(^;*xMo@G5RWcy@i zWLIWi>$R=d_q}s_kLf+5_oCh#dhhS!);FPVUEkw<&-Qca7u2u1-<^Jc^;dG`+=02na`zAL8IV0-*nlwub`01%;OKyp16~`@G~n`p zs{{Q9h761uIA&nOz>f#{3>q`&=%71!!}6{U_8%NF_{zs1-Y{`k#;~$sCx?^aeTP>M|82yg5$}z-IpXJ$ z<3^T^ygu^lk#|P1QFfz>N1YmNH@fZUn9*sYXBM);frWbun~UBWvwF;xu|8u<$G$Z# zYTU~44&xUTi^WTdR~B!W;5A|0gr7@tOU9JUEU7H1o)|aDY0~A%%Suy9uS`juvSZ5a zso7K4O+7L7gJ~nCv*~T8Crz)K{>6-#87F4kep>tVu&38OeQl<8X4K4-nZ0L@m{~G& z=FGFtxII(&%;9J5lqHnu%leirDSKml2*zAmpUuPtvVHJFjHkv-7Iw?U;A8(x$SqvbM6J z@?>RG<;Rs@SKg`oW4_&d-}zDVyUfp-UpRlp`~~yZ&EGr!)ckYvKbU`g{%;E$7HAhF zEy!4qvtYx5YYT%GMl4*mNL(~+(HD!07yq!Na>>1=Q4J%HrXj<{{imz8F)o#`8t7EG(s`ILgtIMjFRd1?3Sbe(sV)Yl*cWPKo z+nU&#jGDZf;+pcBs+w&zM{C}wxl(hp=GT?tO0Sh+D^pkYU0J-ca%JtxhLtB*o?H3p z%I{YytDIK(u8LZfwyO845v!)Is$5mOs$td1Rp(ZHy6XE?&8wYO`>u{!-DP#o>cZ7C zRxet;VfEhCr=Iw~w^mV`U@NM8|pUP+|ax+YGd)nij5mK9^KfqN!;YSDQ#2k zrm35nHvO?VXLH%+)te7){$TUhTe@t?-jcUv+?H`$hiq-Y|4wc_x3zg&)V7>$)3()a zJG1S*?GD@Z+e@}D*h_;^upRApWbGKXqhiPE9Y=TE-087XyEArY#?HK*<95#6 zxnyVU&W4>Qcb?n%>CW$WHrF}T`Pb#ujjJoGTT-{F?qJ=Sy32K6)ZM9P^&a&h^(pne z>qpd2t*@+KUB9jVX#E@YSL$!p|GG=w<+CenSIVyLyN2v4-c`11$*v8%_U}5i>%y+9 zyT0D_$8NjbzPr2c9(cNNC7v$Zwd`Ft=f4 z!;Xfd4X-u4*Ko7p*FEwcpFMedR`1!g=gMBEz1qE5dyDs0?cK5W@;;Y+N&BYmJHGGA zez*M*`*ZeB+F!f>?74jP8>Nw7$RYWjgtl=a*X^hLI@qY9M_2M|A{*$OV_#_7Z@(d zF@fKf`0e8w*`vA3amw$P9qPmT&q8)*7y9=@w6R7X6yV>kt)FijA8#)N0Nh+% zoShsU?CorAEc0;UJ6|8=WX}W#hVgl1zMTz~WsR4!9TP_ zTk_LK@H_mmfII?g_qdnMjl}{LCxQ+*L7W{&yugomPn~+`@Jq+ewd8Kh{hr!%Zy~hp zz>Nb*3;w)wv-@Yi=Wbd{TDrH;ElM%nQcXv!q;*OmKUOLY)k-l7;fXy;7PiESA@X+E zi^KI!k>Q~sfm#nY7iW7r*|KVS2U|=pm`Y+$023s^lTaoC`{AgNWTF(xm!9(f+7U?* zB#PjzBmo(I1dR#t(eQaBgoMV>#Dt{e#CT7C>ZwZz(FMt#9$wz~;UQ~0b%`-FoyL23 z#m6NHMf28Pxcu7Q9s6EBTk%v`*|R$?HeEik{qQxBy|!)I{57Lhvd8M-GV#m9NIqaLy@C?wG|k*=6FpC`u55l(7R7A z>(H=#*`9`_=34`M^&X%&Phsy&5jV{{dZe=7yu*j*^`21Nr(f@h6MHvbns?;LyqwCz zhb#L`n9wJucS%X_-!sJ-nLJ{zZ~0Dq4>$?k+#J`W4R^i!L%u2i^NZ$;94)4ia?S17xUKm=~Mr~>t>!;-$s5I zR3bPD-WpErz+tjVCBP)8!kN-E3RKD(Z;dY0iRyydOL0lbRO1Ai@e)8h$#|}!SYK0} z)A#K|JDMg=m_qZyV+=XHUuORvocmVECrS(bG`l)Y*%&sw^GfHWq^eHgML7fV>9S{E z8Zmb3zymLxtQ@ndPp&ed+m8H2*9*Rsio2wL)wg2|eW6|VxpC8Lg`0^_cOM;6kkob5 zbl{;vc!_q0tdK~k9`X&bRtx=j;3weG6m`Iqt)wY`Iui=8?z3U@)g9KGJxezQ%lACLy3kyw-_ad$=KzZ}19J2J%`}0HOqcojmDbE<+ zA6Yt)-k>8LkxaNXwREKMic*H|^XU@7Pwa#YP?%nnM9cj3-d17DRfnUR$+QC+xDW|V z_705~lD$C>p_)+I{risJ+tu5B6Z`Y#Mb%3evs0N{hAB#O!M5(_3O~I9>Bi+-4yhFr z#FNN3rRkkoOL41w(_t-97>z0`6f=Ro@e&thKm>@B@sp3Lo&r4sU3IPy#84%B=qhD; zqcWA&HVV$il|=gPak@_(FIG`#XYx7v?DzhNb%;$+uLXU_6gsp|^ z^D!Bj4*BC^mcg(IEK=91yM18*01@0KfK;_gSSMn#2|SoCh$XrvxW&i0d4`(AsjI3b z5=EE$AG~k8|NaNY#_Gy>RW%irRgC?vT&LRK>EXLHNcrM!`1X@0w=2T-Q!nk{fW8fY zngEML+CMT6SI)`qXrfX*P{1)5sB@JPgIQCP@-`F1d%~t9G^m2D;Ez6hNe{h)ZyPrk zM+Z9_N+ipQL^(l1Vu?hqL#PM|8jh)%1s!H6@{}ppAs9r)AmKETOF7fbbfFM#@P{8lSCpY3=p$5mT3<-JzyxcqcYd(02;&}j;Y8R zNe;)P2;NW?U+W3TGWf&~^KcTqZ8%rPB|U(?y%~B{t3zH}R61Hj(nOZIXv(Z-W~@I0 zD}kMV_p8Z;Q=c|oIIa9!VrMqbF0Y!mY?shwVcFEBHIw9quP?n*yuU-#3-iw1`s{=} zY0dib<;&C}2!;$U5qX`y9kRz=^-kP4v)E=2RB<^&~iL(>O10O$_w5+zvFZk_M(i z+E5qbjyXVy!`cIBu=zvwCr5Ou$XkA>>%PJ>pWS`$f^vuI_KsYvtAA$B;#E>(knhGe z0pGqby=zwUrR&OFtd^9bhu%bo8iXvpQ%qD?NRYOzuNQ18D-}jM3yew7r%*A11P+5aDL!7@sR#q( zbJh{TI^0;c7(;?dJeaKG*4IB*PMW(xxqsoR^3&!8(-z!qJpJRgtuyBCs-HJwbNIrd z$yL>pi{^`6W*mu(JTvF~wQJ|+oQaA!GUN3N?>29lwPnk!IqTL70TY)kocdH11RJM~ zk*Lu9i_e~z+p`xHzPd)el^^aYS@)Iy)&^|Q`cY+6ufw~Ky}o(F%LJ7^^<4LfNiHGW zuyWP#zd|XoJx1v%q150Q$=i&D?w*P^p?FG#QdgO{Vgr~h^1J3Xm|9O%Z_L8J9b2N& zGopc!L^Yn?k|)HtC(Rx_n007=Pl#oiZnFFB^K{O7`s{fXubb#b;Zxx=P>zPAJjOQ; zMBf}m-1Y#?z;W`mddS>SHrpVuK0u$sr_HYk8T=5E8;oZf@Gh#mh3mqNR&cpy^c4e{hvi=E>K)D@H9-*V~`;*Q0KXJHHs)*QD93@+{T~ zYpNQCaDs$znFQ!zh{DZhSFI+D{Un4 zB$LMJeKPbZNpZ1J5y85Ec5S>p++CdPY(!>n=K4Mck9>VUH!83+nTd9xR3>2*9-Sx9 zY{vvUE|Kj-W@n;UXgxn-W25o1g>wV6`eD|@iMxAHgnmS$anpF)`t>n{u zPusurNo;Lfb@{~p?fvva|E_Nv6x-TBskP&fn@9O)J=+zihP%uait12>B>Qr??5&9x zWG;-8-AJGoh#`Tv_6B=uiMx7>njVKFCA+HvT|R63#pk^ydB?3Te6GsP``>#eR`wC) zc-yY=bJp3oC~qhR<)X6O*^TDX)chCILNfnrtg=Wca&xB_k&K!{*WbTy->tWPQWS)7 z2j5Ns&n=?AT~*#4)Hk>PPiJ8+bxKGQjW10dbnAIqK@TZ$N{zBi=@Y4&9MOUPf^x=v z%uR7H8dt9CnC{@`!h9W^J~Pn<7*f0i`LBV+pZWxgKL7|6nZzR)U|$^A`@^*XR2>h~ zn5=yPrYzObK-5QWFTz-=7Rf<0<~(?C>tt>;3UKp1o+n`y5n?#38=OSNDdlR1%*pWgxump zZW5X_1I16SG(&a4rVCx*LHgNk%4Qa>+NU&sp)8_vm#*J5-%(jf)2CLguU5X542_MW z)`xn$S99)tcF6eS;%8^CleWw*EqjLJjFK|wvR5Dj+L1wA0^r=vuMLj^IoL^pRRScy zvIT~q`C$Pdw8JDw0cclA427iPKtr>dEL_uMV8g4iA8#*6c2(;`&O1{z_QN3WA@-9J z#h00=eEiGr%6Xdn`|q^9$X-3su;=XAJq;)575S3#Jsm|IK@g5~wDRXC^5)~pZ;i_R zca-0bZ3CoC#r^ldy)9&RXT6)99U*q^c5aULxML$wt0rzMq2BdTEJIIO793dC61dbP zkR#X)p&O<5C@gG)dUd_S5rNNM&m(trg@%FX6(;~u-(Sr zw@8Mq3d;2Px^cSetj;|NK{{)E(&~%w*p*7(7||MSRY$Z^IX8a!V8VySEseq&V*)E? zi;Q#mAiyNXm<`%^6SScvd3qNuLZiMu?yk;GJaT5GjATbpMqAjrCenb5Du<)gQ-aB> zs6*KC>%M8@tnN)*u6KDD{tM;jG@_E%sBd8U6=SLtcwq@#7!1}%4tO71v8C%XJ!|W zJN-QB9WVagXzbe9$lh*b3ysf72IEv#Yg&ibfT%?nLm+?kkJV7O+8+;Lz@?0*i<+9y z7-RN_t#t;MF5Dt;a$nNzAH!~Nghz4PI_^0Gxc7FuXVq8QVObkaLHIX<8oE2sF|bAJiy5g_6q z?O^>wI7$zA1(AA=lXx2MZHw4C{jsvKv6Qv_f+5;a&VFRI#;HKhT((Fu_BYydiZ{_} zBF2>v@3Dc@0FteCxx2*{hquOs2&j`IKbTWyJbj8aH9yn11%z+zN6yBjGl!o?=55Wr zwSpg|`D!2zUJGI29B_>nMr`Hv0c|?hP>6R8X8>WYO#gMaQC4~`S5oChNE=si=e=Ap zlioigmeBi~`Opv1Qk34#Ud?Z`S}#vq=uIpb4~}ZQxZPkSB6XN}iX;RlqD&c7^s3w_ z=Ck_;u|fx!h}v4LGh!tY1F!LT_5X`l31pXvl>#BjLLt9`%u?1ZQDVxA${#Jtn>3xY z0Ka`2KR$W*(xt;MeZ+<+ca=I?2>(uiQ#D4}soZ7fC}|<*;8&n(zvW#OHZE)41|IBG zIqO1*yDMa@9kGQXcpzo{VH3i;;;Y-r(*fN+@Uu9=xjqvg=r8(IBa8lq3X1U?WfLt~ zSG#ttvWaCIPf3P5XPbW5vUB$AT_*fYmxcj9?$EM&y%A1_yD*m@TKE*yIr7`$tY z&z*iZkktdVWR?C_pxTh}-cz^zf(J}u6@=Q9a zNqQbuwT@(S4XX=m$8GF3?rt1=Ryi7O2g|?}i~$WR!onsN>%cqBwyP;lHGnMCQn|*6nZB*W8vy987=RdeGZEwfW z=jSi)UK->Rv?yzF+3KzH7R*_S1*2pJWdAJSJCx+;okH3N1^Tyjb8&KP<=@6TKznIn z1pwklvOD{!Q6=E%~jwe>Gv z`%3xl%lDO65j1*lVfAkM)Yv5*lCSPMbX&Q9RGzzQ$>h=VVmp1Y+i>;!CVBb#3P2GI z+HC;sYDnZ`JTDI}?^~;5v-p7?2B|^=H7MFfB}AMjdEWa@@>KnQO4b55*U+aciPbw{ zmafFriOV9vs(n4VkmHF?D<(jBYGhV*bx9&bs3`*CDqd60{q`T_O5^Jr>&{Dt=1zB% zpQ-bY!aL2K_PzS*KH(haZ{<)bYIIlT}+b zo{bBX18Mn(##;xBx31EP*|WvCd%5UQ#gY6vt~_Byx$wNFi!;x9+Gr%vN}v8_O^Jvm zcLK2m3XUn)41!=In9Sw?%7?;$?%a3|)oJiIo?dPv2T}GW6@z5I_pT~+2IX@v*;Dxh z#?*)O&)4Z2!b{D)-hNwn>0Ykz^TLJAP5=ZjWnjKnacR%9z9v{&&DYyj28VE`l)KHG zH>{e&md4vso%&xqtD<>7C~@@T@08ujt{>>fO5FECIZH9d7=u`b@iq1ZyMnR8FxE|s zWrG+y{68KKw(2KO41_UE31(on^*9tnLgU$DI`@V`&nmVz*hO}`IaeXfS*S<9Md)`5 z`n3gKflWkOL2g!w)!r7C6OWc~o0>cQW}A@D9@pwXoY}c5Or#)2Pns^o-2YXuGg9ID zmMyj7!mTwbZLCtxF&DY=iO~hCHV2V#g6HW6tR6gfelkTDpwzi7$Xw2xQRdP4(!c+# z*s3{YqPowkF{}3p9w?3Hu0=5JsF`*9-&Dg$c> zXw;m5I)4tS3Y$CNN`%t3rwf#dS6`JY|H$4dF94RhvQGpb6~EwZzHSfU*F#-50Xsa= zQ3R%pxH@MEch$KQK%c+9L?f5bh!^*|$S&*?_K`81?#@C%0AB&IrC8XBtN&HrMdI<9 zoz3Hgty{SLIZ(V!zmLJT`;%CFtUfh54)2IF8mu;vd*;u;(-q3*! z4>$zIP*b!4G0o1FT!+S->wpaOMldir(Nqv1gxT5CdZ-nWv?*Jcc)KX zcW^QOF!`|W=d)G~>)0nGXX24fTc4ji`l-T9CYPOk#bEqBwKQS%)Sia&0oi#RPpcrG zBV`}RK`<&{`dtSIPykg>COc0#>V)K|@-O-4|h%`=`Gv=%YmD4r|(t0RUSO=;1@qgX+6e z;^W2RUpyCqv`#y#+z5RTw0BXXv|tn-&2vINpUWLU7w_$b zng#~T0uH;E*?&hw-@}V_9lq?iApX&C`;R|wz4+fEdtv^VHH#N6o}DjOe?pV~JL2Co z`TA~o?1~$85xcK*co`W3c<-9mW%1vvO9#XjNE;vclt@$Y{0XI48fz&6mgb@211wGa z|M&(kT6nO!)~W*+J}+;qjj70hnX5OFUDZgJ=a?_gk6xS5xY0jx+k~d;jZ13s%R@qD z4_>*H*;0w>vohJBKfhj{lS>1>ZD`ERrhjJk|MnGiu6%87Vr{%YgL!%{A8$(9`gsTV z1h_go*dvziMZK(1p^om3Okf@+jD3aG>&9(N>X-W3o(W5x8U1>uCyn?e>Koco z`T2T@wENvoag{0kgmXLRN-kyQd~pgE>^u^=-lUhFhl{<5S`uZVFZLj!6$amdd#Z>r zn5f4YHi1cn@d%5Zmj+_RMpi)vmJ{P42h^yeir{vXC*f`!IPl`GpdJxEZt-o0&>$_3Q#smmuC~y6A48jbedplz z;Aq(!RPO?t+L>!vPXuu-%&c;@S?VFWYX#g*En`W4?Av@I<}QGXzv)4hdG02vN;doF zJg)&(x1>Bw^+6U2EB*4^gl&mF+kd{D^I{MGPW3sf7bdPNYWlKqNp(SaXvnieYRt4Y zD5vKB8}EG?8NAs)c;S*c-LpV*yPF2|ra$)>pwb-0o=&J5@RvLMV+UTnX2OouD%Co3 zjnBi6BKXN_nz~qmpQ>wNO4h-$QFBe)M~4ri1$G{tASg4z~W%aIzJ|M z5`;9uL$MRgSk)+YmiUQ^Uu*mXCMrEWzOivE?eV=biyr!h{-QX_KFIqYR2+>jW6TFQ zeOzn_eLoyq0`>qP-UA)TPk~o-K%s)11oTPMhK;e)Nrw&#t;sZ+*3XWuk^(y*BUSb&xN29Fyza`LU)#@TFn-Qw!WHpT&L`KFrQnay8f z=ZiW&!HD^}ld+sCa0X$RJTMDYs55Kl0%}*oXsSO7Ezg1FE)tJ{`soAB&m~A&kjrBj zqSbsJg+FO`$@6bCPMcy2zM^rp~-n}lsr;ZSVYAyZ%|2TzJ6V~-?(N~P3_v1HEUSt9h$6M_{r;M zG1XIhrJHoyovA)Y$Byl3IANTK-}ig&;tC9N~ZY}L0+6^>S|pmXJsr^nbDV>TqV z-PoA0ayV>_rPTwT4h?;}f6X$JtQ@lQR=s}d#tWxzBX~4tRLO*b74KaB=FETnAhR=4 z?U;$PsIJ?vP{Wb%y>;fi2T#1Bh?uKGS6YARQhI`G zgp;4wkcje?hYw5X%Kcj7Q+?BHrKN7(YqqjAwQ5ocu&n@on;~}G$;ij)e%0e_3;ho- z8!;1=WKHr8mJl~7Ar85D(CRT#`K@FknyAt}*bJXJeuc2Mt4>IZubX(Rsj;|p;&NT% zvAUt7ZvMzBjFm?g49*c8?le9~6d)?HSbc3usaL$2&p znl90*6)Tv*n7ef=Gu&@tYY!hbPT}C2aq|JL|4FRNu63-7y7O3w3W)!x=$C|1D;W!i_?JTe-R^7r4p$2@iDSqYt%dR zh~KiMO7PgWM4flKvX1SPyW*=dsd|}PZs`-rYh@_?;N}|?YXsc zre8kvWAZb)7Z+WgSQi~rKjG4%7x?_wAlf?wF)V@nwJw*Btj^LLT|@3Io(^ejRDPCu z+L3r-PGy!k@hvM4=A_}UdpbLzmK<}U$UCT$@#VPSbK+Ar%?X-Uor`H|+&1QOiTC7% zdzhN%lu^S*;lC;2Z|xahS~`BuTfen`VbP_@b&=t9Q!X!hQTI&pkB2T#pR@M4X_pS( zNmg-PN!N&X1RcKR(_L@p?WyKzm_;AyquX#V#L+=b)d1hzf8?Pkn4BOtUik#*fOURC zbPp0<&2nN736Bzmn%qZKq$i4ZjxHFsc5vr0ahaoQ4lT;xFgUd^A)|=hUVb5?cWmsW zK5on2?2#28Gov4JS;%LZ{<$GNjVnf0D^+wbXpj3WxqtOpRGG=+k${X#YtS74<=1L) zJcNa%1RLKgde91icU47NoSMPhsZpwgE7avO2Y|&f?4Jvpn6HB>0$vH}*CV*YIN>iQovxwDWy8?O?H~^4yn)2w>-eQTa*Tfn$l} z@U1o>YB0yN73a}-4!&i4d|}h6#-^8=st*dn2}?vrn%NZapKk(a*rkXIG%WDOE&qR2 zN!G{?RrgR0MXo3ax`$I(5D5y@qKw4H)17aiGWklDnk;>iH*$vX*JO=|QY_ROizsB` z`7Ry=)@U#pzO}|tO~sq(ANGlnD@2D*V-g*pW{@$D zteVK!60b2SPV8MURdyz0Lxagr!kz}xMksF$<#jP`iE8>*?A7n(@#A0avtUJ4TwmtJp5B>T1L07i>j*ozBsn{OwRfhwaH!6 zQr1^*&UtzKm>2r4TEXU=QGTbkXHKJt@()1e4`23q$Q&=s(&zCT-K?t>sR|BHTWWcJO(5X##@3lByKAB0|1`{}1LN!r}aX$dOE-CD)ZvG)0+D=PC0W zmF2vQ3eL*Nn?f75(HJ*p-?PeTn)U3yIgB$2Yb6&o1l1cD1v_rQsX(t)SHaokHZ4GC z#eW)8;>+DNz73a`YdG`$Eci5kEu3S&asFdul;SGR1--`Ot6&55PEiqIq3wen$!;cx zV2b+WcF53(4lw6<6}KgLimG0281SwT)x+e?7OA6T%`RIidDEFG&1c;M$IE(=`b1c& z^**>@HA-$WTR|2G--&YzhxW))e!KCxas>wKn@g8(Uw!e%o1=zy?@k@Ae*=$IIJ2XA z&4wlK|N5oz%MOFu_v*FmN=om*?A*2V`BBwj@yo^>e*4ljnXOtnYxwZ->FKAB4X+80 zTT!(4{FfKxvK_OAj~$!ZZNh7Rjrwo;6Uk;-MpDfWwU$n{-nLwIsPXF% zuHag^2daWYbUWCEd)Npm>4J!W3JR1?sDH(wOf+n-J9DOP`!SK#4j(?MxOmj?VMYf! z^tZb-U)g{6H|4-=x`T$%P`X1YQa)8aR>rVAdE@pEkIp)Bb;o*n^w63a<9mm#>e1 z*ueVOUSRHFdta-!!27(|TY~Pvsguv@Ck&-wtWdPMTVtklsD1qoX`#!OA5{ zQ(S)Jb6s>(Gh(7+fm-PNB79eGvQX<1BJ{ZXxvNI#LA$qnPTY81cgyFf{pLmB>ILAQ zM`sCd2|<{{kVos3`WWo;_3c#SNelDkahXa#eOt~IQBQbmwh4HK@U14}LLrmRqVgUU zM)Mvo*d?&jpi(S6V-HU=4m(#T>V18DI(JHp_lfiA7#YzH8%RRTQvcErYxYDC2KaA~oxcyUJSm=oX7~es!3q7-*`fNIqk)F|6W4GB>%;KGWuQ31Y_`lN(+^K|hX5RsJKeF05R>D8H|e2(NV^!=wc zG+%(e#t!UXl7B5^U8V3kdk(zEagDkw3tp|(>H~X};|mMV*$I&mON@@o6%^>gXHT|B zdYGw|n*TA${%` zO>KTv$Q1IoC}ZjNEp+RB*R7y6ito>EWf!D(V0ULec28Rb-_ypcA9yIxvZ)Qimq&H* z9a=7oRZ&Atst=V4kJ-`Yj2&(4g3&-@dPH>sKi4yPf6dZO1v57@I+1N%K;ofj-PaBF-MP6gs8fY(|5aamq z{cbKAZyP_o{_i{C4J{kv9@8JpRF%!4TmG`CPqpz(@hA(SU|SsBpV_TfkCYy}n0%mO z&HkQgS$$8`&U;a&yZfYP=k@BfNSxj&Au=^KOdd6B*3{(TzTSo1pPD=KDLJN7=h(DP z73vx;6mPTke^X}w6DbM}ZK0`oodIUdtvYj^LA*Ee5M91v$}j7rA7rH&Pd6iW`m-7% zn8hpB5LZD^#YNpg`=BOV^^VlsiyQw00>lpXIPo+Y%p#!Fv`rkLPzO={_5n}QJkn52 z$*NAD8VlobQ#6)U44SgzYIMm|J`f5CL`Slx#*LY+Z9HZhHE&S%l(4g6s4^XDBtFA*bj~yR%u@Q% z=K+H=_7QUUkk#UTl11+HG1%to+j8DR{sQ2E`vW+<)_fMcPrp`=@u{$fo^m7xn*0h~ zs7j8Z$+W#gw;?;$YO?dQhiVh-2j&*en9{LhY=~wl;2F&}(`v{;i3B~eKh~MoLs|F7 z2B}qLNMa=h)9R!1Xf)f*RxRPdC5CTczaT`S51#Kp)z)A3`+B1dp9*;Jff5o-MLDX0 z#v=|q`uXrD6w1$R-*M)Z?K@sQl0Rfn!LYo%e6eiZE3d43X8p@Aug{-2Y3MU~lPBjv z*Uuyeg@wW{==v-#@UxIbr>XiCWlYjd>8wjA%4iDMCYMkl8z29$afOa#rvbSuw+7fI zlQm$l;XA^t@7?9^p?xs1vAmD>M1eQq@2SnX5uv_sdan|;=}ze#^}YX6-($ioH0PBW zE^KS7_XNDR)ifS(Geap84vC#1i~Y$W&UugDkJZNzgFKBBh=D@a!~2K-!Obvu&b*`p zl9^{g&77!4?2x!Xo+kPUukfVtLW^FCo`15AP3wdctZ#p7MHf9s&ucLLkD-aIX>Uz(E6rP|c#| z`Oe1o&;Kk;7v3@U^I$o~Q(o-Ndxz=k0TLah;PWWyN3mK~R*HXgEBkHsz%IqwuucL7O2O z4v*S~=C$;Aw4as>XfsE{;W717+M<0J9?mep58r#lWnFKcWrtCYugW-MzZY>Zl_FYK zI~37aSRUX{zP_@|^&@OZHEzP~Cny(QM9X8HY8`}Ypw_eHYzCRS2rgq?Km&-HTYe_c>r5lT{ZZ+_kUC#;Ok`J0d@a@ zrVwosO!$RWFvH9zGt4w$YBR#xrks9Gr<&VLeW=YyOB<~B=TGQoqP5L1@-Zzl_fz&z zKS7o@;K@^_en1l{JP>&Kpr?nc^Ixh4 zQ`}K45#VLck_!lpNidBejiaE|)PfK5`odqZW`&VHgLV1%R|N)bqP}lRwSzPseN`34 ze2+&6DhYW2kq0VJxRxBxbv)wr0hIFiIP(ll2m#RU-)KIkFL3W}@I(>#*8$dT551S8 zBQ`5|I>M{Q9rdFUt#)k&L9Rnya|Y(y>W~kF4TFfgx`j`*998ejvbTjtKHc#{bpmJ! zb^Mx&O7qvsFO7}VaV`E~BjIP?zxvvD$~(B~X1uv=`V3y`qkfxVn(PiO{*>M!SjXiF z_gF0PPSxTL_C!saxm3_v9|)>58B}IXfp|^$6WT$Ow5oYSsi&&wQGulzVDMx;Jz(u~ zE6h?Rh5v7b1dBgI`F|FY&pQ?z6}g~mX|b}WrZ}UdQcV5w-r;>^*E$VU zZm-yPFx-D<+t|@Lc{HFl_w&9ZOZRP3b-!A}EZbsjvP`r>)`h0NK4J=oRJvcp;K(9@X+=;tv}Bj z@XBlwLt~sRJC^iqy*$ABago6S5+PBj$rey?gJKVqYV&BE6LzR0`pl~aczL#?4ayur zBz_c`GfPrI!ZMi>@~x_?%~3Tqy`UC{s>w2*tZY?lO)YhzlEbq1GE%;*JNWWf*Zy5n zG~wAZO#14z8PCV*pC5nqzm1(4-M)3g;+)LHGtIsG?v1=vzI2>0VtSQ5qs`@>MZ@}+ z9^JV8@X$%Kr{=iHRWAG|<*U1Ew~d225?rX&QE6t8IK9Zlf`` z0iC3^>ILhp_90!gJSU}X)aT5=M`>wkf$u;^Nx$OxT@xHF#fT)>z*aKImND>Y8kQ;D zF}IOPc>puDV5UCa#q*BRPnJGlb7&v!qXm&bHbgpUX@h##`=&O`JPu@5HtNY@p`)~@ zc<8Hl3JMGl4U7(o=HKS9$OwH$R~LkTgVh8+w(R=(^0HlGr#f)v*g4Y!er6H}cTFFJ!>L9|v1pbAS^^4APU4q(0!6ZI9~*q;>buSCUG!GeG8;9AFPrU{QF^xy(GlUgK>v0YTgDnyOt+Qs=`$~P z7^0~4fc+7PJb;J~72(qeeCHQ-_A?>sfeC}!D~-l%+CXpc^om-dXtqL31Z1&K;K8Fj z#6&SLNkVn1Ns^Sv3l~!+#PptDl0OR7i}52OvgeO0oX{AC?+Ns6ml=#A#&n%lR$lf= z39PAA3mUyV*1zBT>l$9v=<2feV$VD4hi{B!yIkCE9?Y%jV4Ub+fBi5>8MLF;K&iYs z%uE|c9_2H08_uhyHsy2zI7_84&aJKb;rz92|4n6lXW-=%_b0OpelPlP5N{BDu%3_s*IIq7_3gu~V)wy%&g>`q=x6o8yBZ0` zPT5DegWayRld=czO7XbzIr?7hCB7FJ7!J~Fq&^JfHKEs#eq`%4xbNCAlW2 zK~q4PyfTUGhjbs&59HT_LT90VY#mDWLv)Aw!P#m{bOXJR^n>}!K1lD8ee`0huHJ{B zJz^}V(-b3Upw)}doCbLN>7jhf##=J*cxxTySco^uvGnLqybrxd-Y4-j93Aj`AP_)r z?4hh-1FXFmVD*8V9wW(&Lz@oNMjNJmWn{`WMkckvS^vLASH?&&AN^I_%XmoPTU;@j z=@d6FQeS}c79bE9{qpOYM6f{3nW_c^LMaF!zbFhl$b<()B2^#vH88OJz6KB~9qc(G zk`^Yp!hiKNo{9lLQ8^8kQPeQT3Ly}YJytps*aNV3b19As*>zSflm4om$0U-PE?#uI zOGlSyH0d8+xk+X+MMI%QY7+}8-m#-}o^M_g&L`OtYKl8vgZ5h)uPhXIoX)s?$LU<1 zG+x1(Ah`^8yczIV=#B@v?Z~*#{X2?QsYj zjqIZruwuxDNPXBgL^%#ywsYW~gjSLvw}U1Cy9Mt-KSUE?N+mjV2VX$>Th{yO``=Ji zPRydIIM&`V(EX5O=%H*8_k+e@-w!#D0Pj3{^nk68)*?yHLtv~ph-Sb=gFDt;*t`yiT0eK@e@^HJqajD)DBn6vDM zXpbCAFSg|BV-d7R_S1{is3d<)Mtlu$W9)vkVQdRuDaXTC`i*CdJs$0TR!6yAjz^dd zY0TS&-HPl1i0~C_^K+#=7CBGC=7$(R(Iyq(*76+4iK*bQim@2FeiSHnXP1zOuZHbi z#n#NS0)QeC40jggSaro5Ms=- zWrP`1I!S%o(@bBwv{WJZ7+qP)Quuc)#dFU|kO@|H8uO&Qtwf3|FGnAzoK@2Qy>`S} z5h}%YAlicfs1aFCgL629_D^&L4uNocbRt~UDN;^j{8CpWZE&i?`1yuDSzS**?FP=m zhx~+pZkPTchyeDY3@`-hbYVl3cGEs(E=G2AI_s7Vv1}vS^fo-$FQF^3K4pnmJHb(c ztTR@&4{eqR`XOzr@#1RcV)ogK^ycFZnE3YN?9@l->(*Y?H2j{LHYd) z*sw+Awqe#wsp@|wab%zmvH>El^lEuq!Z8DLz84c{0A-!gdEX0OT4wAFmt#R5o!Uy= z%XNs^zTb?)_cRuV(nW&Ps2t87zN zzwCmwmKS6jWjjxU6N%QK9<{-Joy51wHhinqW(m)r{5Q1eYPCt>z0Uc(~^X*sMh-@*G5C zZ=$g&la$&l!CHp|Yy2>z0B z+Wlzgqf#59TY1JVpME~m_sVzadws_9tZzSTw2+&yo>FeI=T$x)@UPcB@5+8W@A~vJ zqP!oR$Mc?-tu`-H8=OZ-l6oECtH^T&gjAtON-w@eD(R0XwzPqXw&&@=EG3L!=8 zNoKSmpu!w^@W_)zlV2cUrm0iiTBn{*_VoN&qz=!1GFydFm7dMST8Dz31uL~&W^fSv z$2Mh+Cm*+b8=RMT18A4Di0=|xz5H1fGvRjj^krxx++-UtGjdE{&A zZH8!0x_tnv($76pl+qw6G^BMz(>6A06+k^MQf}s4DzaJYaT9t>%>prgyxZ;Xe_C2f zb6syZ2K3gH#gke#Dg6+%jp&W^gN0$g8i?~X9y;nk>^b?b2U_7aNwm`y9STw#w(D(w2e$N#&p6-SnR{)x-o)-2P*l+~T z-+xsa59~FZd(jW*_Xt71(T|i_@UFXg2IbD8jpzsb+`KA{FA;VS(GTn(t1H<-hGIM? zOrr7B4`}>nel%Xvq?N^=spY(ifY{Xkz_UP(uj{gA#$ z{Xk!A>~CWlhxiX*yW#h8EYsMkO8%G8yba~+T76KANMYIElCPEhZP7S67P2wPvGhRv zO+_1%91E?B97~UG{_BznKD=4*;YKuP?9r%7>tBy2P~I*2xLvkUzT)fUSb!%c^;^gs z`eqT=A^O1{t@D@5vDe7o)dJ1j@_ryix@13w%aWBuKj5=rz;eBIL~bhK_Y#iIU%79S;e*_)i4a$Md2_uQJOx28*4fkyoMT>Jw^l(0OS@WsPH#< zC5A^_-&?PUQND5XRdbH>Xuy|@rV_(hq2jJ1_902E^a z9tmF6M>$?mKeTM`q#yPX=d#aWAMMcYL+FO057?HzsHhuSeUNS_`cTH->8BYA{w&8r zXIGA;ClG|mhDL=iCXSRnuk!c^@aRhMP1KLxyxe!e`YQkNwXVx~!Bz#_K{*~_tJ)^MpO5eB z>y71Hgk5`}_#S83+$ZitQ!&TxY5AvA^-vH~L>F+aNu2=uKsn<}Ldn*Wob;3$P5i>(Uoq=jB%$N9PvWTq}e5HuzUC(MpUCK{3}!!oQ& z8qpE!UfSpcPEyrc@xA)$Zxcq+Qo|fQ_zIBxVMjU(U4K8`m9F%lT3>{bDp7#QisbeC z1F#bWVCy-_tmg+NoN01f5&$Y(UjY(md^qFLcu&hxv}N&y2@ez zSOKUqUNkC-%qjPHQ<5$*X$jcGs<4ch7wwJ@aa)Fl`GX=iIgU_0*PYdR9h< zA^rneXZA1)u$K1<{W4KWq|*}?g3>h>&*`+&+1r%~K7()q-~(Xz$SH^c2NI!--kl(H zYTzjNwNsUvS8XTa+M>nYAXCqA6>wCuXTQCgdf;V0kks93;-=}wn-|hN3oE0g3M>p` zxPBPM(S-u1gYpa$NRB4-Bh#>Ng3w{=;S!kfF%;4b#2dhMsAf%I-vHsBfDZ%&iVUqH zjw%!wSA*+6LW)ZH*~E%i8Y#_DI%@#&Q4XOYR=^mlX}jLo72=DfVGiw~A2xUG4=sJQ z0;tuZ6weR&P>rl~FDt)Q}nV?a^rwVDHh14~*a$Qr#T%AIjwnSGE zfN)wF3rePHJIC65ER^D#1$~|;X|H;&l3b45HM25a(|v6hax zc-Lx+hJVG#KY(a>X8Q+39D}K&&Ffa1=EzqLK%1R0_ISqea9=qVvg0KFxFr`pPL04* zM)L??ITme_{e2Ojn^;3O2D*KiQgBrooot&_Q~~e}%1G225|uy}6S7_f!pO#0sA4T5 zo3ybZ#e~^JUxueJuJzgqb|-kbsX?c}{d-zJtwk6=t3n@&t~k>33UalG4a*)||JNkl6Tf_U!msqM1$dWwy?0@T zf>=awB*e81j@8C-fi4xUVW(^hv1LBy$0gzfvg|@Vfac zl@kHC4DZl>*s%5;?;Kh?CAntJ%EjlU?bBdz2lHq|T)5&v+f|%sywUC35p26m{?NU28u}*?BqgT^` zlPAw?FfhMHy|Cb^QStW->AD2U8dDzDztfr-7trH#t{@b3pqOU{M5%5CO^%#OP;OXb3B|)6R_EE&_+H_z3h7Lh_)rJNsE-)62bDTgr1p z;1eAK$`dM2Ruy0%4w*?TWDqh-NGuS_P0^Z7?9;9&w`Su}_xEkMwLwl(^j2bXv|{9;SeTp*k!_nMCDDOqfXz^4;Yomd8dEl zrU3$h2kGWkJ;Le$E+u+XzVSF$Smp$pIu>2Wuko)8g3Fc}rUh1^SkJxe<`%s= zIF_yL*@EdOiuBaX?5t74d$#Qmh_D~*eQ7QIbXlbT-s7-)a{=Yv`|K~1nUV=4ThdEs;^EBnp@tCrSn8Cly z7vwP~PVnd6r9ph4|IJ=E9q6MnU6X^utLV&<(3q>G|MF4sZKi|&PV2V;cn-tNx9}6i zBIaEq7BK;$KL(C5C;6@gZnsSNllTtQw>IpZcQ|Te&O0%4k-&Lik^C}vnuy&JHZaH; z@TCs9gfZcJD_=6)RHoABvRTkFY6^RF4dU%=2;YsJ_tW9ZcA?Eh(FO!kv^iC&%|0y5 z9FzQhb*whOW2Hnt%$5>e=&XvF$S@jdiW`kssL$%~_ZMBlTy zR{LS1{d=&_EHNkJ`xW9{L(6KG2|t^*r%d?S?D-Q7oe1PIQHq$R$z;1B4l^G=Km=XcMZO zze^7=EtyW1u0Fg?bzR=YMcQfv$6atG!DEPH&0E^N(>{AVV` zX5d}I4*}k(iHJtjL6Q-TGGfZsAY6oag+qoXM4p@EA0pWWM~?Uk)E*I#44auzuD+!z z6>6Gj`;g+~VXb^rH{jFwR5n>wbo>Ttn_wP$=?sZ^;0(!m317HLzHp2d9%aLUb#}m) zS-Gk`R3NCK3Sx#x2O=_I7m!Ft{uGD*%hoHr4Y;aP%Rs*Uw!+t z@JE_-03%4 zc^tQDt4oI#6=^MswV+~*$=XAV33mlOY{eL`$C&$7YiFQ)qRk`$T%~T3lgiyRaqC^I zQ!D4JqmB&v&lCMa)6l7&PpHxYg|212POl8&szEi7LW$x5ZU};bz?k;lkcu+|>BHRe z0vQ=wAyNLtTWP=^ zsl;c{1-u&`Gov%c7y(|Cu5@+907*9q$W|h|Qx@W2iX9Q?s-2n=8>17v6`=i@)YS#wST)$fzw|k9guGtM5!@ocA6+fjPJEpN}Uwy%n^^+dwhSwlhKd-Vk z)~oG$G{2UZFY0PwzQSfi-U=fT^NUv~V>>P~qDn9<%{E_-jSUI1>TDoqfCx$X z2`8ONQJZ+&fAZsTs6^z7 zW7Yqp&)bhwW!fQ}wJ{hM)v8aYTHWbsPSi61*mGC_iZ5C+LV74J83_s47MpO8hE6Bl zDo{l$nwd`p+{kSOTS;Ur&O|O@o=Gqh)YEm~e5l_nT=VAkZTmMY<`JGr^Wnq0#0uu$ zk19lA>*86;mHW?Lx^(vbEBxEIbw&MH-cu7;H86-Z{PcvU_$Ln(AsSR82sk$q37vcwH=IYdybFdYdqQ++(7 z`#xluBu(5TL2@cRh%kZXeh*2IBC=!pJVbQIei@}_;!4_Y4v^Y~9}cU3Ty23BP@88( z)M{sQ(!&yhW0RU@b{ZO2uxd!jx8EEbR$P$lc^>G!Z^us)oAS zv}^_RUJ+m0zV$@UYnuqL{iDkvP#+;aOs2RG#vB z9oV)k8x6=x76c7wkP#(w9-*39)h%S{?}2asGPKvkxt>F}u4>|DK`%_1Fn#phkJVau z`vWT;ycZRozueJxRqa{_9{Bjz+I2XJ8g4o7Svh&+zy*s(mcG@X@%mX~o++k%Q|j=6 z0z)fFgrYZpDn%?N9yGcMyd2qP~85jR!iV&RfYip_}2z&9~ff_y4>)xb8vE(7Nq z1ZWM}GxRu-Bw-fy=4j$<3!^k~CxM})q>Bm;k%ekz9vtkTRurvGv`gF08>?*murbn- z`^hT~l^+hZ($x>zqkH}sovnyy<9 zJ_%559cKP+y%tbi(A(<3DC! z_2|`M=$M<$jZZ(jvhS?a^eG)4-~8Nsv+dx4tvdF29D^Cpduyo5sW>4&gkr`{#hIEC z7aipA>XlhE9f|Eq72!x+fhtLrH;E328v%h$?h67xF!&}YTpkVB3#nw*WHg7!0+#K} z(+=_N4~!jgXX?5a)Z)?IS`N6iPlM-QnZE@2n4YD^&M~~}s#8lR+&6R9y<6(eOzGLS zLE}%iPGT*#v3dp_UyN7KXwc0l;1q}Bn``0LJAq3N8yM7KTK`1os!&D9o(!Y109_~h zy48k~Lxrn`TB1+Cb`r!xgm?G{0n6B@U2nL3BA(v<_R33o+r`scH7$LQ0-ZEvB6vXz z=ursHdHZQMse7(q8wQtXx zI1Lp1lMW5Tg6F2hELy9jVUfX;S3zDutSjWGQhdRbhGpmV0kAPRm1kU`px9AVkAT2T z?R64yPc>o7(_*RUk{XS|>5(ws*jGrzJc;cF$+jY;fNF)hfPPOvr307*Ei-9QKJ9TP zYJ1zpF;wV=z+B!|cqAwg0H;I*0vLkbIn$X0)=kfoXrwYvufQR)inBHFm8dV+!v(3m zng-?TRSV-DSXG_f71OR(XkeTcoEd!o;=DsExq2eQ@F=vTNE<<=3exkm zBL3Ob=}U_iFMjRq^$VMB*p0j1rNw}@omzj*e_8j$s7cM590#6C!0bT-Mij4JHR5o_oBy11JG8 ze*yc?&-`T5#-1|mTXvDf@VEKjZ~Xeh0{%&>PVa4^aWd3^=%sxnV(S{Zs!$#U5@``d z=am>zNGoH}z|96gHhvtOHzb{f9)2xUl7DDEAV_z)NOr^5yiED3k(cxhz3vUZ2K)9x#mm{UwF%Y2T=gO1Ill zdfM9dM`ytDkLfH8qlU`s7{Y}@=H%vO0$ z?Mq(d=Igcj+J@4B+6E9!+83c?pwDPU*3SgKTx2-n#4Fa%#7t?{aI}dNEbL)YJO_+* zc5V!?{=rhw|nEJ@w+*4G>_xy219ZYL| z8*&|b;oVfN9W~Fow? zPX_e%$bwwp$s^^tAObnhVJreHSF3ZHwc)?>Gj4v4m%18!(5R)lX{)K`=&!Cf&0WtT zi(%idC-|{g)TjI)p0)UC6=S0w;(SK&xmZ=(>^ZXOS6wajsL`K`H5-Wd?@oFLC6lR8 zo)sv_$q3SgPaC)rP}uQ(rfr1~G{lAa#y}PVRB;#}!oqPK0UpjE88HL6pqj(bKxHJL z1U!kB+yFX)>hroD3DOCV4&42%D|TaEw;R)}BB?O;O>_m|n-0DsF}3J)+%|Xz{f2{0 z4vMkIM3HNt7nS;wLAp`(0eF*(x)4zk+QQ~mWOUO+(mAoSLl3O1(a$_v!k>Q6*}O(* zP>dFo5i((Z-b|BU{Fu$$ z=b_JLK3AjWbJIUR)T6E5_#y6@x%d3W=U6R%^tp|{?w`rDheq;Jx|UNWPMpHpD`mw@ zA3?G~*>Tt?9w8hIX=lg0YD-&(je`NcD(Hu3vw>_B%BY_HdFX=gk}brFcOQZ%!iqK( z*$3G|s1MlxS-(noQDRMny=04QqmJ}%19}3RslF33asq7rJzU|L8Hl=yCER=8oCjA! zcw{P3_~#4wf1vOuTI zi6ZbBJG?YB|uNUZhHuC-u6{)puKPZ;WyCUxBti+ zXz$y9)f;H<+dnF=UU$B}{Uayhy6wyRzkXY9-?v-;!7>VDUcz>92mp-*Ut`S46e z73G%d!`bPE_C#pVUDNo;wlM3f$}ONr@t{XBh*d#WYt5XjOjK-4plSnzSL2)28YJsM zIB*{vW{!|!DF_kFgZP0-W^>y{C&a~cg3>LgK_tCHgat{=hNLemVKzfuNpVZe__;~W z9eXBjsh+d>{#Tw&O}^JS%>ScRPb>X6y}Eka?Sm(jj33ggySBF5OT##SdGdt&CLzgd z*h}43d;Y%trTzn6>P>{}^5y3?p2O7u?IEAujo~6v{3(2Ah=HnvXNVipsO$q{J#?N} z1wL_07YKt>+N&?Rs-q%2NJb#je3Tu!R|YMPa3cuVK(Qu>FNZ_|l1+AtI*{WanZSpp z@8PL0{>-YYZ|}{WHHN+P_={FGbKbX1`EnjVleRo<&G==TJ$a(IIpzn^Sx==HFTze0 z@wGDdf?}s-Vm4w&%6`$`11_^u8SEkv4R)85Bq@zZx@X%cU4?+C1xXOahf#)8Q>oqu z@`Ma*G`X88&J5(wOY(4RWuZ>=N|1SUYGY%_QWh^Q_?8h#Ma@&xn4oeQFdQ6Gb^h6f zi%7;PxOkCe=;|9UY~FG}t?&8Zz?RJ~uushQ0hTxbLEswx4CI$SH&^ZEf4S=xHGPNw zwTqOR|DV*m$Np9DXWo#X0(z-NInXBM5##Q{BN@;EXOpZxU63yi+h=S_EKtnwO-xjT zK!S!|Zp)i4_{@+QuM1xnNI0EOst4^5Wwq$`5?6p`AjFDtlsu;vgoBy~jV~&K*?4*S zMK=6LIAT0MdX92vx5uwEsQ&mIrp;!_b zn>rZ|OBz4^5#x`IPh2G2laXQ{{Y z_wuo0;0B^|-2wFCBK9&$Y3d5MP!B}S+;W?P3&_%BDuO)dHKyPi`U4#x4GxA;j0qx# zrQGT7@>G^}?uvWC6a0itSDyLmJP&4nZhf@$gdiyv%|wBT^Pq?IESfSCr$Xjqh(HaT z+h?&rmnlbrm54TNSYf4@{g#lm-ld#>_A#|V&c+G45qk{d z8sZ}CJqEdn5*Q8ge?o1ZGka&`>VVwz2 zvb8HRBt)V~!mEuF;Ir15z-=Ii7+9_7P(VSD4s>ukG$TzHmG8twp%vGotLj*8r}rFC zBnTY?4SiyZuN-mTHRr)dr`F}2(j_6?I;)F$E-z-oIPm}3-E4r``SMTd!ArdOZhfjX zZg1=f_7s=RoQ82mL$`qdVclcI3y4g149>pGuJot?R6${c!h^421jU5|m-OIjn1$+EeN(@aELk+d-1+5ac)hrnSbNIl7vT;>JG~aP=pZ_^giuex0a##f{0lJZBC@Ff zQ$(zuhr-03R``peU-X{pm956kD^Ek&z+TIHPj_0}d*nga@W0dYJXDOy5qCTcb*{;e zB64b|?!5|0!-^K5cvCv7q|xG@TNWG)6Q*@(@yB7+!Vxk}3@DLNw8|gsgY$Vg^QOR; zih&9iGlnm+Sd1LUHDY#Zi@Es4&!9c{kc{bJ)4j5zH~s~`7g%4&!!#-C1fMg}-W!X8 zwHNeGocn)Ot5Hn1+-xR@iEph&VKbpxjcUV=ChK?FbH3sFq84MF@yFu=J8)? zj(yr)R|=;+5)-y0D56KJ+jJMk2P-zk!hn9v7UOM+@%qM+YydrZR-BcBYs45<1Aj%y zw0ImEoEH)c3<^sV<-=%KEb2>#$GL&1?;GwbuV6ENMi9|&o=bxGB3A|PeGl)6f=`O} zAAU4xrwQ(6jH8)x0WOpI67Mr~94PmK?7 z$X8;nu@HI8KoU8Fy>674UJ3adaSBv)Sms|~fYQ)FP`WRCXc0Lxq->SjEq(KEo1tU`) zL<;ClUdo$_L4dSca-BC*iFkfFJMaz&HREi7i=?l+$_EAEi$S^#hh;mWcfIX=%bTg=E7E40-6*Ny# z#L$cem@v!v<05Ow-@SN|e`%<1?B253?RiUW?%up*xAwJpn8gCP{sQ;#KlmnQoG^=a zvA~jU#qlL9cy}?Tgmncjl6ew5Hd;wnrn(}XDG6~=5%w*Bd~MNuVfW4gFNH1w`a(ko zUlPI{7TL0O;}-;ao9L?J(@;bNc=I5o?ZkcpBftYPe@jH9M&wx#MS1v`S}`)!JZZ(G zzF&fxzkpl^NA!tH?P*7)rgEh7V8&)qu%}D zZ!-3VUHom{<11C;%a5PfqiId{v{<-g$>N2NEz@t|hkmyMZ~}rIKeGlbJ;YJa%3M2B z*VnHxIt?uLiN?{CCD_Y!*u!v^uwGqUF=1hfLdf7@v0;!F@qLJor<($?s6L2JI0Lp| zh}%sxRYZHx%8({$MX!+F2ns0DTag~)RTna)U|17Ceoue;OTX^J#(q`8kFlDg$BY@x zkNq%x=B(*w^u{Yz+&nQQ{?Xn~tY#C+RGbNP4>uJevnb65d=^&j0$AQi> z%5tQ0`Jizyh+R(I*0Kj#`-_#96>jtb4+XOZVaP6Th14qW662$ ze3tSnU&NOG&5rS!^ha&VIB&`Jia)C70LC^F@u0ulSX|eQmoxJQq6oJeZWhTZ@C6AQ zoUeM34_k5hQLCtlsJY`uPac2gyjNB8@}76k-qCaLh|+_v@V`v;)g@!^n>S_hN9v@m z9a{|?+}51`+@_TsrlhCN>bvsUr#G56j~UvbXSem%nWI|v*Vj4xtD*bo99jX?4W4%3 zfQjtO66pA)98O`JLE39z$7rR53&_q`c7#<*I~h+aaRD&~xT^nO!m@i1SayZLviqYl zmYqCz8qNJibsG^4fahQ#_mgU!z=5v`8w&aFv{E;JZ2S8S^_&s6iRD}rDkuhRgvmn4Eu>8gwNK)R zsTWN)_%H0k3y<&}rkjI)H@s4!o>x6#c*>*Tb>iK$A6LYFqtdUB7+ucg;)q$33`Z6! z+hGY!js$7ct`JrSl5MpsZk`N7*-1A^>u|BxVn^``dA|krvmJ{g&H&zdjkpF(6qH7W zHCQX_^DZZ?Xp&nSZBaKmQ;3Pl5xlX7m=nc8#P5`s7p4RmD&$4N3%DC$IDvZ72N4EANDOvGZv@mKU=&vH7(2R>!bsI-eIMDa z>3?rN{r9C)FaDsb&)b!}%>|#c{2yw3&kDZXWO^%j)BYn>PW$-U>p^SaT@WmeAE`&2 z$H%9yrF0X{u4MH*yhp*%)>jH;nN2HqSPgLDehKJnoqV!#&j5LF~<2+|ToSy;$62D;@k z!uceHPqlof4l7XEDSfI|VE5o}4)$J@=Pp<|=-qF=6~RaO3;UFOYdo=ZVUJ0f2tQh| z0H*q!WZkExfi4z1Yo8x#ze`@rKet+Inz4 zoedW6nThv)iCS|}h=Qp?I1dtQ)*H6_Mu-4nH1ND-M8Vaos6FRuU%DGj zYJK1v_n3QHPC~f%gJEGG9AeG+TeGKxg+a@~&f)GEpNTo%fbMJsCtO>1?#`yW@&C&& z+jG>`UnxQF6mPr3d;~xJTiqE{?FMvb>%BYQzI>?s&859~61x@eBzXr`A)Q9@-|5a+ z=!&|ts0T*O*Uu(g8}V-;`;Q&p%j@tD=;x8c?i>NyH+0Xk<@>aCd>DWH&YL^lgCXG# z!ro>)fiVRMNff$sSeTSREq$tz?rZ|t4`Q~p^^`H8+Ws6%SG5L&Y&Tzr#W;IRZavHG zzH&kiOI=HYA|?cOe8@X6)I%V-PK@hc=+1)qRnnd9@s#WG@cqg4K>;RO9D5Yr5ir6( z)J}n3J7ugqVQ=}+Y$tPiCDT?|0wn<%zEs1HND_DmL#(_G6#r7C04^^Rvh{ zWGXK`_lcDk#@hPe2vy7CCee6;lqU6p_`8q=X%4jgBIHzrF~hBW^~NIV)LY<=FlX@hG{T>YJejihzhee8wIjSNybOH*EjzAJ9eb1o+A3Pa7d!{Y zO-43uKY4OH?&d8R6xFyT-5UNH6uFIp7KYk=()r=#(7>@lP#3r}_F2du)<#nGFG-p} z3x$c56cEIp$#e$|`~+%9nyLNa=6{wcM_J_Xd%t??^TC5zJTJZb9=ZW+Gw;XV%v?X> zu~+!>?eAoR@5U|*J>*8}9$l+u5#o3LK&&7GpUqK5x#DuFXJ=(*q^CJk?HVH#a%AIp zy4s~celsA3m>~FcoUP!bAcS2*E(yTqB>_tlin>gelG_H0BJG_ep+st;8Vv5g2qa0O zs5U>GDB+r*G(ibIo~yckX-L@P?3p5GgKA*}GTVCmxZbm?yVtC7BesBlMJVK7d%k(< z#el$-gf^?Ohi0{DUV2P_Z`wy6*)n_~;efI4guif-auB=flS7XEvSl!*GLp2-f4I}_ zNDc!omX11l6tvF}

Xrp(9KIag}b#_!eulGPZ8&39T+O%QJZw45kI#D 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ⅅh8itLt=K~*P`bH^i0{* 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

@Z8~V_*y>h`9n0Cm6?&ERpF@u?;Sxy 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 z zo2&pVOVLrP#AO&ECT62((kj%dS?1i80%}97v+>`9!-lnbt$8+q13jl$sc9?}C5-vO z!^4EgGla!sZUbk2?JC}rleoj>*fI9(71!!@gC9sqoj+{tD*WH?>DNVlwy06={RQ3W ztF-ckn*$4JX0JgN+S%Yppofou9=Pp}QIwVWzt~v>io6|2TN?z^EcCw(4G?CJ{kIB9TJ*6Q>2h5Di#YqC-6@tcrCV zR!K&%EMPi^$KfP{=(Q~vOF&w-BzCZJ&kb6MgI@piQ+Idip{-+fH0#mw8a4_mIx+S)hc@(awvT!ywM74Ur9XbuxFc4e^jDL0`n{ z(P|JNELBO;s3!z;0wKbfhsA6)08cQgnm5ay>ky|J`q>aWg!}r)k*D`3cg~0kchu|G z_skjT@aENzzZ78JF0125t=?QU0Oqrp7RrdzdM4WA3{6it<`G%MvR#LVM66C82D!8u{= zd%VJ0ublGO(|k<${T3Y+8P2?Sie&QLFUg6pM`aN07LS|MXkY^XnILO^lUQe}4rBzI)ok^EiVfuf zRJg>maT2oCAS6GM!tH`{4-^-drR6*}{m`qfsZ+*25Ku8=(xBN1umBr+6pa}(bn?|} z?s;VO-WBU68{NIh>W9~N>sa-b+)|8Ba>Mu{&}c>#@D~U}SYWE}$l^k=pm#y)Ahvyo z9R`)8eXn4)NOf%ppYhb}f3pJP7QvW1NOEB?`bQ3q#PU~PV}({-xk4*ln>McByk*1sO(g9X zoJY^!vi?fn#<{nSU%7JJdi0xbj&hxdj*!!#FHH8XyqoNWIcp43RFOf>D8vH#4z%u- zwPs)ahHbAv%vfeltw%U$ZB@$WF{6)e#5RPjPTeT|ifhb{T-T0-+}#t;edXG;zNjQ6 zrKJD5hq!Lkv7`HEE}4ccBO8^`vX9Oo*J$X+?X+8{_;r^05flw0oZ zJIo;SK28CB=p6L%|IMEidUt4Jxzd4HWcapXW2-&cK; zlql^$7wYl1I#Cvjt_lRbh*&`TL24$`gqW$wG$YPvBqo=4&< zxX>;qEF(D9+ApJI!|~%vJ6gHfJ*|6Nld>}0wyBJ4+Kjc>ueC70Rls&4(9pVMKi8}4 zg>WWgk+@=}&8jR^N??bH{$I*U`4 z!@l{MEOak^d}&cnDX_AF^)DL;=^FI!ANa4#HT+lHo#eoOgsBmKo})9j(JAL~yYAgd zWn~59vlul*NckLITF_)?xWE6(yDEj{3HxxY|P8a{!M`r$8A6Zv2qv{~(>V8>rl$NfMA|H8>L${+_$sV;0ibpM- zDx*JLmrAp7{V@~_qlkEr9O2x*gN1(w3;zxn*LAO@o%EP;(pw> zRy!`&H=3MiPCDGr<)Xi;?AQ@mU`%s7V`3>Q-Z2??#7;;sL2OJo9Erj3EF7+7us?iE zz`^-g#L$>-%*Nuda5Ep&wkg8~4TJxuq`!V>Y;p0}L$Ci{|H4f7K)pEc4sM*Ncgcj4+#I3E8n-_uJ%K z!ige9Y0jGfBd}t*mIp^dED8gr57aNtt7Et$hdX!KpD15X4okI3<<1|qp^ zjFOWQ<6@(uEDu8H}(_n5Tf2kh<+y4nQA&z{7s~VddH&zesHeWe?mgNpD95s5j8Sf|K zw+%YbsG(wHU!joDcPuky-g%bbQrJ>yFsuHpdd*&NBz$nh2Tsxq>0GRytF(`cgnMgkZFU> zfW_e>KZ%sP_IQ5m*yjtEu3ghKw?(tfYd3Z~HDctc!p-Zp=d{ReykT9{tXs#A-nw=4 z_^sl$9on~9zGhwbr$>)F-E-U8&3SFwHs7{xXV2%yj(W2D#ijXu|;5N3nFn~9fBNGn7JKi###uoQQ?f32_oRd7Cm8t z{f8Z7Jf3ic4#Umq61<2manaQ*j0%jEq2EZ+WQV)y{KxL6FW~(9ADd4u^1bQhiv||G z0j)sC;GM6m0%KR^Y|VH78HC~x5$1?yTW}NGe7{OjRo_Wx$?w887)Hb71wgM3)EV9D z49?1EkXAprhBlg)3PW_}#ewvZ13@>De6}7@FjEW|Dhy5Q8flPHE0VVz@dP?+IdIz1 zr|hq)rf@I0cx~fhlk$QQ{X6H=-@pEXz7GoPYb#gpdg$$+zZurQQzsmFFz3RM2Y+J~3=v1IMaS$KSZ{xk@&!oI7~%*mmt+I5~KI zdegNdA3gWgd3Db2xr0ZKZrSG2>LN?_(6t*P?fA$&8`0O+JyR&D{0)_$AHKp*{2`~Qh?n+{HPb1s zpmwa8*%NE#-CjU^Dm#&6EJF*j4E0jRYB5A1f+Mh9X&vuqkAM6i$!K zyzpjhcwERT*sg`;cCfQ*JPXgL3T9aecfmrKaoE!5DcJig*joYFgVOyTM|C``ionyl z&Vd@?I?sW~Sfg1=n$ctK(j)uUwr<(6>wc^rS@+;0fx&c@V@mj%!agm@>z2kbjoRKn zX=+JMyH3rT1gWEzZg`MZG#!xnKx_Nd4%rPGBQEntqWh%D(&o@qsq^hG!VFSp+^PBt z6wczhtG_4@%49*{`~~!T5uPi(E+xYl`qhk6Dl9j%m^#J`6Yp|T8SAVkPW0;jTGI*G z3E}G%?qyO(JQu5ncptSKFVIU^1g5O-nEp*;qe0^;Cw0@8$VyEnWo5705{=rwDcrhh95YITUNa!b(98_($RQVDK4uFE8}xB zmz0t7%9}v09qY_#%V0TeEc$`_^|YimnNcZ|y58h45w8rb)|Jr~f^A9Uyt^D{cg|`7 z`*|Nx53gVO@W9zS37$yGmSVMaVMf!o&Zg?rZ`)8bP7)8g>q zj_td4Zr*u6QI9O#bht~~{O(U}Ui7qz4-~d5=-ajHa(PCJoXnPu8>qwP&YhY!IL0=j z)3gP%r>WU3S~YIlVj*9{W%4yr|8L?9v=|MO$S7t{Fs)9DGjQ0j9k;$t=xAJhTJ0lc|E z8nDWHB|N}+`oS#s662v{+L%%E5?v=vS&RAHy+Perx`CsK5lipA zgO$H}@myLm9gmkf{mYzOW($t5s36ln@fO~t5m^r0Mlg6or zmC&EzWG7z7^J9~1j48w~KQ>v?4zY4m@VX}!;f7=<+4!JM(_@~LGPM}i>^janY)oNh z5~rRIQ1IK)*f%2leecK%TSp#TU2Ux9$1ow+)y$ssDX_ zCr|DRa&$I2DlL=tgRIZD!hV+W@pLXya~zy05&U`a++xs8_b6}j=icGZ5os>V zJOdjyl$7~AC&6=N;yIq%G)Fonx8nI&%kQ3#Ralw0szN3wo=d|!O%Fx#6Lp~?iXKn>d7agVq zZ{TZ$ebz|86nJ1@jW*l`PmqqM7)=x~-uVZe9pUA?KiQ%`)oW|vc^MXA0`HH2DM6iT z_NV$6fa%BklP&sF-MJ>7>hl0IpZ7=LDXvcR?~m}U@!TWE>$#M4o4ymVp8$}SU;t7$_(~(%@qn3{ZuZ|u*>`h7vp+AVMBwC3h$&NCz zP)|-GJE){3C($_1{NCYvz@hDdANd}@K6`-Y9~edeOpcge&1b>02 zYA{p%V1{~NV7`da#0o(KA~p7(0P zc_z#D(o^)*LfoA`#iKlDRPR@a z@*|2yDX0nB;tX!o(4J(83=63hoz^@8%Ot_79eGO@b~+m=bSxg*BF@V_S+PFhkg<1p zR3cKQc>b=B4)o-But-AYLt-WxKTKva9_+CMjG2F&Sdwy58)3|}Cr{=_(GKU}ZEO1u zWLXTujuiCXw!BAC6-ZWg==z1%WDJ2?Fa6 zKH)_re6lu^fv*FGi$wGa2ZHDP;1c>Bm&cGBq<0s6*@H@jzv0zEoLIw5s zK$9mv(32w)>rB539DMH+u@+2(pii=gc`R8=B(nI0N#%e#?6GHXk25!)-FJQo9{k>^ zz9&<%GMBa~9!C$YAJ<{RV!7p4e;t2p&gU)erPtOzb~HVHPrb&&d-lZ%n|poHeQ5Dx z4|CbiW0+MFtWCZqSGF?e9qj$`SiUqmjH1Jo;GSTea~PXHjH1M?g>(&1?qriIa6D;Y}^P; zkG3s4wCa%SXw;%{i}bYm_QZIP4-aMI>=3=ST0LtdZ2hL0DUxhZvoJD97O*}|ST*n( zA;D%MNi52cg(rntgN#HNt2mJO1c9dB)vG2#YFKcnu%&Fl*vH3)J#nH+;Hq~!H2-Sv z(dVy!{_TX3fS9R*n^eKptsc$o5E`2M!0cZ>te-^dIF)zijKU??4xUo;pM zl_U@WK?Dw#2-ZZo<-q|uM`BGJ)rXi~qCBIwQ%oxb4AEd%?Hk|^jX_2wqK2ruGdMXZ zJuRtWazj>|L-*G-2@53>PT>dmi3#zsF)Ty{nYjU{`OaBRr%zM|V_nv8Pn;PGIs>_q zjnkAgb}9i(z?Nsj%o-C1u#r}2;_wOd%Ey=K4IKH=pglRVsi+hEvIm$FeX?5L^H96X zJ!sg9BldlBmhC&JgiWA79{Bt=J%^*-xrXa?YpqNv?{H|`W@~cr!H5po4~(mnuRXD~ zRquDVEkDQRlE?P(ecMOu+Yt$3rV{k^k~28}=&RAiiCX+az$iLQ37%Mse+U>=g8{mj z=+8gI_u=~YgU0yt5B@#pAAJSgbn@XJz#F=tr{sq6DSn0$z-q+QnSab6VNtj@4_Va>L{aQPi{$ zK|mh;1T1))L!+1^Rse4^Sm>6wyZo|k@Q%i0e`xqOM|-VrZW(+IYOyUKKFE=rARCJo4GCJ}|d57@&>uK3MecpYeQ;iaYr1RQR69*zh)n zX>FwVw*l{V(h;&l%Z2D!cYLDLArek>b@6T~D!$>E{$Z7Mr<^!MSfwj>`>493DhDYIs@&+;&H`u>~qqef6i-Q zaJ!~~wqEDBU4wn>8lG#zc}jr>lh1hy_Tec4&rlB@&|lASn+5yWJ_3)b;Q`vpj}=%n zz9VoX>p1%3ops~jyr)2eu_7NVK7ARc<0(Q{@GK3_EWf@O^u81gttYT(vXR%0-4AK9+6rub$=^ zW=5lz2OG6RMJ;)$4c5|`SelK);=q3K#qtZDJSLvhbmxxCRW-$%(Imf9*+gVASww0R zHkUo|MAaJKye5yYhVStVZI7?#dmQ`haiLQ^uj^E^+L*-tG()G4}(}oHhLw#}RJ|oxz!)n=z{<9tEC|$$3SF;0ZWg(^1#4{4M?2 zf%q5HT0GlYf0p;5tKNqqbcpW{?6W__IE?x@ii+X{mN+pEUSoyxj4X|3yjp9&^V}!S zGr9|&G00z65jaNcIQpSm_(=`NlYTe?H5?3PE%M=-d^`eAvW}-eeyHxgaNg5hgUP6+ zf6b#|tZs}4k2Dq^qB{g0y2GzO(>-{kIXD{)6nF;u&hH)W4``^(&CObC%yXW&U!jKv zlZc0CFhex{lK`64M&LgYJaRkcZneDw^%z*AN>G48cyS-th-OxPi-o6|u)$!k%D7ey z$uK+TMZ8uFQ_|$>haO@TW43HzHDjtu$Q$l9@}^Byh?S3#(I%Wgzs3pfso$_usOoE4 z-c~G&EB96(XZirM|8?G&6-J0i!C?icv5LeYu*s)1OsJ=K;xsm_cIt}Y4M}7y{n)0_D4wK)Zm;H0QP|KJM>SZ9WU_Klw}oa^CshAevk(8P!BhcEH_k&ufBIF=smVjC zKL(f-<&NH;e$~A}FX#Q~;-RsIv==_j_dnnXRq?ocR1HSg;LV z-!SfvBK>KSou4wBk;j$RmA7TCnYT5JWu0;VHOSIxr94#h#ef=-j=ar1pm)ttqe4Yr z4Co#r^Uv>r{kp=?8v4>m&_14xdux5^twGzJCoRnc=o83*Li zCP-w;)hNcq*CfTF@KRxh+&oyB2{?%U#tJjdpYM_i`#svveY=#5PkS_tXnE-=(5GPF zXRKC|8empro&KXe#l4N98n&Lq$WN8?EQ~>kMoPACcWv0Psd9Wa^ix6I)%0F?5SF%l>d2$<;HGT zjN=Cl^pvnVOyquI-8TZCx-ItvdAp3qjU*tgW}I&=L7tD6#qS3QhMuy*5+b!-AzJdB z(I+k~9P`QxKHw^5w`%xhPS$$F;Fq`QpY-dK!x_|U@7O0^g@NYQ3l8cS-lo&c*+uhH zff;Y_J@CS%swy_ty^3Mj010g@>Cmd`9hR@7pG}46XH&DlMjfu%MZ>*%pPa$%T;U&@ zHNoG`6*xxgXJGwsFxT0LkIp81P=Ovl7U*oHwRE-`=XQ87p5%W{rr~jVeP(zt`W^Xt zs}PTUziBY@n#L)p(g`|9VtiCebc$D3Vrz&|fUoW2sE1_|i;;nsEnopsTu1UIj0RcF zy4PBqOt2VKSpRPDq^ahUVC#5~zkE)?1rDupx_IY}S~SNxy9i{)e}oMAqQb%+(=hQk z)pV>^1!Ja^UX4-l8d71AR)e|f#E_*O|D@*tPe8E0aPFU-H{K)Vvl@-8USs8kHutw| zbARh2ufA>$z}3?Q~e3{Oftyc7HF(9 zzG)MTn&mcW(X<7-t0XQq$`%u*d+AeOw1if3?NbA-fP~LUfu4hi{Vy@m4+{pbe7l{~weSj9((+e}&pMs2PWLM?QQ6s( zj4WF{wI;?7A2tE!-m?CJ^NL4|DE6&6K~nW3WxP(5pU`+}1?Ta38vkBVEB1rsyk6rx zzP~2VU#*kJS12bucz}OT_a43vG>xYt4US8pHB#0cN1KMqkjq8q8h|hSz!HwqgsdFMDd)ijAQ!Ce`7^ z16rh0le11u&U)&_g`jqS6Oo(9>i1$zhh<5j?7}CcD1HT2?V44{(h|Wgl=gn^x^jgT zlcR~BOF30f&Zy-Zn?$}bbdO1W{k|feZ)~YE=Q!7scYOW2Pv-HZOIq&n(`ED( zJ^L89FMC?#AM5Axef6{ZLFnUJF($%q?$-V4gGTvShaMc0La#dYuSbZ&omv+06dz+cTaD)&@%ORlX9Kr9X9KuzivO93 zz!B)dfr`;`frEH)@OpW?opu`kTV6}I=lR0?Y-P9x)2P<@jldJ+!2@FaL?mt+5gVjjdq^MIyRkq=Nq#I!CzY1;HQ4zcA zi`7UKl>nF*N#|Y7Vz8>1FiaZg(~`w|n;C1F2lmGrJOxpFRBFM|{B`L%$~lpdXO5L7 z=EMdEb_{Rb$y?YdwtwF<(&5T#-F}daigBCOYhk75^K|44D?Md}w!gvI+e!88` z%7I4$=i@i*kj%T*msb6Y;&L5_UndriE&i2WWw%dx+>(p;%wOy(-=CUs*CM&Sx&|EE z^6GE(yF5Ceu3EWF*Zxj^({~IOmfPzy29Oshh_Pzz)K%|yXpP7m?+L5k`MZ~c8F$oq zZ?97;me^D3stS|eE`0ffji(bk?CMv$I*eA+R4r2TpzUegzKlh&jCw+XRK*+pmNdYb z0&)hKS$F{}5P(cph1LG4S)Dqz1{^_|b;5Bw&BBMr@{{W*j;i(>^0GwEJnL5^^%RLc z@PP8#Z^`cUwX3D_S{TZB`7JO4*7G=jmS-5lTUA0yWyoLb?@Ru7jwV zNP%uEtndLZf#R)n#0?l{&i{Tyi?Z^LRI^Cg7`223-x3;p29z<9bn>N>LB6##)GvE)`;tYF8GM>!>V-r)yQk+K0F5>?tWG*xnYQqwJNo;c+0#RY}xL zI3{0{!jzjpVx4Q&pyhPR>(DY69V>>xk_?H7u>1KUJfE|3)=WmE+6{dcdz!(Xo9B?i z_HEg`_xBRn9ldpH%#WF5iFoviu)$PtPH_gb*zk zFuRUi!2g-QQacgw(D<$eW5*VB8#kt5LVRXsd}5YTuVCcJg06#y6eMJ3Bqla&DEi%r z_QD^4?Gk|+I#p)x>-~-~a}6QF1Y?TuW-WyaDgZk%HD~Rul)skRD8B*56Haqj2y4+hQc)e1Rpu~rs*k`V z!o-TI>-mpCKABqvRx7r!ygrDwIv$ZkC69VO&vKuhqb^u1N`Npj(29ci76UPeOkzIC z-dZ4RuBA3}2X!fRWVS4xGr0NTob=Yp2g8;QZJ!-8boH?Ijo8|b0h;fo{Dc%_MqNGk z2-m3f5h`hR6DN6Il{bc9k;)b0lk?90MoD`1T$<#tNp>>oTZw*nj1+x9e%Zw{=@hIe zv=Z8WhOWRrR3GPbHJ~7mM4k=zNb|N0+4ofqW{wA@YMuObbqD1)utEk^@zPWX zy9djc=@xYk&vFg+=DPV*a%d3Ds)}2D7GA7;3=-wpWz4vo76g|jGEDQd)Kd2}+`WDO zu7)kU`?bgNI-MHlGh& zhQ4&|7T&_Q~H#W7XHSSj61B#3IHZ7U9l38F6)8 zrmfX?V7R5RZ@x)MMa7!Si#G5&4>+9urN@66w74r3kN#80IxSx^R7Lao8Sr8rLt@h7 zCPvd!HEp=+lk8lD!!*=juGWHih2;eC*otfo<`#6D!(fk&(3<(jd7pB)Z9KYqDu1>$ zvq$;oZN=x5f6h*EEQDTJ4LRqt?%F6D*_(CTA&{pf3`+1b zUpi9NzYqD-ZMau@q-soQsnotqGM9PIl0ctU*3fe=%@G3YV>RGR zm^oWPqx_wAl%&8)im%W_>0NiKgkK_Wxj$0Mwvf)G^OiEj{ej0v#{JJK^Ba5oRQ!Eg zz7Bn1{d@4cKG+Q|y`0wMr1-e#C=1W-6iecb2y`|~Ot4vHR^EzvT(Cjqr2Ot zYgUR-A9~zHzxlr6D*f@y!BuJn{+2|1aGbPqyKd8uqhP-}qi}=U?ETUABeBHpnV!!0 zF7OXKyQ|xtoW$zhz!V!*?_J%&yr!1Lt9SB5^n}+y*q^U^UM~ zF%wH9F#vs#uh#E+?dXwL_idzM?vk}Q_s>6Z-r6}>q9J>taYE&s8-M?pot?q;fg8kHd`V z>nG)qCq{O$+!J*AO!N-(u%xFYCBVCSEUK4T&VC-2>{uZG6gxp`FbiGf9!Iu-1{RnQ zDyqeUG0lQvx$B6#nVP~wvhPEhOHw?F>Ua=Line|aDRn)Be4eptw<~D~jKaF`I}`Db ztIg8_YIC)NVChD>JtQW;7S}qZa7a&98 zlDr`@*x9*5M^AihL8rOy7Z1MG#c3pQt$86|f_Bj*z%E@V5@hZkR+&xIJgFCB$*^WH zKQ4;Ik=~jo2?LxhRG8ZYtbiJfc^N1PsfwhE8@QO|1nfs#!sKy9c`6de)_j%;vaElA zK(BG)SJi}N8|2iF&7fNn##lP>tS_UrPy$Std6nuM=Ocic+% z?nw9JX7Cz$^--ZSGRlTfLY%FBRDJlw8ff;pxhuoMY!(Z@vkOUbx~9k}{3l(r;z*4XL7ll#H*20}l^bJuU;E?uR3he~f2{=Qvv zyN;ROUEP1|@g0K~C))4ty8YmZwQByT;T^jbZHLaxq64J! zutrIsKQOy82{groD2v(Pt!B%HBWk;bYb63@?73wLd-MmfE|_~#S~0>7#)dSlsudeU zcpgqm%9YO3qf2H?9GAG~DN;72cZXs34$67*`Lz$>K;qt{luxIa&4oQ+<@H>w9-ZFfMfb^4Vmc_R(_Qnr zPu~P~#gmpqa>LkFGT{~_$&*r?q>+qlt^Du}reEG(`_!&yp4mlDKC$b$XLmy*T&~G2?(V+@CPs|Bim>GI&oe3Dt+kJ9 zoP^^wxecQmhi5e$m^*g?aPSYhHV+9{kzn1hTS`WroKF_(3VKu(U)$!@Kg+|EpMVCB zJA>Jo4_jAO%+zmXGtIDNZ0z17Vu`{ioQWQ<6(l&W;*FGwT6jr#x?1kkg5-bn^X@LOBK#};3MPXfguBb*T^7QfyLi|Y}8zMf#EAtZjw>CGE zBiltS+1UV3uy)A`HbqGRDFJgf=AKvMWO-BHNy;Y0yuY}rXP3TME>+A+*O3T3L(G+^ zCk1mgkH6Pyfy4X3eD3#Wm{R=E5_CmI{hpgyw2R0sN!rG?c$iO(9bRAOQhD}Vsg!;)|A9@V8#liA#@_X< z_nm^heoy;h`GuXnq(AI=xVWTEtB;lPGUL(_!zPwJva@9Sq9xM~!hSEx&uM-2>?T)M zgY^S?%xh4l$M4BKVVr%DcIT_iww4Xeb%uH(>%{4-UsbI%Myn=P)ybkTlSixaX7<#d zV_I)8ugaJyAm!SSJSI|ixq9;aam|nqk-3m051a2p@N|=_Ob(HDyQk`8PgYiql6F5L zWFxyvqCW7kP!!M3I0d!)-87RP1#|~mgiL&H1`72(qV;enzkEfWee6kB^ymz3|n=?cDst@I80$4fu{XC3{ZW8vFc9P%jI zU;2W_)-`tqvOEf~kdtw;&KDAxRfa8A3zH7;DobOd>=-;$v(NmihO%1)bka%VwUiNQ z^WqJeoVtJJnso;sed@4~4FiT(QdBMXeD9Pxe&zMDjE(1_VkXVkD5bF@$c}?Q&bW$O z=(@%NpbIviIbuFpU3Q-;e7s7(r}Uuz$)YIy=c`emyd?kdJ$V7WIczNb<8v0aCw)a) zR2}sk4okZWK3r;jpMJm;iT~hC?EaW*5c@7&+Q;XxH|$kbTmOIGpJ}e+{!Hm}TI!;E zrM1$&s^QYUonl?Mjlt{7iTg7x$PykJV6Jt4rf&(WVB)zylM9PflIF06TR7zayS{hL zeXCbW9r7+ZoL~O<#Vxs|`;im--Q^20Sv8ruORMQ~zgCh_Y_9vzWTii}&2DRN=?rGK za)Fg;Kv6hKZ#^MC&SnC;o+*>?E6Y<{gUMmDcG+c9X16Oa%KC^Y2o9APxb=&(aR?3r zkt=0i!=33Zdfi2TqE*hEi!C~k1BX?TF2Ar>RZl)Hx1_K9c$t1=qfPO}Xx#q$ofsEC zNa@0|pKL@r=zjmek20xp6U(Q3&W6)MxlrzkQZNDInHAWM_r!+r%E&1=#V;?>X~zZ> zYa|MEM^ZvzJF;u6Kr_NhI#MKqBBimLeE7Ib9{mFNNGywH3zzwc4%lIxYNAp9CmK}^ z^x#4ql`+=Y)enVav9rkZ8hAKqdytuM-MB=MZbVaS0(L|=aD>0KVoo7DoRq610&giMpW?k)Zjf97sOBMa{#(j%&A=?0wT zzAOdfrG2gk_7cm7kYgj1gZo2=xUU&$WJ;6Lo)0CLPY1VcGqY0gC zIpw6HXsr26q!jh!aj8S|cN|XoJN>5O4*kt_yZaAUNH&e=r8nTE6u}i zMFW-9!`ErlJD)`mX+NWn;_92~2RMd0{L!@*#N)XIzE zbIM^32^ccTA4c5UEti9i9D`C(kux-QRz_7(6(TB< zN=*32d3EI=f9B4ODq%iZL?zy6oTrKK)cUz8Ucr<{OfT)&^$dOIkDur#u4l>)y-Y6C zJNRnX{0=>~FIDBhw#VN&f0C;7dwLQN!6vemxF?;h`te<3<*RLrr%Wk!mh5Kyjm1NJ z55&+%c@f$1+pNk6^W=wy`0D(;I%Rq^OU@1pCWKY$26GoH;{Fz--6|90@pH!V>dF5T z-rxft_%HE?{!9Gf{}O-Xzr=6*m-wUq75;yLd!Y7DzuHd=)iZEshxin3T%Yi4?CN^)Xs3{!epy&B)FRX>2de7c~^cgs6cEzmG{rgJ0dp|Rl{vYn%1HP)Fi5uSCQ*KF5NGIi{lF$iB zfKV>IgkGd~0YPdg(t{M~pcE+qL<~}-KNbW8)Z8G|M+6%xD2O5mDoV}Wd^@}6oO^E) ziay`>{eJI@29ldSb7p6EXJ>Y2{zKoJG;aJv+>#D@x5GN;z3%V!?(=RpP+Sil?A~+} zx#fI64KCti@C?}~)h<4xY-B!9DBOu_zJQ$}4MHu;k|Kz}UKC%{df;mg$?u zEE1-&!8EOcMTK}~*YBsX?_9?f$j67%W{k$~zWR<<&7AfuM&B-=SL0U1tslEQ-YBh8|B=@5UWD)&cfAY^XI&pu;NJ9|WEC_%PtUvAubRe;C? zlZ>>Y&@ext9<+&<%feX15$N?VT_|}r$;u{bI`jB~0L^i=?SCk5250EJ)ag#_?xMxZ_6(XDnl6eHq z6WRmjH6j*lmWf%Mzd&R3h{i%c+W!&r~?(C{P=YIu@O z?14T$0!YMoh@J*NVJGe18Exkw0y<# z6`;{?IoP_`<4klqwoQ3qW6AgvUAM!}pxYVG8FY zx`yrR&*MI%&4XXb@%uFId3j37*b@;2rcPyi1~cD=?UXL)4t;D5O%xwwCTy+&jt=2v z{2&=hCBUx*P82*+vqagvG@}}?^m9f*1KR&@e2dn;if1=0sEub|rM2;`zsWl1v+yMm zrfTMrN&Kr*k(2Q@jm^o6Y~M&l{q2E(_GpWV3=aztdxs&xMu|{P084r)AsuLq?eI(u zz*Z>1L9GZ6fN5Yd`FIvzG`klTvbnYmamAMAUU48HEmoF~&zm@RDgBVrAL${sdlatU zcVhqB@4dHc>pOcFe|U(^!RnWoB1)B$25qUDx@+3;AHO)Q=B!^ian6hDX6KB4dC5?9 z&$nN(*YkDB*OOMa(KG(V3bR&JCNz0eCWI=d$-D+ysGRO_sLsahFNl7TpCJ#oDtjKj zMUZRVx7F7@eg>zO%GD|(CWo(aKUACFqww>7QOD3&!+?zB}RKy)$< z|4uR;k)C_lVCuXOzn856T^e_i?TkMy7KZg_CMqkI& zf?1#-o|$M?+_f)E9^31neLrwKe4h=*btU-0@6P*N`C`PjHfDdqp4LFWM-!(UZsQ*p z$k!GI*@z2a*xj@o6pvX@G8;oa<>fiFCiv@alS9QT8@jfQVF zj5>P{U2U$-=XxV$1vb9?h| z&WHFp9%#r91e8AibYGJsEg-dweJ!BOeT{gzb~Snce&V~@9_LZMs|7ocid~IwnQR|Z zYw+40fauiFUe3!4JSeXquRvd>2mrmwm8lEZ&9bD~X+{PTiFC)DF&Ih<$GX84&yh|H zrW}GJX<%WYG}?2gbyn15rP~0&SC-x1%gdc37X}V!GmRtU#t?cuKV|Szf)Bnn4lv)W z`00EzHc3=pUZof!)fCmFFzZ%^6k@0xB@;y!D0GiLnhHuz0;ddoGv=acTT);>h~DHy z4AtO6M8PS4-o>@(CwK4CZx!;vzRmd#=SQTzBY*Qg>3j7g4yCWt+tf+_q;Fv58+Gko zY$@!J7hZ_H_T>qC{&4Yi^+&eH2BUa1#U5yj0Zb8n6}S*hMMW9_=r+k%urBfYQ62X| z+W~y}WoZ?+hP;812kE1MrHCiQ_G>Z_*ik^b22qq=R%ELBqZX5Ty0Gwc>9|xQnJ~^d zkB!`b=8ud`}`iagP8cP|gE@FC?T$BCgh`Yoo(~LndiF7G5Z~ zY_Uy5YS^5g;b)dC$AN#~vkv+JZcJ~l+w{g7>_=9n9iDgW0@Ho{$=eGjPg!l`i1GW( zX08|+H2}pj-*P?Ft%Dd7Ta~yfk>Mf1K>=nJ#o}0x8cnrB*=`jblZW@B|jt}Jg{ zuVnYlbBo52(93Kr<2g1~D3ez^dx)POLVyhJ7wX5XMfSOm+f6qFVnKZn8E^)4!%&-z zMq;jtjp&s$S9Las$1>DvqHZC+jNkg=Mz79;#(Y;u&*O?CMvopr&;L9vcgD1p@aT(g!< z>00?Dmq9RU0TD^yakw@!MGZD=rjP_l+? zEW6t__m3cFmO7lW1E2R!Nx=u{-nCp{tBU$j1clKE^Usgm??C?0?&>+-qY5~U!sk%l z5dE>^BY})SKPzrX+`)Vbup!l@L~Q%oCS=x zVa2~mH=Zu8>*>px8G$H#{kUQ%%ugt2R>Bh@X=6uB8asHw0ir(G|H-xf&kPt^bo_mK zM1Tb>Z$eR<)cQA3LMxs-16bQd^IHw&gP&HfnROh{yRo z$>*>>%IA2YgjKM_A*D{eb?z#Il?9GocOe zW%6ffEITppc;BDax3NCTw+R5>rU8sxfK=q5%eJ4cC8rGS#Kp0Jo}owSxvlv09jw)) zX8l#VXz%rfsctcs>Myfm;OdZ9v?M7CFALAwxS?U{Lm+U($Xyi=xWmTb?Rj*U>Yz-2 z*Lqk;ZV{&+d&-G~UJ&E`P>bs<+iwVi%^LB|8n$z58Tkg>u9Y4-XtcwDe{_Jg&V*YD zpF^muSR8$hJu$bTtasT!qEQZMgr?ni{B=J$h12hXM2+w3P~(6ttWHqlJ1nGJknrEw zQj9XJ=9+<8d2dpxvbS-L3>Z#E@CWnf+$(zX;A9A>3n^L4d!HoV%fE8({^fUmmdStg zO5W&O&|cA+6r^Dx>lo<4MwF4bHA?irM7McBB@eiGyxWp=N9L-2pIp4egO4&6_b9xi ztaf3gKdd}=QHQa~$z$6so=2dLk3BP;WH=AhYXGq6!N1ZUAT|l#&B%a=@Av;`*Ti`n zB9rn@wrEJ=>hXwgJr?d9mr-vmMs$NbgRh0B@u96x@S&GF@MXtrM-h8NQ9o%T+xcWX zfWIe~$Ms|}Po<9C+l4i2oGmctPy#cXEA2g}N#8nZPi#_f(J^{tqlsA# zJj>7T%n4kdel&BkpC5_T)}Hbe@8eVW&ekXS&Ykfz2mAlQdwL(GjSmYMb&%yQbspDg z|IBx`K9%pRy?4*Y4^Ft=T-23D;f`Ff5jYi+fs=pdJ6lWp&OtWK&hzk{E91M^=jiz_ z57R32417Oq(BPp=_dUCR`HCabYjhBOb#UueBN1PNJDKcPGoGy65@o)#pP#TmHOZ9n zomB;?uAzrK0HWXLXuhh(P#X5Qu*lJQa>z*z$HQ*~TVw+;1)C7tj!zhj5x(Cd&euQi zovmg1&N@FX-?@*$izgQb2N>`VrOQlT+k{O8*jsKon>kD_n+j4PBCxDN4L@E!oB4^R z6eKejT4pY^38^v^=8ZDD)V9Cpy`UZ|&kt*BAgy$UZb)S&GmV;A1ru|xrTdr)EPnG_ z&=eQmyQz@>%zbwH0<%POaW1jWm;N)ktGe(4J$5W8Wvw#nJt0%(Hz)9T za~s-e57hC1bS%dbelwdLDv|`GG{z#Qira!7A*Vc4A@xy>dDN)^+7D5u;Ap!VbLdV3 zzOk$av>bn11~LSLlDQpK0+O%~M&(fP=^wDdJhij5*uR+V`yUygH)GCWi|(QYT%ajz zu)lOc-Vi`i<~44?w{8MjC^(3DVLr&agceHV^$3Dp_J=l*s=FDY=tdV7UUo*B1kQB; z^RlHs9rW*FbPfj&8TH*qUk@07!)ej;BVh&LeA)|tn7DE1viIqKS`5Ymo-h6fb&noZ zvk2khKWVm%**=?shTFqZDkLW*CO}4=USkCGyiqs2c?`4P6lR8~OyR?H)`F9)7^;P1 zGZI*u7Pk~2J}Jy@g-8M=UJZt=e;!B@1yOBfW3Fn235fj$#~#N!*4k>8_XCjGCIW_h z{d&g@`4s&QP{_Y`UflAI*|G{?QzWe6k)N9S-~Z}1d;`D%!#`;FkH<^YSaI24HZ<%B zYq~kuVG&rBV=#uGeJq1L#-@VG>@gEKND!^Xl%dHr1Gs5s_At%Nk2TFqkfF-lrn1bl z*>l($m`SG-Wp-&Z?a+L-rWYPS2A(3fGrJ)T|C!@at1zRVrj8VAbC_o19R5r@t|uC@ zy>0`K)%l<9`>l_<@7H%MHX4P#r_p!Z=5 z19#;kdUgZ;<~Ba#JV}?2ZqpK~_OLmiu4jD1J%95j-Sd}m$8Rlp$M3p?H(2)A(>jA= zp>MU!&mda_r(_deEw)=?ao%OBM&}U&V$1*k*#0Z%QFmfOJMsS%=_pg zBbPpaHpi{y2u z+^UH)Gt4~_!F4|mHrQnc-R+>;ga!7nkgmhea@%iW@pV%L#ewRgf%dREwbH6rsa&aI zYDyBsXNCmuXhuT^){j6$Ms*{JNv>Lf=|3N4QZof$g0bK`xfP4V1&K%2F>7Bb8IuNM zp`C+k*t$A`u*m=o=Js)Xx-B?9z(X&}ZPF(<{t^e$E8mRWTff2HoD1|P9Pm}6$r*JL zduPmgeaD<3lVS=<$HMZHhtAryX=Y}xL}hKcP`a1iqvz;dy01>PYISg1Y{8Y-s%sZo zZe4KbgQN89heh_vxb@n#^zBLwi$26vjy?zt=6aFs$Vy8d1K-f@uT97RUmp;;F$xLH z$pB{`0-9y0{{z>H$tvNaqPU9iKsIHNlok|&Gcy8{(*lVpUSj{@G<+{W4Vp9VctM2f z)uWl$acS*}l}ptPE9r<6xIydIcs|Z?Dr0cmBK+T5^n~;3ulQqH4-98gd|JClfpy)k z)VkKJXJcKbs{HC4PDJ1s%K{sh*~qj9EM(#yRuLcUD$^-;BgwdgYJ1gn$@0Y)j;mM2 zMT^|#JGg0)+vI)niSsx8vV|01;A=bLf9KOu2A^)GzE)bqby@ZrJ)*0j!-pNXA^gaV z{tWsYw`?==a7+50Gfg+JF*;IwLtUa2q7-bgN2F9pj0bzb7<+GKX3MS$DBL1!6oV~R ztAJ>?SWRpTF!DjY_{9k^@t#<%%s+@Ui|i|LipYI&X66cOvDs4+;smT#GiW=r*{1|C zOQgNkza_+cW6xw&t7c_t5rkg10>iiwQ zy$;7-zdPqO18dG4rrjFg)5^mA!oKo9OVgNzQROTy$BnEH<|`bhQp9z!y~z*RAA z;K7ISkiz%L0N}yj@1OBteH;(T@g{O@SizWa$MODc_~3Dxj1#5@GG8`{egj|JG5HYJ zYSKj9*?h)qtiQC{Nv)rvc2XkpVyt)}=0G45fMNnZO_YU)rI^7Yb43&aN0P=}kg&9% zw*4wR9oGZ_t>nVmKtCufBn?1Tq^H#7L3>?d_&wTE*;BM#$c$OX$}dc2K`0#f3=93& zd|DsNXS~KIlOxV$vz34lU*H0Lp@4ay$24(%NG35sYC^?{^a8UA=W?+Uw35j*o9C@3 zqVD!E%{wa(x2A9o0~n>m<)PJ#i6&N)pEm)$C-bv+Od{CYF>$*aDpFZgB5Jni1J7*| z!#b?UkK>cM83Ki#voKBz%}j@m+2qzCw;nhat{E5Z2$;2IzT@uiiFDGBiYlFQzGlVc zork3=pZ!V~I8Se0=_(y z`44d3AntICK2?cja`yKj5W2)1Yz1rKr>s|S`o+w2IR8>*;@S_>IBG(Cx_fu{&l#CG zjrAqSCJ&rKFBkr|@P*k`y&P)YITIY`PSYzJ$Xj&H9=egOb({61mK%)~*a+F6k_p^uLtLLen~Yk{wUUzv zQ(5H*GggD)#EM_EMIc{aI5hY6;w4yotdNTh=B&k}NN$!q;~pl}(~VbA(FkdI(Y(S! zx%deqM^>yYI?J}8=}#U&8GHa!2R44t_hgic`r2btQ^d)E*qwOZzuQVO`d*^~GlRo| zdDo$6n#H7bKT7MqkGCwrVTl#Mz+Co?=(X)B#`Rv2m-KhhV2494e%uJ-kMf*vJaL%W zTx~_0NcpB5R0*Y{!H`XvUb9B^s#PkcB*ul7W238}O1P3?w>3!~lU%-^sSTQ$&CsdjG8;5m8c-x-o$ zDP>RYCzrF*n{|oKt(rgT#ThGKnDbJev{|6Cf(%+R8BAifE68Bz6J^k(lnjtbC8~*} zxCsEP1B+YIxmAdPlr09=9rB~Z5M+p9?VRaT#?jAk)uVq8={a=N?W5IOH|^7?Jr_dC z$lRq1mKJC-Aj3LkH|(-*>ynl)#M>r6vuY=k!81`p20dGK?2spw*JQx_RSo+pP{p(P z&svTr`#B%EW7_$kXjB#MtNeT`S4>Lad6ngSqy3`6i!?m=tZ?SS%N1gn0|~cz5aX+I zsSu=?h<3K`%5(9EF7iYxk3|7cZia_YG3yh2OIhI;Enw>ei$EiVlmNe@3o`pgLZDGX z*XmsXJRq@0jS;`K&+HXm7K}N>94$(*H4$M)P0Gi7;|t(2M=A6+@7GSB*t@{0l)81tllSZIL6gph2LOc13bGhZ3-riB>Tlrg!3x|Ryn z(E-o(gWq&0STAza1c-?er)t&g1&B5PpNkXVOY|X`QL&XJXz8SvmJqpIvy}Sp()&q` zef^hCowY=kg0m~O-ol~KU4c81HIn9TJ-$*2jp2hZHR=2SRXtwA?Hu(w@W`$!?8!II@B8syEb-T9_~G znWV?eHqt#-wOy*ZuCFaEJVXulso5-oF5K$8`30UnaiWyCVzHOsDxx%O`*6I#hUEUe z>?^l8wUW-_M*t)=ccRsA zm88^6Eqb3{nXxs<Z6R)>bho|$H{H|d2TR#E-&Ky-C-+NDP9Ys@y{OR{VeM-Hi(aWO3&TZhtWeldRBoT+h7=-``vY-Q3XP3f^#06!((tI z4;AQE1w!IyrYWZ1P%YF7wMVbm6KdCP*S2=6+AUi&Yuu%r-?O1$iSYa|+mA;D>#@um$;8_!i-Q z%4+gFWwrd1Q`YpfV2=}4fc{A^>`Jzqrs3qwpyOjJ($(@>JhzohuBy7(cEmbf7!@*6Ir{EMgfwTbyi@k_fZ4z9iL>aF+sEKko^-h2PepWd!D zs8XHi7AgJ4Y+;W~dXRo|CC8K6w!tjw(X{$zKnaG(P%PtsVn!s22bEYtyqTE{Quk+4_hDmTGWqf`@MV9*G!IVBv<1hf$Fnc&QNuET zIYhx}dd!WeyuWOD%U5ntm#$o~Ryyw0tcRBxQE+_RoFFwoX_1Ss z-^k6)rGGvwgv*X!Nd(TgMXN1}!(+%px`e*K!6z}AKwpHsFcgj^*u4Q$70w)7u~{7X zvywN*|KkW-T4sI8Vn`y4$eY)!Nhzbb%tNVpF$?`UNh`@C0DV19!NFL_!cu6#m-K(mhZz3zIF5cTS?> zZ{NKslYR3CE?Bg1;V{;loLHQC67ab$y`c_RbTu#awJRD%@d~9r3PLsQs-Lf0U1J+Z za??&4fiHgnvIFIvT=k6=QzDx$iJ1!jN|V^nq!+d|r{BG^>j!$VIZix5zi)}--+${T zoS027;UhbyZKp@^lDDS5g@?a2{Vm*z4t;Ctc9`Z|u+kV#K7g)*=9 zAkONbd^=^)xJKgnN=h)X>CelO+w(AM-Ja(=A)d+&iC}IB@EK#L1*ZQhyOAG?K~+%$ z)DHDUqfjp1U>`7gbiaP>+uQBcs>R0o`y(_ucXaNwDU&9SAKPzKzfmKeANt&&f$jUY z@7ud)_ikM}+1uIMwaISTqG{u54XQP$msPt~dRlDN*s7H)!Y!bGjDJj2WO!I`kgGCJ z1^0Ei%mhaXT|0yZ$cj3of3i)sSYH^ESzY$=ZQhUs1S-L?kZa1}FcL$9Z6-xg&8lKf zNs0`Q^HMBUZ>z;SB_W744X9KO%OO}h7YW1W2+Y`JcQj_ZfiGAl{)nxmKoMG^ zofDWsl4GLc{S+S`vrnjZqgX<$B)jg9*;V^u;03V zq*px}*Ylt&-&WfV8PZOzSf@@!dR=Y%9Q(dfZT7vz^}X}H+viu*_JaqvXW!SZq(rzq z`-t{zJ+z?%O^cO6wsb7Wm*4V4GcUaY%CiSTnH9yNFx3koq>>v-Rh4e`tT*lYK3GaliYhNdjdZvcHL428*eIpq&65OcKjCTSyulri#Irx#pXDWam}+C@ zK{C_yI8zBuWa>U$!I_Dn%)c`!$%#_3lo^CWgG`d#-fMEdW_7&TUnJTGx1n!79Opy- zgL_Ep2yWOUkro%-CiG}ioK!JjMZ-d=U%<*nj=H{dC+;tA^2HtLMjGHfbwKkh_zUmy zU(+OXZ_$!~HBCPuR|sy_l%6lTOz6SpSe%XQq+co<^qhPDWRY_pU_t@%z~Zk_ppknI zh24t37MN;F>6h|GJ!b}^9^VAL92@5WC&n?k~%s!2y1(6XQzDfnndl3EE1#uPam6RmXuJzGOy~XC|8> zTY0hz2lxl<#B#`0JKpM!Ag!Urnj-C4k9yL$Z_tz2N5f$~=^KU~zvytKe$30nUuVAYEB&EyW9Kd9n?-FqLdwVf-`X^G z{@pnH^d_X&`bkhJ(^lzrZ`ZAvkzY|BaXSJx*tS{&q%Ln()$ zk_v9C=Pxx;pjJft()l_ZpD!H2G>9pkqsh#rFo?0MSjMlq8%aF@X;KsF@4&x1M3NKE zf_@cW*J>E~0G^QN-MR};NOh}@?NOJ;Elgi8jvZ_Zu#w@k$gzJvhqIB%HntOO%Ok_{ zXjN`Y72no!Q2)g{t&e`^IC{ykZXMY}gK;eWmL}kD^YF*(sAiYGQG8q;$FVo;;tXA& zvl-);ToyVTGLloD49*5fKKI?B+3xcSPxKj2V75B^P#j=8sLVERl?UI7LOl@kX(3vv9*DDG6U`bT zYslutqY{0CG7q=QZ+e2?;5|dCsYB;$eK$U}JZPV~PJeKCF-Dqro5t zjUro1WHCz{)_J5cYwL9$U$2$5^*T_iQ?y22#MkR}ZM_OipKZ*C8ug@o1(X`!HF=Fp zBp?t>A)ev;pxw2UU_6q1EY)|;bvWxe98xq{miOQ~ndO|O>r^JIK~LIO%6zBwG4Je* ze_w#YfajRhFH?z#eg+l_UE+_8H4cJfj zEPyh!xv0JNHR$t?j-<^PL*9M$Yf*_!8bgbjM*lf}rENpb^3BegMnOR)i(;bg=d}sy zKZ37#vx$_=l2vC(c??TZ(Kh!jW}8T$Ci$M540gwh5b+mBkd5j5g?8WM#PShMTdLI0rxT_{+`8nm@S!B@;O&5k2?jA5=oJ%~9APL`7DiysV;@=(Z*-;u2Q9G9TwCc2DuVhuDll z1t2!#*2q(AX-sVR?6#RN?x4S)yg+}$0bi=~Uf(!BDl>eTGh2GxryT%11H15~2UP{M73C~m!dT9c)M-K9u;T1Gn zV_PYEq(AKed1I_i3$0C3sWypBkL7dyR$J&XQjODZPS-#lJ=1T$i_h^_rRxep-nXb_ z6{zB+eEn&^=TXPTo>n3=CLY$Ei6b^Ckd+9g9!C`AKwE}B;s_(b@mfLMrV1mlJ6 z8$@7F=(UN!$%@zC&BH?2zfy-Qj;{{UO`_n|{p0k_V?J~^UXds5fSOz6VNqu>K8=`M zf9GR(y+E#zC(q@5mGhlR*Q@Jzd~!>BNLdlThCPsk%!(P2a9JyEt8#oe z6Tj)SK&rRJVzwBuiI7JHZi1fgjq~YpJi>wJ(TT+2*yeb6S_#S{B=6xorbPd67U6+H zj*vrYX94c!yo>av% zQiJ)F)k3g>*{FlELDXiqAXZHDSE>OyvrTh57#9h;P=Xc_hWL=@ex2SA3(Jp5&7$B9dMacg?fJKV`ZZ1 zMY=SRlw*?ge5y>5cs^#Y{-{UXCF1c67f50}Pt7j{)IjDkfpqZzYxs#|6#Y~hu>t1j z0)bumc+5o!OE^&AQ5uNC{Pf!=NzrB-xzhAg;_0XdOn4`2gvi!Ll zv?e~4KO-vA*@DgA70k8&Q?47}hyRvG%XN=pQF&ahtJPuXP<&0Tq==c9~y|#*pI7$YfQgE|IvyH5`dk zi>eUiuJie|+0|+sz4_KzKS{E@6N(q(=4!cuwMy@4fjAWRq3h}K;mUnlP$g+$LIb4% z{qr*==FDAg8x>z<`+f(GFOvi@%rViJZK}~pF-ef)@8@F%$fqcyzYV>x=x#(g*4;?a zU96~VKBbh|ZU3@*44XFFrPH`k!$U!ACZn8`#M5wChsoh<^x+GW*H^9Kj9P7^PhOj<_)l2N z#=8S;591k_M27M@+}%kJp1XXJwugSR&xeW6apyAYICIQke#Tv(;mU3-g)7T3zWAB; z6|GIpQaDg=6h9|_#_jc5c3&g;#oG;!1(Xm8@tYsZ3ZS3`S=$c zPJZ|joUtX^J~tDaB#q!Jh2YfP%1}rJ3Y(p z?c&FE4#crqf*DUZP=ls&p?A0(yJ%d(M%P%HzyC|}(P8i!_O0Ejp;eJV(ciy6hyES+ zYV0e|zr4@@t>SX7PQO(0_PU=gGA;Odz5XgS_KWnK}kg9WT~RFusQjoc-XRRnHfYY z`Vv$lFf$p-Z<4{d6&^!37196FkE9|Z-!B@zrd9PCM}FUaHb5#meN1uCG4w!nT0oz} z{c)|~$~|1KYU0B9h7XQnpR-ELr+1*AFBacm-a)$nKhz4&HpL!I_RDoNIq-g}7n$y! zqm9Q{TvZ#7s#+UPLpkYRRi^=Ck`ajl3`+XoAU8elqw9Gzob{w+eG8%I-_`Xzd++z9 zYD#e&cT=2xPR-hE!#NtA9AmEhCf!g@Xy??7ufzyJB|_jEjAS$_Gj&lOb+!9Ph6e{h zbw`ux;ltGdbcgb6r|=W#K{{#>L8?qtVK3=XIAs(Q0caqo(dk(`MC8jzKEyd+8ieVP z3xCj?-yNmb74pIANef?led994U&)(DgMBU^`{c5Q^uA{4THu+Emn$s-xGhoUnGuTI9l;S05O4CdQ(B zxRthETj_d|V_oEHSQjc9JLE4-Tm5CsJAqs8W6&9{*8y^ycY@Bl2A$!JJ?oV5^DUTj zkfXq9?B{cixXn3Hhx(*e%Z$-z;;Eku%y|;)iE~J7E=+opnXS24?Hy-uH}(#Ry`!7Q zJAP(uY~mf2Gub;NvL{o#gJVjY;#of~Xf*cWv07ipYBV^07VwE53L3UZ(N~R6j%Cl~ z{+TBCt)=8H@I&%-{17xYp|spZ4GdGhiG+izp}emh$1tLU75P7ZgT0^f*# z{+eFHL#<)*@lV3vKpY0DBJa}lo~SV;xxJfXy(#aqwhzid+rQypmA8%KeUaSyVrTXj zGj&+o(Y=v>k~C{qg8-BC6HhAV7I6c?Z$l=R*X25_-46qJyWKBCJ9LM&6JzzVYpiIt z67P1F^OLk!JIl$I>${!h{6tRi)vwhPKml-eBF>=1;fd$ji4S*vp_;SFEfPcJ6^DpB z`YM3!vcJ;#MGhQ7o!^0XUZ-!+O*iq*yv6kS8@MCxe3K4)jpR88kw(tLBrlIlc78%? zIbRZaRDjL+Z}=gcA8Sc|ymWpdIX|^F;<`Wn{`(c2wQmdk=JMsMSLxR)@%JpH@b&nGO z+(P*b&yJuEyNqi|bzZ21T{g@!8FC=7=hzGwvmNQbcJVK}l-bQpXyl%ixl6n8nb zi%gA4Fpx9r(g3NoN~PpPK;;h7&`6C@uBo!65MN%{U6M*viKOUR zTgC;02}AL1q?gh3gdtVoOdGnujC>P8@v2_G4tpd|Fb8|U#pB%<)pU?vZC+Yo^oZU# zIq{8@^w&oeULqeR=d@ii_oc<1$0ajwf}@Yt&mxTz{vr5dL@lUM~9~Tt~v9~4&YBn;vgGH@S zg*hw=N2cX)K;pg-y9yTpGzb%euc{Y3b5*2q%k+)Hh6G>`tr#Rgj?5o-WZs+0m#&7= zO1GTjM@<-t+ch3HgZDcw4$Ji5#$9HdGvSrI>9Z!y%{zB|%;xG9_RMI~x-UNWUjI{r zU;0lEdY4|7*1yGdNcG~Y@-?<*D>F;lKOs(3;|cJyTHN}TnSv#`GJ>cmI0cavUdoM` zB|6f&)}a#hhdJ=BM<0B7AGkr1tamust;6I7POds^yo_U6UlNG&=iUVi)L{cYC;ML* zlk)<7pknVcKlbZAu>1McN@UIa*7@xQFKhngRVnAi?B?y(c52h1@0#taJLDvkpWM9- zW4Apml0M_O5y|LP@IsT565`oUu@T{(mD2g4Yi0mbM2T@>k_7q4iXqWe$9~kkH`xDwyX3LCQpW+FP5ptYl+;69?WZ8b9iV zp)rXkQ-bG@BduN?-^@WKuFah}d0yVRlcV3P#>RSHli_jU@w1xGp74tEU3v!BeM8(2 zPNBa@AF{E23VB$bULMweE02;7{u6n8cy{9GF)z?xaM!Ju2>GV!2@hNC3zK zzqhti+YWu!Y+KV|Ttd|B{{1UI6A~0UFs*OkdlPI>txlx8ieu;8V^R*6oA&y^i*uxciyE=mY39M%&oD zfcj}sD3{|PMCb;rgOE?rqe zYrwb5f8ri(=B_Z*B^%jo2h7ff4hK1+7(;qu2%dUSA5xqO2Xt_1$72|-tDSg_?n(B* z$Z)7MTl(&e_c0kUV}tGCDKJoq8+yM6aBR{SfxY4*Tk;Wwa&7#=&ex>%(7>WEb2RO= zoWp@{IB?I_urI_!f518_|GAI#Q$wt;h|g=I*z?2wQ+DX1$n(OO-?Bk*u({g`a%IYM zJXf;{NT$YVbY;lv_rfwn{xTbo$VP6zjy9kt&iIN*Hl_u6R=A$UDZ&`s7?;WW#RzJ{ zU^Hf5lLn1n?y~#SPj}B_!xR~IIMtu+(ANQt*Bh(sy?rZJoNJ4xcRr@~3h5oZc7CUK z`a7O!`_)z8AMD0Lj>jta2LuUkQwjbJgN99UkLp#h`;H9!Co)!Ra#n+R zMzEIV<(864I`nNTSuG#<_{yg?U!`|Z@r6E1s#d8wxyk%RE9c-&o$E}l)nsh?hJ0M- za_Wz`PJGPr$e5qkrf&F&@tnZyB*1D4=W#K?{(jbybrIq<(;-E_%tcxWHZ3jRS8-kC zmZ{os5v?H4piyj2%w5SQf6S4%cu;Gnwt-s9%PVTaCw{*Z&$&%}cvUl~AIIkVKjY0R zcq5PD&1Ku*t#pI5kgj73liM*-e7@e^%UF|MU$e%!pRtxVzx9^(Lsqo->Sv9wb&M~{ zYa%|eK1mc)Amy0q^ahLN(&8<<6{#5 zJ&2b(vel5?itc9NU~>AM_fG6vckB?8@Sz_lr5`StJ8>>f#rPtwq2NOwFWUF^mficw z>KErsT)93+J^jVyPp0oot@h@iV_$u{M;*H4<7*fOC1+gKC0h;a6h=MIOC>scnwj0KJ9P9y#S7Y$HUIyb(Z*1WMq3#iSk zowZLS>pg2Ti!l&Y{c9kn*^p-|z$hw8q5B5QMm*RZau)mr_gRISy@Oxu0S&p&!; zZAO;Ddlht=8+0a;6{YwQbbdGJOe7UNaheS}J_eoPcvPu#6hY@*gU)a)l{$~9NOyb4 zbAWtaljm*^c@B^}y4^8+V%#zGlfT3rwL6B69(N2cY4-!rW-{^@r}zHGdl_$DrayE# z(pa>X%K^^uy1VGeyVTwKJ%cp1UZ^<73l--oi1TvEppk>#!Ywo!Ei~MdH#jdF3>rCY zRY5~_yYDb728}W34Wqow(T4`%)ncIEXC&sh= zte_IB^@Gv4 z$=7A7wl1d${p7YT;p}^Zx<{uWjjbFek{}FqB;y3V>15I)|2b(o6Cf+%T#S$F5v4DyRAzhlRphQ zqwCz!=-hG9f$`<*GF4lbOSE+f;~Ze@10YJP5fjPATQzCp&DLlA@&VeYyQ&k2dt4&% z@vkDrRvKMu{MRre;d?bl$Eas*vWttf)8ito&D(T8Uc%>~pff<4h%90bTJ$-xlD>~e zsbQ>5TdhrZK2M3;JRL)~@cR+%js*`;0(fo-amy{~Pv7KsCgP3-dbOU%dlI*JPjQd( zok6FcV!=bS^)-55(OJyNZk~HZ z4bIEo28|r_UCDdx;=`Pm4F-*zp`LpM@S&O`3>st5`BM4|_*lmG3PEE`|I&K}my5Z% zL1#4j8fR;CvOVPThe2obpwfEZl<*v%55m(WPtw6zxWluHDRy&bvAtHm|&~U87_7p!1SWr_6aJ=rl6u^gtJIJB>~| zk8udp#{u_vHbzj15%L^PcPqu}ctHbny5fcO_3?{*%y@rU>ti|HB7e)*YaMN!`IXAy zTF7)r5x@88q3s#n#XTD1>szif>S!`Bm(m#vnO-a6I-`dsgXN`k2BV{P0eh5 z%MIN}=?CbH(6VRrKK+NxlmC$7{hLX>zDAwW?C{w^GEezSe6|}69{kA96gouO$ZvU@ zAY2TQFikKLaj(UqFb77jNGowyWe-wNvRzeVf(=X>s9}fzghq!YFo~LdkvL5Xj(=rP zf9#Ok;DL12KA^La(HZ3-3wVALX8YNFMyFZ{I#C)O zaS{<>@CE;b!L4MXAUF~TM$n(J=?^A@E{w18${zpbQYJo#&`}QI%RZkXtt9i|zFNxo z6@2OpTtme1u+NwC&ojS+&ogmlepj%dIDpK?VF-}EYT2z`0C5ZWAO?buigp1c7EYAINIyT$=zLC7_Mix=>G_+p&!Yw3P?<624P?5ry)V*Jb}p(L4kLOv+f zt^zupG4`PxQioSJMdBzN4k^ZlgzctJ{6VNKxnL zbtWnsI^mxL6?ObgCKhGwv2(q zUS7u06ks6h2nO1fAr?4oT4^j1=P82mu}9ZE>zgT_)y_PA3QA@xIW2!)tMQ46<6F(& zoIfvnLSo{$mJ9NoKKb(&=_FV_~?A{1+ zYy=)OeOH5wj0QV%+s@cgFEg{=jv3O6xx04GXp_5RM{d!n>>)$4+qQb{xmInB@5t3w zLk4HJX*G0ctA}4SmU9~OF_DsJs~Y#r;QM|)Wo zm=Ewzm_SEM3x;HITQcCw2PB)w;gu_Q(AqLC+)JBdAJs=1`r`im{m3+DKAwal#9iZL zvXDGb4zN`>PR|Dsb!6OgGi}}MDez){QL{w@?SeO(c;QmlkNmDB3Cf0ev_*PLz1%T0 z6mY|(t6yOflQ6Q`7~C_Xs`I!M%f>2z>5D9Ghg9Ty z_N?Munk)8wnyc-ppufAaF{yyY*y9)r6_8d#FD44mAazA6)U1Jn-zXfLEo`EhEvm%~ z1@u%e45*t-=-yan!vY8KqMDuwb3_535VvD_ru+F(HqoEh z(!6D-u6?#coshF~&NB8BpZocMIjY4KRYb?_aplS(RIXwV~Mn9|7%Ko_cEEx zaHC;1`c9hjVavPdm-XwHvp?&l|DHbG zpk_d-Z)C_bsS}s%*gG zY>)>jEu)b{ertK{(KUl=O{w=Yy}XS5!I3{_jc*i`F{akCx9|;G4&NY1*>*Z0V7;F| zw*58r&1rsr;dp<)*ZhOd>uPbkYm-Muk6Tele=rh5VdyOp{?4q8qz+a=(rTz(diW6e*5}^d-f#Q(;IH?d*zt1e2D=d~s2LgaVb=;$XnhP+&Ei-J)!rys%TCyJS+fmYiDzEUOz zeQgV}g`_Q}k`Er0nDx1%S1u1fc( z*RES%N^Mx1UdPcj>oGYzU;MY)QQ7C8EHlf4yu?;p3y4=`THPsSBh6DHFBxY)<5>G^ z%2C#ysbaE%w?Cq_|Iui_!e~Ff_-|9VvYWNX#ZIz>x4$de%YjDwB}RMTCkNU~#f%@( zK0~Abe987qW-W@Z%hiu>+2$8p%F*KlZ7P36NIH6PZ! zvg^ghy^gP&eO%yBRFzv|dt(!p2070XY5c?0WPo#n9A5MlA=OBNbCi;|j2tJQF3(e(Pz!S_ znI~PBggwM|eMSc^o~7$WA4rYKygaT88!#oYllxArjjTeO(6mfZf+^ibQUlc>y!5#9 z!peJxa0}eIQzyCCgZ5$@Xm_AcE zK6~ndbJ0=f=1-rEAO1i;`*L00SGejAjV|HpU*)a+nx47XX!|J~Iy`k44*hh?mQU&R z;i)6(_0!t`%jOWxCd<{zs66!5pTHQDsGFPNj%|)d?^qL)7Uk>PFfgm>yPIrHQ^U$t z3h&ypyO9p2l;8P*m-Q7z9Wmg+6*0#KVSl+C+Y7>(u3&R4Da|{a%`vFdkP#9pmZR7T zldE7;oa%=k^&8Wus#6;_wGVoxQ6u}*YL;qK?Ts2eGsxbw;nb=@;y2yx4PCz(TCWNF zjWn!DTO3xSQh1xDyPCEMuT&!pw{7C&pH&HK(`+|Y$;=qCWwO~46e@*(NUtoyTb<51U7tOM;}+45#In4rbRoYe|M$9Yv%j&q zE?#Hj|WJk5vvbET&_@Q$;S9kY^-B)`$( z05$Ld#_Vrpk2BesLcS!ZMh%K6u2F-_Vo>p9Y)7{lO;`t*$s*AdpP8P9?UVc0+c4y} zJF~>Q%d>Z%XLBf&?MR*MVazOw2oEcno#?_u^1>4F##nL(N%7-RHDHDU&>^;lm@I^s zy;pg*Ha7_}+)VDBQmN{0EI^c8g1&*kJsSFTW(M3JayJ%f`R^Nlf&{;OOUu zk6%{Q4RQ{cTx+p)t*VuokCe@Qqz+`0{<->s>vL(a+vi)2&y!I$d=AekP?#&4s&Q^)3v8u|RNA%h1F=-a1rk9HkewrJX@UfnwBNipHR#1i6F5qsDl3b!L6 zX%?)>faG#+wo0&Ay6N%4recOA22e1jB-6mc46rdDD-j_5m@lhUJxb@=Q~PrNJ}8Zc zidMvmW|F}eB)WYs)qZjC;2ATX8#DvQ_8OW|twNiYgr?|QZC z*6CgJ#~A*{6gP_hAx-*CnbL3cfJu`EeATXX!+ofp1p+O}=e(M{U5Ym!$f zqjD9sO^06X@Z^W>aMp=2V@^$Tbk4A9_ZY%xl-pMKPi7_^B=GrQ3ACi=s8JT=Q z*f_=DG~pGNQ%$}&I5a*uO=5EuzT`0JNKwP0CbC~dg%*9bEuXhVl0L#&6*IEZQrl&n zIB_DI`NeF%=~z^~sJis&AL;cXl4rG@v1;Z_HLYfY^cro-XZGmUbGx&(Y+WqF{2WM| z%K`HGz$ED=KNFvdyA(gr&X^x)=g0GlZ^`4}eoFeCpD}kvEBXBo*6)AV`W-1>k=m$5 z%nK?Hx}$uc34`u1#U}%-d|D=-RiOTb7s%l$+mP)A1=|R=t$(+Fqx3OJF=_4lHA#bCtR6U^&YmMj#Ky(;>6%^7ZmI`(1YLMPRx|qE zK;O&a*$;({0^|GGmMw(@$8Ml=m!CY#m|ee~G24~;{`O}Ob=+-+=_5^rP7d7`1}EU?xgbz zJoiHtd(*$<#Sh2gH}Ri9W30TH{Gx7U+Poal2=W(v2;am=LrjiO&P*d$iLz_i@|`MK z*{*Y^cCFX{mwc=2QO7P@Hdbxev17xE$25GMjq)NqSq&BX9NgQAL78w4zj0FkV22WW zmliMJ{y5+Q`Y`@|c{UBRVPe9WGliH9qn9NYMbqN-YQV|yiMoHg1}{GUTc56j$9?CZ zx3SNNQNxCK(c7O)eR0anPvpg~z1DfAE&SDfo3;=OUD~Hx=VztG-Mc)~Oz=0F%~hMc z9x(FkvQ^@CSBUJ2r!47<$G^l#~}qWl93Kc9aPX*h}!>zuF`RhiqA;>;Spq%qFl$grZ%q^izWNe~I7 zFRhjruc7;q@$3oC3+%B(JR7e)Io5gIAys#-Ai?-=>IF~b>2k_ua*E})Fg%m!9(Gzn zOquCSpUc^m|9t0XdI`t<@cnI>9C~H?qJ4Xo4V@oDDR!)HI09SF-~Jq1kFQq;joiQR zuO<6aBOk2QF(P{yeFJ;h7HOJm8K)rEkxpyHp3olCttaJxS3PCYjAd z>MrIs%#EIGZul@Q&*rv&sDFU)VO%Igw(z6WZ0F{dHW^&YJtQo3A~Uih|{ zUbui!;gY#?7cZSVcM&1?=npvN9^P>W+vvqRWY39{yJ^S0r%vvJ{jKkRvaN*q*M;hK&#{BJ?{^K||Ktpouu1S#-Qj zh~6fejYGO}oVEE&%O?&O(VpSrJ^c5a2LCyB(0f33^)RE6mtDWxRCD`DlbNf`mORDIP_bgbW z!0&0CT#3u%q9zjymkDu`iJ&3tZP&iz+9tL3QgBt zq!O&HrMA{bTGlFCyR@sO7ISCMIrrY-j^MVx-QTaYU+25u`ObIF_x~Q}n|nv>Gsj0F z(4aLP9ASSvHY1wtoE-yKy(7m*?>Ni{(d-jw&|JZEBS%9w3N+~4iTKbjQMX6Pvk~)= z_VY9hm3!wqK9c^~hk)_}icL1=8m=Qftuaz1zV3r%IrVyEI51dZ!>UBs{r zye=AeU643MdR3r7`{zfAEXa7?g2|cG@n`ZiawfqOXEK=Bp^lS9Yifri{vu~GkF&8j zQ-4s;hT-^(8z&h1obh~pNcJI*mv8C_eCBwMGxCni7HQnb;~im~()fzB&Fj&X$hMV} z&B@gMNz6;|E|(iG6ycpPPIQ>d%eZ({9oiE8a6DA0ruyN=rwTlft)-5@DF@_-&J!JJ z`FEZDjr;#Nmm%xd8Zje|TS1)hSxiH8pye?`#!<+`ev;<>B%VKjvf$>oF!e!wynjKy zHcRa7AXO&039mAHgnVeS`RMtO+)`!-zl6-OJr&1f@SuONGT_BVcw{5Whho&~7)I{p zCBG)UNQr!!)adteLCuKYsXXC_DSztP2)yGk^QsXu(<4O4Ys6h!VI0J2oH_kCi^naD zh8BbkDkC<@sC4!* zC4R#Yrn!u0781R2_@Oe`jAl2`o8Wr^ho{er&>ivU#Q6a;#yF3^Vg2Z~XS7eG*BK&7 zjJ7E?+NR3S6r;FtiD2JIZ+@ftm=B2@dA#1rN63-I2I9QbXg@lzX+)icvy*QGJCR7i zL@EpGpYF&qu@lD0XiL$Qf!e^Glnth~)N8b*^av}Cf?pHI!%P@QXUT@!WgGFh)Htrn zwc^H2o|gzRkhAn;EWy!?G1B0(B;qn0>ltG?hTgg0F|U!wg1!9ev*{r8jQ?R<{-*^M`kt(mzL7k7Z)o>OK)NtmmSd_ zwXu16jzi)u6l+>hc6eS}+)*`-zttc0cl5^Z)_{Z_@X<$KCnu%GjhoOno=IKD{soL7 zKd*lTZnCzLy{DUF3LI?qr)?p>qhF`c#;$Kjh>lOgx-F3$gP)Oa!bcK0$|SeoCD}ZL zeKWBf(Ry$gZ8!wTTw<}RwAx%veL`R#|Y!=)vM8OWXj%4JgN3jwlybrD`b z+9CH^xrm9`yg7zhTtHh|G1k)~LVeskWM15y*WgFYXJ}5ccDre#;;s28r9s#SnWnPc zM`iGU@2Wum1Brp2I>%WHq7#%0O6SjXK}Z~@)y6RjZ*K({AN+EN!ro$4W{7+am(wS) z^(eYMB+id<-fQ2}!`4FyM`O+=gUggJcSl1>5se2|j~c$VQp|C9l$KhY;+N!LYvVC% zxqHA;Uqxj|a>g|CZQ~}n%yW%$CcF$6*kGWh8o0ck!Zjy*6HdzkQ1e$_E6tbrHQd7& zT}@J1Li9cIe3Rj0*h^>e&&$yBw5|B%^LDmLz*79ud3J!#GWom;wJU=C zULtj~hrj7T8S=N1pXp{NOc#yp?hc}}BKLKe&Jnl)q55oL$9;o3EXHSXjE|c^Fk-MykxQ&zC!*QR2;9JD#SNr>W^lG^C6a8Lrl9>WN zYhd38o|zKa&}{e#X}QJyplChI5wEA@ix98DBwy@M(NKSEp=*BF=Yv1}t(X0$6rOI@ zmDJQ0=Wn)#`Lz5^RyAt@gpY4tV}I)HVW#BPbkvu(1O#!Iu@B7`N%qHq+^5@8=2&*o z%@uz=KrYwK6qGrd(?Spcz82Z$KF@ng#DNQ*$JX}$(?DJAXTJlBU)!*E_8SEym6g&S zTdRXs&)+(Jz<2fi>o-{zOdSLrgJ7}V#cxG%+wb45Iap2BZIAEd(7MOtb&n(Us&W?tT0xwCU$|<>VJ?-u~hWd$pJS2Ls+~*|Kv#a0!f_>seF# z%E_~BOuXjBRmvCUd%jxL(02S?CVhPZw{N_E;d=vy>!L{XPua#EwuvsM?+=Zq@7D|a zJc#QkDAy9~7?_b0YJAn*Bd>M96mw~5ODnt_%fILBZr>g z*#R~eRQ;9xn!P;$s@a^o@H%))|2zF@aFz{#A<&!C3yHlEpD|)S*o7e`j$q*pR@KAC z-hiv&O8o>j1+?I>A3sOxV}c%JLS592{7N4zhmAv9;CB5{I;^g43tdpJ=I%}mgY?g% z)E=4PPengb6QqBBc)9lx{MMIb)+reGW3; zyngXUk}7G#j~Ckz%ADPrm|l>X(FPACszOqe0-1`FCz`^F=h&4eAMJdjnOU8&DSTaG zE$-JvduoC9W-K)k>v_U3KJqQJw3!2-!@IkC^cN)1>q-xUoN95y_uuEybB7**Um!~x z_v;Iyr(eM;egkKlV$~X-SA1p( zZOPxL@O=N&8=pVA1U$MQ>EBxEz99egl69#$9A2gx9>5=HCqV|=>Ep2s_So@q-I3xB zJM5Fq@r{N6KHy+b(hSwYs$-`s%irm)mS-%op05g8wq`=Kk55=|j>=bQJF6;B-FTwp z`}{*wCKsAb1eUIL&xIsMc=)U#cU@VA2eb^$Z;9fZh4`*(j+52Qsbgp^z7)1lc$Wi~ zg%&2qSSR{#IH+8qjO?nYz8DkYv+AwV9Ve>eR|X^{26@L?1$!)C^TIN>5E!;JZn|}{ zSC&qf<+a{=dhF6PjfPz)_w`XImM;gdEO1jeJ1<#+^&-iHS4ccS?hv100NG=6xdm+} zmAiS^$v{oYr{9IM{qKdRH%ltO5)1bCaQBt>x$_TC(6(aip9sj8ho@ldhbKxhPc+7` zNyzFCAMWccEIb1&Blup9T%-@l@P7Q~GlBaKOwI)O$}N4qjYGIRB5n3dUb_x-?%&(> zQPIkXiIIMRs#Ua;`Q*aMlM+IGX3eR{+fseJ^v|X3Y^2kiv7u{&mwE+Y+d}ihpOEZN z_-oly>$}woC}C@?Y}U-%RePj$cP9gy!~H@-R{MJUP6DyugW@i;X#iFgA%A}*sJdV&i+nIJbjf%A=9?Ev@S+l z4?)@vz$^=%w`c`Q3X&^|v|(9kr3CM2s!_5WY8f>pp(az-*hZ$A%O+4Xwh>%!kty7b zC&ELtHQgXl){GeRqjX(mY9oI6;5?rdG%d%ukd4ULXjvpO0~ zFFSm=?E8|YrV_v({zS;Wq<8HS7%wMgZtFf{GEvwu;bgx&(r<5Rl zN2B>Kqxt`TOrl#;B2%_L?D~UY+s3%mfzu~$x9nM)R#o-#x-z?*@E5n`zZjvVWiO#I@FZY z(2$c?Q$x>4E8CfoSzb=|J08h4b2w%nWxq*r!3@XjBljCx@9S`DNxXR%Jkxg_Ol5C< z8-8Nd4FB@A>Sntm#rbvl#b?{wl_7TqZ=%5;9`0LqTl(4(i|Mj;#;? zc${NkWME(b;_bac_VN5SUm4^%7(n2{&3X4=^dFtSS2<%iih*1X1}2aw0AwHyi~s-t zc${NkWME*=`NzY+z*+T2=f5Lo3a69s6K} z@!3Wx=$%&}+;$X1aTc z<1|bsGB{tTGElE`F`9gf&c}Va9Y$@!BV4o8)S{j;6_S?1G2@}JJMd~P~ru1Sb`F7`r*eJH={~cy2 z*XhCo&M#>9cQGR6GIpAeu}Jq(*BQvyO{mbX^PM%=Ahx%2M^LGHvC+&ykuJtldL>q? z?RbuRH|xJ)sv3?~uK$$E!eYJ8eqZiR#!>gD#1(ARR|31=0N(F0SbP!sA%wc$e@}ct z{yTAo{!wv1B*Dx^z8#A%5+S}ghIaEB<3sFz1Gs&RHSt9fl=hD*jb`#$VxKw0So@zJ zu15poEH$8 zXIJ7yeD--+@?CPy##qe1Ht!|(lG)~TxBsD2$sFHJ*?+_}4x`4}FNg!l1Bt~@&rn`@ zhu=r_dAzLmqL#V0MP(w&yxylKU;3_5Xm`%gk2;rEOD2d)3PieNZ5r%!tq^wb#?dM-T$iY{a*FV zys4V1>8a`J>h5}dO|`oOtYxQ35*pT>VCW&e*0kcLvTbT^v(Iay^RF#a!iDf1D^khdZ5q|T%Uoqf*O$*- zEUJ5h4jUGC8t0uzZ6p$tvS|jKw}9OR$UhIZ#+h<@?Esqn6K<2G=-ZD&{yc#= zx@yPNY{q`4&P)E8C~R|o3hmaz;2it%k)TzX+4Vq3_=UxLMPFf#k$^+DK`4o|%^DTd zmp62%)XtBMt)XqQ0$iW7(Xp~lJ$a=P<@L~gZATVAno9g|{c<2OJ;EHQUc(l+ zq_g2NXzcJkbe!kU8m4h_%Y4AiE8ky`sKSzK)l<)78T=0iic*;Tt!kTZv~yf<_$A|| z;$|GA)n8u~ypY45Z+#Fdx$amUEzCAed5Ef2Rt{QoS-fGMHH(wbFLeer9M5K{{L zUHUb5JdMl@fx&+02QTgyJ(|6S~D+&={_vIE{^{v8*iIbYSJ z>w=UwRf15}>~+mu@m(+(7z6s4Kaxj)DZ{{)l9skeRMXV`*B%2l{=Ei$cO0`BO-g{7 zF=A83k&`+TJ^#$J(ZY|qXIaVgHZq*!Tq|Ai^t& za`DwT6G`z<2V*rAAPHsjBUSAh(A#H^#|1VLNNq@=oDyGeotn5U1*p6>42kT_mGUn& z4WlWsA8@6fmv>=9{j7Ij^Xhg87yiX_x^z2nIx!$7Cv=f9>et=SjcUa@?r-&tZk65y z2>IVXg>HNcS zcJ<5c_<_qzY5u3$hps)T)uDFMX5*hMl{hC#8$o65pDU6*Ug}ibs5Q~beLuoxx?FwT z|82)eSHzObJ>-7+v=QuWE!wC&1QpYM+)hJ^O!(y$`sBPy6hAB0vH#7j&R|G{M8Z@W zju^@8G~2K$S}*%4+2ILm^y$?aH_9#n@luQVh_K99&Y0f&8Tq*TctOjWzRFE+=YlXc z=5d6y!{gds{e{0O-}#z&UINa|Tuj`P_9K%p_|On$rGy7*F)l2ub}O1dd#iw)c||2< zqN;Z+_5=YOKe+4VSw0qtmnTANq_nB#nB^f#673)<56Pb(2HdFSursIP0UT-7@U!37 zkyL_nWcAF%U__Hg=lp%SU`QL&wkl?2bSSGD)({{SRnF16Z;7RBcs18_lK<=DadgEX z+dk{@jHG_KGIRzoNrYC4#=Ijq=boCdX}J;ge|QwOFTptkN@)e250zrx+A}3S z{s$Tt=fH3rG#K~KM<$8^Ypv=8$Bv9F2V-l$4 zPPwCkwh2yNUh;Da4aaXbv_sQF*cbPps?aG9tjE~#T^H0L3dAX*0^M=;=JLFtSS~^k zE|^A}3^cYkDwPpRl1Oh)PfupQHo)%3VTk}1vCvzs;IT0~upGM=n;a{oJjtSv+*n=(H50aMHXh}p zrh>(`49r@GdORhN@6q}AjB!9-O8}mHv z+6$L0m|g++3wo&E6B|>1OLQHmtPiNB+8^R*0Mx&mCqJMtC*-4u>Jf0qgFMz6Y&vG? zBCG2$`@rC+flT!lXAG(@**z5ERC~)>3*(tVFHzHtmUs66us8*^{B@ z*nWdeu}#@mIbYeHyme(`99APq9#j)5rh;>zzke}juF*Egh631F79ad zM}NL&_w4msGEv3;B%x+9ZkxykcUsS^koK*{(-Q@Qfb?3YN;*>uZH-EMeP07DgE|Ai zYhoZ_>ew>@B#;*|`XDpJJ|)W<;t*03Huu6=TjVF*J96!sNa)GrYfQHP*TKiKl~Lm&Ei(0&z1(5jt6-+coDo4H6|cPLc-AS!E`Ypy?08s*VCnlI&i-ZIHEF#~h}CV-l% zhn2)Lb3+k{Iex(d=6aS@9#op*OTz?#aOvYkht4bP`Ck}LPY-9^CJ6k3H^16pD& zgf(WQPHT>3EkcVCnjbm4_23n|L38a0|M~P8q<>@(hyU!&L6v54>fWM{lSSQl*6ircUMZ4&|hVusjDUm$k zJ?o;MBhx<2{#mGZoEJEtZ;F4&I&N&YO5Y^c!!(oh;TeMfnbvVS_cn9Dj*9GBm@It*@0|eudJO_ech5T!($@2yk|WlOVo0qk1=D2D*U*o;b7kV%Dq(T zH1|1Y->}a}9%0!Mv83LeL9g^$^56c_{+KT}7QOkCjjsf@?%DaqXhZ~M>f_q^=-%_s zc%(=9?X1wmWIlck8eKFfK{Mmw!#NWO* z_}Th}KoVW%>33*>(b3=xqpL~P}6TaHBygZFLh2>S$d|qMph?CD;T7xV?jk=KrOA2}2$*%= zQp3LnC_=PZgc(iAYN9^%CcT!9dxYrAt!Jwyqwjq)573O1`&dmHkAvQTx8 zW%D2DAJJzjUCDm7f`R~(XcrZ1(SnXrGapw1*N??=_Ptn+ABd@e-HctnhxayKkQ9H$ zyr-Ne+gjS0HvkjD`Xq_eLJ`oMRX!L6`rN{D<;2--HY_4Sj=#)Lr4g8?f9N0;p}itO6s=$B%ZVKHbxOD#{zh1j$CTYXB$@_O zTlP>~QSlWUt<|T|BGz5-{z!n}pap?S5)R(}T6Cm??br%Be@KBRJyPRM2dxl>56h)-z zS2Z+o+86!Xq#%*(Y18BrBtw}_kc{Bh36_b0Eh7YF;$`z!hBLzc#D)nq?XMZ*u0n3jfw@7@=$7ks|wrM@S z@17l+;#dS03jgS`T+&Ko?Jd5aa}nPD5|@*(Ce{aG2b?%sBqyQPo>>A@#;%XeC$4)o zCfT#JfR$Nqw}b2vb+k8xAp_aMcfOnJ0)gMs;2O~%fVifj#*%;#$O7mgC<=956h^1m zM-=A#j5Zq@Co2&U`tJjDdv|h*9q9mBiv<3aK0a4EZ2uhsQOZzc|RtreTFLl^8xy;>}ianDCznRmK3s&Wv!JjV1Vhh3OPaU7JMZu1t zlAj?zK)af?*8E1N&uceKFLQ1-Bx_NGOz&<5Jy;XBjz^`#GPaQZ1eVE0o9X^kmgz=Y zGyde4@gXP?e_qR+xeXtG8Os8(b#i~!)l9Js4S%84+_vv>y9W7CGf&FD^Aq+MIQVHaMIev2%3;`|60VbC2p3xt|pze%({2v{ScK)gDqCXlBbWcHf@}GOepgiO#+_O=q_d8;Rq@gC` zQ=Dh7D5grfI8p7tl=+SoEc;{qiTROWKhSE_Ir4f}B%olmxNX-pAknhS*FRMDGsSlJ z#e3PW6v(~{ciAtA+eH^2Wg`=jTNi$^VOra%7q%U_S{r&eVcEQibs-#&Y|g}n7fxEX zfPbA7#{$XZ-*|@;luYDDabKuIV(NCBFH9i`btw7^6-YE_$Lzuo5)VR2U1&mLk9Gog zc_0}_TYqu)LXrTRQMe}|X@IRE9C1iW!DbnbHso8u779mj1L%hGAH%Llx<~4c_pb=M zhe5|nSC6`3N5_A!?u9}D$3s`dp(6#ys4IfdVXNc0EAmj-+VS}n{w-AQc;brmcBK3G z=!)oeIP`e!isF_V`OZjbfYo3#-HDb}M3>t~m!DkFkj^eQE`zu+mxrJGu1j@FHBS|^ zvN5}w&l#HC_^q0EAKKBFU(HVsjciPI;mLuPHfFi-nL(8nbhG<8Lx|sME5La^I3^n| zsJDJ|wKZGNY|UU~W6_CLGv`r*vSsnO3M!YXcLGx%q0`WfMc!&{qe)B)YW5>MS-f7h z4hzbk(pPMK7Zg(jjRH!vbOp68?cTrzt*GCs5VCVi(5A?+^Ao&MSEC+bG2wYDcwi_ZVuwu6jK?{tPVDn8z~u6o@{|!#f8TUW9orW0;88!aR`C(SoO9p2-+! zArKfc8NCU36NW*?XaaGHxewOnhsR=`g7x_kFboM;w+>!~p#vM%A@(tZU>y)V2SW`u z03ntzkHC6I@J$QDLFaL~_5x+Pyy3tZMCG>h1!HL@5f z&B@Nbf*PhK`}x?uUdWlSt4ienC%5CKd(*_wNtO zl^jg(ILEvwTJ-}pnwu0v|FrOGG_gDYGbL`8I~TPHuKsnyvz z0VQja89h>I*{tZh}X&^>SUV1Ky?lNDV2S zl}Op*sVGrIR5NX@XtSuR?qccNfRL4E83Nt9wFP@_GhgheFHbAzyC4u1I!>hUi z$T4x9wZm2ZEz>`(IfcXG8;)&5lc^1IU5q;y)e?}t;Go&ypePAh=Sa~Uh7qb5-16ib z^%|G%(#GqVyxpKjc}K!|6B1LC651nJ&eM_}V57bZv^}HCqLkbp5y|IEe{v}5oh7=h z;hj@NqB-r;8QHK-H%NQ97<0I2pXn51uVkO5<=7CU9yt1nH%o6Z+%kQ#iV0DbLTMm_ z^KR{~)W31rH7Si^KiBo4&Zd8+{Yd`?{P?D1E-j64rrAAm5Tz z`5prl*<>JrY8t}vq|1$E$V}$|je8hC4&u8gp3JI{$0MHzKDo~@Lh}MzMl4A zwJgJwgp^TrBgJoM$KP~N1D~?LM5&UjCY37O-j{DoZLn)+3LTKKnJ+2_ue;217|?#f zBP%P@?!Jh=6$?o7L1C%T_;G$aa{MeqN^d4(B!g zzU=Ty%<~&iXj8Truy9~oUqOskyiC4l`@UXttZD(c0@8u@n>1)(eVQ zBk86J;l47wsQF{Ip}PM6U_-LI~ErfO`JRrPi;1<+T=c$80Mk80RA2%EAhLDHs{YI%Vkv{#*U> z>fd>O_3wyZ{VV?$)%>TXt{z-{ose1z^2iVmYni0{PsU~r-(_0q-EerN&;O7AM3l7; zN^Q$6_$4m;EP_sb0iwSeVmVfJxnoa<`XEB z`69&|?5cgBxN$0PTBI({o9}42_*CskyYju<>#UmO@*ysy*Z3ETv9qk4&v|1a6$%0} znLMSJP6uVT`W>O)#kH*%pk>;8(_`=W8TjUC4kGQM#Nq<_HI>HJ=V{+ahNsq#@(Lus zZUahfdKkH&o5 z#(|EFxZ6%S6~=FAiw9`D(~{IwIqUCi%Wx`59F=7RoL|qS(973x-1R&E%hS}-+1OHg zB_kNW$23#kaj2fS*I`ce>AI}9b|jxt@)mK~p=p#VwW4w8KC^gSU@FDcGMi>4m)-Ka z)@Je63mAyZJl0bMF^bvg)6g${lZnQ-)}Ct5?KpkP>0EG4Pi7MH*H7Q#j5pkeQFcwN z*(T)aS9mWMPqDfgTpEJfv*91(FB?s2OHB?-2e?J12h3X}Tt5oZEd8ASC}v38a`{i- zLl!>H%}@57kl!+}prx@AY0t1Z%uk52%s7?Xr+xFC@(#_p%ufk!R%KNQ(6?E{wSI)Jc%jP2i%C4pnk-YBn&Ru|22Xnd!e-<)-a z@3MP)7l=co&iKeu;Ld|s@>O(5XrLLIw|au2mMHxRUFLSqTNr*dI|@rbd6|C1Hy#pk zX5CaEWFnyqYIDSrQOa<95)?r6^H4TvjC!nm&zpKF*7qtcXM?QEF|xfSJ!iv(cT1Bw zhwmC5}d Px(au99^B`?d)|KoCoz{7 literal 0 HcmV?d00001 diff --git a/client/components/share/Dialog.vue b/client/components/share/Dialog.vue new file mode 100644 index 0000000..7a93bac --- /dev/null +++ b/client/components/share/Dialog.vue @@ -0,0 +1,80 @@ + + + + + \ No newline at end of file diff --git a/client/components/share/Notify.vue b/client/components/share/Notify.vue new file mode 100644 index 0000000..92c3759 --- /dev/null +++ b/client/components/share/Notify.vue @@ -0,0 +1,58 @@ + + + diff --git a/client/components/share/StdDialog.vue b/client/components/share/StdDialog.vue new file mode 100644 index 0000000..384585d --- /dev/null +++ b/client/components/share/StdDialog.vue @@ -0,0 +1,361 @@ + + + + + \ No newline at end of file diff --git a/client/components/vueComponent.js b/client/components/vueComponent.js new file mode 100644 index 0000000..67f8c2e --- /dev/null +++ b/client/components/vueComponent.js @@ -0,0 +1,52 @@ +import { defineComponent } from 'vue'; +import _ from 'lodash'; + +export default function(componentClass) { + const comp = {}; + const obj = new componentClass(); + + //data, options, props + const data = {}; + for (const prop of Object.getOwnPropertyNames(obj)) { + if (['_options', '_props'].includes(prop)) {//meta props + if (prop === '_options') { + const options = obj[prop]; + for (const optName of ['components', 'watch', 'emits']) { + if (options[optName]) { + comp[optName] = options[optName]; + } + } + } else if (prop === '_props') { + comp['props'] = obj[prop]; + } + } else {//usual prop + data[prop] = obj[prop]; + } + } + comp.data = () => _.cloneDeep(data); + + //methods + const classProto = Object.getPrototypeOf(obj); + const classMethods = Object.getOwnPropertyNames(classProto); + const methods = {}; + const computed = {}; + for (const method of classMethods) { + const desc = Object.getOwnPropertyDescriptor(classProto, method); + if (desc.get) {//has getter, computed + computed[method] = {get: desc.get}; + if (desc.set) + computed[method].set = desc.set; + } else if ( ['beforeCreate', 'created', 'beforeMount', 'mounted', 'beforeUpdate', 'updated', 'activated',//life cycle hooks + 'deactivated', 'beforeUnmount', 'unmounted', 'errorCaptured', 'renderTracked', 'renderTriggered',//life cycle hooks + 'setup'].includes(method) ) { + comp[method] = obj[method]; + } else if (method !== 'constructor') {//usual + methods[method] = obj[method]; + } + } + comp.methods = methods; + comp.computed = computed; + + //console.log(comp); + return defineComponent(comp); +} diff --git a/client/index.html.template b/client/index.html.template new file mode 100644 index 0000000..7f9a5e9 --- /dev/null +++ b/client/index.html.template @@ -0,0 +1,11 @@ + + + + + + + + +

+ + diff --git a/client/main.js b/client/main.js new file mode 100644 index 0000000..a00b092 --- /dev/null +++ b/client/main.js @@ -0,0 +1,16 @@ +import { createApp } from 'vue'; + +import router from './router'; +import store from './store'; +import q from './quasar'; + +import App from './components/App.vue'; + +const app = createApp(App); + +app.use(router); +app.use(store); +app.use(q.quasar, q.options); +q.init(); + +app.mount('#app'); diff --git a/client/quasar.js b/client/quasar.js new file mode 100644 index 0000000..0702203 --- /dev/null +++ b/client/quasar.js @@ -0,0 +1,97 @@ +import 'quasar/dist/quasar.css'; + +import Quasar from 'quasar/src/vue-plugin.js'; +//config +const config = {}; + +//components +//import {QLayout} from 'quasar/src/components/layout'; +//import {QPageContainer, QPage} from 'quasar/src/components/page'; +//import {QDrawer} from 'quasar/src/components/drawer'; + +//import {QCircularProgress} from 'quasar/src/components/circular-progress'; +import {QInput} from 'quasar/src/components/input'; +import {QBtn} from 'quasar/src/components/btn'; +//import {QBtnGroup} from 'quasar/src/components/btn-group'; +//import {QBtnToggle} from 'quasar/src/components/btn-toggle'; +import {QIcon} from 'quasar/src/components/icon'; +//import {QSlider} from 'quasar/src/components/slider'; +//import {QTabs, QTab} from 'quasar/src/components/tabs'; +//import {QTabPanels, QTabPanel} from 'quasar/src/components/tab-panels'; +//import {QSeparator} from 'quasar/src/components/separator'; +//import {QList} from 'quasar/src/components/item'; +//import {QItem, QItemSection, QItemLabel} from 'quasar/src/components/item'; +//import {QTooltip} from 'quasar/src/components/tooltip'; +//import {QSpinner} from 'quasar/src/components/spinner'; +//import {QTable, QTh, QTr, QTd} from 'quasar/src/components/table'; +//import {QCheckbox} from 'quasar/src/components/checkbox'; +//import {QSelect} from 'quasar/src/components/select'; +//import {QColor} from 'quasar/src/components/color'; +//import {QPopupProxy} from 'quasar/src/components/popup-proxy'; +import {QDialog} from 'quasar/src/components/dialog'; +//import {QChip} from 'quasar/src/components/chip'; +//import {QTree} from 'quasar/src/components/tree'; +//import {QVirtualScroll} from 'quasar/src/components/virtual-scroll'; + +//import {QExpansionItem} from 'quasar/src/components/expansion-item'; + +const components = { + //QLayout, + //QPageContainer, QPage, + //QDrawer, + + //QCircularProgress, + QInput, + QBtn, + //QBtnGroup, + //QBtnToggle, + QIcon, + //QSlider, + //QTabs, QTab, + //QTabPanels, QTabPanel, + //QSeparator, + //QList, + //QItem, QItemSection, QItemLabel, + //QTooltip, + //QSpinner, + //QTable, QTh, QTr, QTd, + //QCheckbox, + //QSelect, + //QColor, + //QPopupProxy, + QDialog, + //QChip, + //QTree, + //QExpansionItem, + //QVirtualScroll, +}; + +//directives +//import Ripple from 'quasar/src/directives/Ripple'; +import ClosePopup from 'quasar/src/directives/ClosePopup'; + +const directives = {/*Ripple, */ClosePopup}; + +//plugins +//import AppFullscreen from 'quasar/src/plugins/AppFullscreen'; +//import Notify from 'quasar/src/plugins/Notify'; + +const plugins = { + //AppFullscreen, + //Notify, +}; + +//icons +//import '@quasar/extras/fontawesome-v5/fontawesome-v5.css'; +//import fontawesomeV5 from 'quasar/icon-set/fontawesome-v5.js' + +import '@quasar/extras/line-awesome/line-awesome.css'; +import lineAwesome from 'quasar/icon-set/line-awesome.js' + +export default { + quasar: Quasar, + options: { config, components, directives, plugins }, + init: () => { + Quasar.iconSet.set(lineAwesome); +} +}; \ No newline at end of file diff --git a/client/router.js b/client/router.js new file mode 100644 index 0000000..3fb73bb --- /dev/null +++ b/client/router.js @@ -0,0 +1,38 @@ +import { createRouter, createWebHashHistory } from 'vue-router'; +import _ from 'lodash'; + +const Search = () => import('./components/Search/Search.vue'); + +const myRoutes = [ + ['/', Search], + ['/:pathMatch(.*)*', null, null, '/'], +]; + +let routes = {}; + +for (let route of myRoutes) { + const [path, component, name, redirect] = route; + let cleanRoute = _.pickBy({path, component, name, redirect}, _.identity); + + let parts = cleanRoute.path.split('~'); + let f = routes; + for (let part of parts) { + const curRoute = _.assign({}, cleanRoute, { path: part }); + + if (!f.children) + f.children = []; + let r = f.children; + + f = _.find(r, {path: part}); + if (!f) { + r.push(curRoute); + f = curRoute; + } + } +} +routes = routes.children; + +export default createRouter({ + history: createWebHashHistory(), + routes +}); diff --git a/client/share/utils.js b/client/share/utils.js new file mode 100644 index 0000000..3fe79a0 --- /dev/null +++ b/client/share/utils.js @@ -0,0 +1,30 @@ +//import _ from 'lodash'; + +export function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + +export function keyEventToCode(event) { + let result = []; + let code = event.code; + + const modCode = code.substring(0, 3); + if (event.metaKey && modCode != 'Met') + result.push('Meta'); + if (event.ctrlKey && modCode != 'Con') + result.push('Ctrl'); + if (event.shiftKey && modCode != 'Shi') + result.push('Shift'); + if (event.altKey && modCode != 'Alt') + result.push('Alt'); + + if (modCode == 'Dig') { + code = code.substring(5, 6); + } else if (modCode == 'Key') { + code = code.substring(3, 4); + } + result.push(code); + + return result.join('+'); +} + diff --git a/client/store/index.js b/client/store/index.js new file mode 100644 index 0000000..06cace6 --- /dev/null +++ b/client/store/index.js @@ -0,0 +1,15 @@ +import { createStore } from 'vuex'; +import VuexPersistence from 'vuex-persist'; + +import root from './root.js'; + +const debug = process.env.NODE_ENV !== 'production'; + +const vuexLocal = new VuexPersistence(); + +export default createStore(Object.assign({}, root, { + modules: { + }, + strict: debug, + plugins: [vuexLocal.plugin] +})); diff --git a/client/store/root.js b/client/store/root.js new file mode 100644 index 0000000..1cd73ad --- /dev/null +++ b/client/store/root.js @@ -0,0 +1,25 @@ +// initial state +const state = { + apiError: null, +}; + +// getters +const getters = {}; + +// actions +const actions = {}; + +// mutations +const mutations = { + setApiError(state, value) { + state.apiError = value; + }, +}; + +export default { + namespaced: true, + state, + getters, + actions, + mutations +}; diff --git a/server/config/base.js b/server/config/base.js index 72d1c28..644f024 100644 --- a/server/config/base.js +++ b/server/config/base.js @@ -2,7 +2,7 @@ const path = require('path'); const pckg = require('../../package.json'); const execDir = path.resolve(__dirname, '..'); -const dataDir = `${execDir}/.${pckg.name}/data`; +const dataDir = `${execDir}/.${pckg.name}`; module.exports = { branch: 'unknown', diff --git a/server/config/production.js b/server/config/production.js index fd4a516..e649161 100644 --- a/server/config/production.js +++ b/server/config/production.js @@ -3,7 +3,7 @@ const pckg = require('../../package.json'); const base = require('./base'); const execDir = path.dirname(process.execPath); -const dataDir = `${execDir}/.${pckg.name}/data`; +const dataDir = `${execDir}/.${pckg.name}`; module.exports = Object.assign({}, base, { branch: 'production', diff --git a/server/dev.js b/server/dev.js index 1ae2dfb..d652348 100644 --- a/server/dev.js +++ b/server/dev.js @@ -20,7 +20,7 @@ function webpackDevMiddleware(app) { function logQueries(app) { app.use(function(req, res, next) { const start = Date.now(); - log(`${req.method} ${req.originalUrl} ${JSON.stringify(req.body).substr(0, 4000)}`); + log(`${req.method} ${req.originalUrl} ${JSON.stringify(req.body ? req.body : '').substr(0, 4000)}`); //log(`${JSON.stringify(req.headers, null, 2)}`) res.once('finish', () => { log(`${Date.now() - start}ms`); diff --git a/server/index.js b/server/index.js index d9473e4..e02a7ef 100644 --- a/server/index.js +++ b/server/index.js @@ -105,6 +105,17 @@ async function main() { function initStatic(app, config) {// eslint-disable-line //загрузка файлов в /files //TODO + + app.use(express.static(config.publicDir, { + maxAge: '30d', + + /*setHeaders: (res, filePath) => { + if (path.dirname(filePath) == filesDir) { + res.set('Content-Type', 'application/xml'); + res.set('Content-Encoding', 'gzip'); + } + },*/ + })); } (async() => { From f5ca8155b481b8bdd4bb697e8510d2f2edbe8ba1 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 16 Aug 2022 15:35:13 +0700 Subject: [PATCH 003/177] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BC=D0=B8=D0=BD=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8=20nod?= =?UTF-8?q?e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index c923da0..2418411 100644 --- a/package-lock.json +++ b/package-lock.json @@ -56,7 +56,7 @@ "webpack-merge": "^5.8.0" }, "engines": { - "node": ">=14.4.0" + "node": ">=16.16.0" } }, "node_modules/@ampproject/remapping": { diff --git a/package.json b/package.json index 1ad29ee..d0cfa7b 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "license": "CC0-1.0", "repository": "bookpauk/inpx-web", "engines": { - "node": ">=14.4.0" + "node": ">=16.16.0" }, "scripts": { "dev": "nodemon --inspect --ignore server/.inpx-web --ignore client --exec 'node server --lib-dir=.inpx-web/lib'", From 1dd5d4e2f8cdc010ae64456c240bf12d5d08b30d Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 16 Aug 2022 15:35:53 +0700 Subject: [PATCH 004/177] jembadb 4.0.0 --- package-lock.json | 16 ++++++++-------- package.json | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2418411..fc4eb57 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "compression": "^1.7.4", "express": "^4.18.1", "fs-extra": "^10.1.0", - "jembadb": "^3.0.10", + "jembadb": "^4.0.0", "localforage": "^1.10.0", "lodash": "^4.17.21", "minimist": "^1.2.6", @@ -5102,11 +5102,11 @@ } }, "node_modules/jembadb": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/jembadb/-/jembadb-3.0.10.tgz", - "integrity": "sha512-XA9o+jyl6U1fGwwSyMqAD9n7oY5MajS4DozXfdi9/Mrh7PH9gx6hRpFpcoGltb/WnP7qtfiD7bf+WH9pDkqfbg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jembadb/-/jembadb-4.0.0.tgz", + "integrity": "sha512-FLOL1uBhtUSOy/NngbzIsKSHaM6DISSNHpCT+NApsPj1ExCWnXsym0rs9TJum75Hdu48HP34UUtfQKyFo2Sseg==", "engines": { - "node": ">=14.4.0" + "node": ">=16.16.0" } }, "node_modules/jest-worker": { @@ -12564,9 +12564,9 @@ "dev": true }, "jembadb": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/jembadb/-/jembadb-3.0.10.tgz", - "integrity": "sha512-XA9o+jyl6U1fGwwSyMqAD9n7oY5MajS4DozXfdi9/Mrh7PH9gx6hRpFpcoGltb/WnP7qtfiD7bf+WH9pDkqfbg==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jembadb/-/jembadb-4.0.0.tgz", + "integrity": "sha512-FLOL1uBhtUSOy/NngbzIsKSHaM6DISSNHpCT+NApsPj1ExCWnXsym0rs9TJum75Hdu48HP34UUtfQKyFo2Sseg==" }, "jest-worker": { "version": "27.5.1", diff --git a/package.json b/package.json index d0cfa7b..b83297f 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "compression": "^1.7.4", "express": "^4.18.1", "fs-extra": "^10.1.0", - "jembadb": "^3.0.10", + "jembadb": "^4.0.0", "localforage": "^1.10.0", "lodash": "^4.17.21", "minimist": "^1.2.6", From 69667a34468ac52587efb2eafc6eab1c8c0b3970 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 16 Aug 2022 16:52:09 +0700 Subject: [PATCH 005/177] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20node-stream-zip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 18 ++++++++++++++++++ package.json | 1 + 2 files changed, 19 insertions(+) diff --git a/package-lock.json b/package-lock.json index fc4eb57..0e9177f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "localforage": "^1.10.0", "lodash": "^4.17.21", "minimist": "^1.2.6", + "node-stream-zip": "^1.15.0", "quasar": "^2.7.5", "vue": "^3.2.37", "vue-router": "^4.1.2", @@ -5715,6 +5716,18 @@ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, + "node_modules/node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "engines": { + "node": ">=0.12.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/antelle" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -13023,6 +13036,11 @@ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", "dev": true }, + "node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==" + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", diff --git a/package.json b/package.json index b83297f..9d2b6a0 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "localforage": "^1.10.0", "lodash": "^4.17.21", "minimist": "^1.2.6", + "node-stream-zip": "^1.15.0", "quasar": "^2.7.5", "vue": "^3.2.37", "vue-router": "^4.1.2", From 16e10a84ce3f34a754698526466b19b59b613500 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 16 Aug 2022 17:34:17 +0700 Subject: [PATCH 006/177] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D1=8F=20zip-=D0=B0?= =?UTF-8?q?=D1=80=D1=85=D0=B8=D0=B2=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/ZipReader.js | 57 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 server/core/ZipReader.js diff --git a/server/core/ZipReader.js b/server/core/ZipReader.js new file mode 100644 index 0000000..4103cb3 --- /dev/null +++ b/server/core/ZipReader.js @@ -0,0 +1,57 @@ +const StreamZip = require('node-stream-zip'); + +class ZipReader { + constructor() { + this.zip = null; + } + + checkState() { + if (!this.zip) + throw new Error('Zip closed'); + } + + async open(zipFile) { + if (this.zip) + throw new Error('Zip file already open'); + + const zip = new StreamZip.async({file: zipFile}); + + this.zipEntries = await zip.entries(); + + this.zip = zip; + } + + get entries() { + this.checkState(); + + return this.zipEntries; + } + + async extractToBuf(entryFilePath) { + this.checkState(); + + return await this.zip.entryData(entryFilePath); + } + + async extractToFile(entryFilePath, outputFile) { + this.checkState(); + + await this.zip.extract(entryFilePath, outputFile); + } + + async extractAllToDir(outputDir) { + this.checkState(); + + await this.zip.extract(null, outputDir); + } + + close() { + if (this.zip) { + this.zip.close(); + this.zip = null; + this.zipEntries = null; + } + } +} + +module.exports = ZipReader; \ No newline at end of file From 50ea7a5ca77ed4ec40ba8f5d7b799b74aee0a94e Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 16 Aug 2022 18:34:03 +0700 Subject: [PATCH 007/177] =?UTF-8?q?=D0=9C=D0=B5=D0=BB=D0=BA=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/ZipReader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/core/ZipReader.js b/server/core/ZipReader.js index 4103cb3..5b9a128 100644 --- a/server/core/ZipReader.js +++ b/server/core/ZipReader.js @@ -12,7 +12,7 @@ class ZipReader { async open(zipFile) { if (this.zip) - throw new Error('Zip file already open'); + throw new Error('Zip file is already open'); const zip = new StreamZip.async({file: zipFile}); From 2948cfdc27d9f1fd5afa8a0179aec29d985b4be3 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 16 Aug 2022 18:34:16 +0700 Subject: [PATCH 008/177] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D0=BE=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D0=BD=D0=B0=D0=B4=20Inp?= =?UTF-8?q?xParser?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/InpxParser.js | 83 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 server/core/InpxParser.js diff --git a/server/core/InpxParser.js b/server/core/InpxParser.js new file mode 100644 index 0000000..88c2f71 --- /dev/null +++ b/server/core/InpxParser.js @@ -0,0 +1,83 @@ +const path = require(path); +const ZipReader = require('./ZipReader'); + +const collectionInfo = 'collection.info'; +const structureInfo = 'structure.info'; +const versionInfo = 'version.info'; + +const defaultStructure = 'AUTHOR;GENRE;TITLE;SERIES;SERNO;FILE;SIZE;LIBID;DEL;EXT;DATE;LANG;LIBRATE;KEYWORDS'; + +class InpxParser { + constructor() { + this.info = {}; + } + + async safeExtractToString(zipReader, fileName) { + let result = ''; + + try { + result = await zipReader.extractToBuf(fileName).toString(); + } catch (e) { + //quiet + } + return result.trim(); + } + + async parse(inpxFile, readFileCallback, parsedCallback) { + if (!readFileCallback) + readFileCallback = async() => {}; + + if (!parsedCallback) + parsedCallback = async() => {}; + + + const zipReader = new ZipReader(); + await zipReader.open(inpxFile); + + try { + const info = this.info; + + //info + await readFileCallback(collectionInfo); + info.collection = await this.safeExtractToString(zipReader, collectionInfo); + + await readFileCallback(structureInfo); + info.structure = await this.safeExtractToString(zipReader, structureInfo); + + await readFileCallback(versionInfo); + info.version = await this.safeExtractToString(zipReader, versionInfo); + + //structure + let inpxStructure = info.structure; + if (!inpxStructure) + inpxStructure = defaultStructure; + inpxStructure = inpxStructure.toLowerCase(); + const structure = inpxStructure.split(';'); + + //inp-файлы + let chunk = []; + const entries = Object.values(zipReader.entries); + for (const entry of entries) { + if (!entry.isDirectory && path.extname(entry.name) == '.inp') { + + await readFileCallback(entry.name); + const buf = await zipReader.extractToBuf(entry.name); + chunk.push(this.parseInp(buf, structure)); + } + } + } finally { + zipReader.close(); + } + } + + parseInp(inpBuf, structure) { + const rows = inpBuf.toString().split('\n'); + console.log(rows); + } + + get info() { + return this.info; + } +} + +module.exports = InpxParser; \ No newline at end of file From eddfde141e3261c1066b8198b414b3a4544c0dff Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 16 Aug 2022 20:27:04 +0700 Subject: [PATCH 009/177] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20InpxParser?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/InpxParser.js | 67 +++++++++++++++++++++++++++++++++------ 1 file changed, 57 insertions(+), 10 deletions(-) diff --git a/server/core/InpxParser.js b/server/core/InpxParser.js index 88c2f71..532e8f6 100644 --- a/server/core/InpxParser.js +++ b/server/core/InpxParser.js @@ -1,4 +1,4 @@ -const path = require(path); +const path = require('path'); const ZipReader = require('./ZipReader'); const collectionInfo = 'collection.info'; @@ -9,18 +9,18 @@ const defaultStructure = 'AUTHOR;GENRE;TITLE;SERIES;SERNO;FILE;SIZE;LIBID;DEL;EX class InpxParser { constructor() { - this.info = {}; + this.inpxInfo = {}; } async safeExtractToString(zipReader, fileName) { let result = ''; try { - result = await zipReader.extractToBuf(fileName).toString(); + result = (await zipReader.extractToBuf(fileName)).toString().trim(); } catch (e) { //quiet } - return result.trim(); + return result; } async parse(inpxFile, readFileCallback, parsedCallback) { @@ -35,7 +35,7 @@ class InpxParser { await zipReader.open(inpxFile); try { - const info = this.info; + const info = this.inpxInfo; //info await readFileCallback(collectionInfo); @@ -55,14 +55,14 @@ class InpxParser { const structure = inpxStructure.split(';'); //inp-файлы - let chunk = []; const entries = Object.values(zipReader.entries); for (const entry of entries) { if (!entry.isDirectory && path.extname(entry.name) == '.inp') { await readFileCallback(entry.name); const buf = await zipReader.extractToBuf(entry.name); - chunk.push(this.parseInp(buf, structure)); + + await this.parseInp(buf, structure, parsedCallback); } } } finally { @@ -70,13 +70,60 @@ class InpxParser { } } - parseInp(inpBuf, structure) { + async parseInp(inpBuf, structure, parsedCallback) { + const structLen = structure.length; const rows = inpBuf.toString().split('\n'); - console.log(rows); + + let chunk = []; + for (const row of rows) { + let line = row; + if (!line) + continue; + + if (line[line.length - 1] == '\x0D') + line = line.substring(0, line.length - 1); + + //парсим запись + const parts = line.split('\x04'); + const rec = {}; + + const len = (parts.length > structLen ? structLen : parts.length); + for (let i = 0; i < len; i++) { + if (structure[i]) + rec[structure[i]] = parts[i]; + } + + //специальная обработка некоторых полей + if (rec.author) { + rec.author = rec.author.split(':').map(s => s.replace(/,/g, ' ').trim()).filter(s => s).join(','); + } + + if (rec.genre) { + rec.genre = rec.genre.split(':').filter(s => s).join(','); + } + + rec.serno = parseInt(rec.serno, 10) || 0; + rec.size = parseInt(rec.size, 10) || 0; + rec.del = parseInt(rec.del, 10) || 0; + rec.insno = parseInt(rec.insno, 10) || 0; + rec.librate = parseInt(rec.librate, 10) || 0; + + //пушим + chunk.push(rec); + + if (chunk.length >= 10000) { + await parsedCallback(chunk); + chunk = []; + } + } + + if (chunk.length) { + await parsedCallback(chunk); + } } get info() { - return this.info; + return this.inpxInfo; } } From 8a4164922fae99c81c5497658aa92e70d906ee1f Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Tue, 16 Aug 2022 23:18:16 +0700 Subject: [PATCH 010/177] =?UTF-8?q?=D0=A4=D0=B0=D0=B9=D0=BB=20=D0=B6=D0=B0?= =?UTF-8?q?=D0=BD=D1=80=D0=BE=D0=B2=20=D0=B8=D0=B7=20MHL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/Genres/genres.json | 279 +++++++++++++++++++++++++++++++++ 1 file changed, 279 insertions(+) create mode 100644 server/core/Genres/genres.json diff --git a/server/core/Genres/genres.json b/server/core/Genres/genres.json new file mode 100644 index 0000000..f0f5d1a --- /dev/null +++ b/server/core/Genres/genres.json @@ -0,0 +1,279 @@ +" +#---------- Список жанров fb2 ---------- +0.1 Фантастика +0.2 Детективы и Триллеры +0.3 Проза +0.4 Любовные романы +0.5 Приключения +0.6 Литература для детей +0.7 Религия, духовность, эзотерика +0.8 Поэзия +0.9 Драматургия +0.10 Старинное +0.11 Фольклор +0.12 Наука, Образование +0.13 Искусство, Искусствоведение, Дизайн +0.14 Техника +0.15 Компьютеры и Интернет +0.16 Справочная литература +0.17 Документальная литература +0.18 Юмор +0.19 Дом и семья +0.20 Прочее +0.21 Деловая литература +0.22 Учебники и пособия +0.0 Неотсортированное +#---------- 0.1 Фантастика ---------- +0.1.1 sf_history;Альтернативная история, попаданцы +0.1.2 sf_action;Боевая фантастика +0.1.3 sf_epic;Эпическая фантастика +0.1.4 sf_heroic;Героическая фантастика +0.1.5 sf_detective;Детективная фантастика +0.1.6 sf_cyberpunk;Киберпанк +0.1.7 sf_space;Космическая фантастика +0.1.8 sf_social;Социально-психологическая фантастика +0.1.9 sf_horror;Ужасы +0.1.10 sf_humor;Юмористическая фантастика +0.1.11 sf_fantasy;Фэнтези +0.1.12 sf;Научная Фантастика +0.1.124 sf_fantasy_city;Городское фэнтези +0.1.131 sf_postapocalyptic;Постапокалипсис +0.1.253 sf_litrpg;ЛитРПГ +0.1.226 sf_etc;Фантастика +0.1.227 russian_fantasy;Славянское фэнтези +0.1.228 sf_technofantasy;Технофэнтези +0.1.229 fairy_fantasy;Мифологическое фэнтези +0.1.230 hronoopera;Хроноопера +0.1.231 sf_mystic;Мистика +0.1.232 sf_stimpank;Стимпанк +0.1.233 modern_tale;Современная сказка +0.1.234 popadancy;Попаданцы +#---------- 0.2 Детективы и Триллеры ---------- +0.2.13 det_classic;Классический детектив +0.2.14 det_police;Полицейский детектив +0.2.15 det_action;Боевик +0.2.16 det_irony;Иронический детектив, дамский детективный роман +0.2.17 det_history;Исторический детектив +0.2.18 det_espionage;Шпионский детектив +0.2.19 det_crime;Криминальный детектив +0.2.20 det_political;Политический детектив +0.2.21 det_maniac;Про маньяков +0.2.22 det_hard;Крутой детектив +0.2.23 thriller;Триллер +0.2.24 detective;Детективы +0.2.154 det_su;Советский детектив +#---------- 0.3 Проза ---------- +0.3.25 prose;Проза +0.3.26 prose_classic;Классическая проза +0.3.27 prose_history;Историческая проза +0.3.28 prose_contemporary;Современная русская и зарубежная проза +0.3.29 prose_counter;Контркультура +0.3.30 prose_rus_classic;Русская классическая проза +0.3.31 prose_su_classics;Советская классическая проза +0.3.130 prose_military;Проза о войне +0.3.197 foreign_prose;Зарубежная классическая проза +0.3.198 foreign_antique;Средневековая классическая проза +0.3.199 literature_18;Классическая проза XVII-XVIII веков +0.3.200 literature_19;Классическая проза ХIX века +0.3.201 literature_20;Классическая проза ХX века +0.3.202 gothic_novel;Готический роман +0.3.203 prose_magic;Магический реализм +0.3.204 epistolary_fiction;Эпистолярная проза +0.3.205 prose_neformatny;Экспериментальная, неформатная проза +0.3.206 aphorisms;Афоризмы, цитаты +0.3.207 great_story;Роман, повесть +0.3.208 story;Малые литературные формы прозы: рассказы, эссе, новеллы, феерия +0.3.209 prose_abs;Фантасмагория, абсурдистская проза +#---------- 0.4 Любовные романы ---------- +0.4.32 love_contemporary;Современные любовные романы +0.4.33 love_history;Исторические любовные романы +0.4.34 love_detective;Остросюжетные любовные романы +0.4.35 love_short;Короткие любовные романы +0.4.36 love_erotica;Эротическая литература +0.4.37 love;Любовные романы +0.4.148 love_sf;Любовное фэнтези, любовно-фантастические романы +0.4.167 love_hard;Порно +#---------- 0.5 Приключения ---------- +0.5.39 adv_history;Исторические приключения +0.5.40 adv_indian;Вестерн, про индейцев +0.5.41 adv_maritime;Морские приключения +0.5.42 adv_geo;Путешествия и география +0.5.43 adv_animal;Природа и животные +0.5.44 adventure;Приключения +0.5.50 child_adv;Приключения для детей и подростков +0.5.194 adv_modern;Приключения в современном мире +0.5.195 tale_chivalry;Рыцарский роман +0.5.196 adv_story;Авантюрный роман +#---------- 0.6 Литература для детей ---------- +0.6.45 child_tale;Сказки народов мира +0.6.46 child_verse;Стихи для детей +0.6.47 child_prose;Проза для детей +0.6.48 child_sf;Фантастика для детей +0.6.49 child_det;Детская остросюжетная литература +0.6.51 child_education;Детская образовательная литература +0.6.52 children;Детская литература +0.6.155 child_classical;Классическая детская литература +0.6.156 child_tale_rus;Русские сказки +0.6.157 foreign_children;Зарубежная литература для детей +0.6.158 prose_game;Игры, упражнения для детей +#---------- 0.7 Религия, духовность, эзотерика ---------- +0.7.128 religion_budda;Буддизм +0.7.64 sci_religion;Религиоведение +0.7.95 religion_esoterics;Эзотерика, эзотерическая литература +0.7.96 religion_self;Самосовершенствование +0.7.97 religion;Религия, религиозная литература +0.7.214 religion_christianity;Христианство +0.7.215 religion_orthodoxy;Православие +0.7.216 religion_protestantism;Протестантизм +0.7.217 religion_catholicism;Католицизм +0.7.218 religion_judaism;Иудаизм +0.7.219 religion_hinduism;Индуизм +0.7.220 religion_islam;Ислам +0.7.221 religion_paganism;Язычество +0.7.222 astrology;Астрология и хиромантия +#---------- 0.8 Поэзия ---------- +0.8.53 poetry;Поэзия +0.8.100 humor_verse;Юмористические стихи, басни +0.8.183 poetry_classical;Классическая поэзия +0.8.184 poetry_modern;Современная поэзия +0.8.185 poetry_rus_classical;Классическая русская поэзия +0.8.186 poetry_rus_modern;Современная русская поэзия +0.8.187 poetry_for_classical;Классическая зарубежная поэзия +0.8.188 poetry_for_modern;Современная зарубежная поэзия +0.8.189 poetry_east;Поэзия Востока +0.8.190 lyrics;Лирика +0.8.191 song_poetry;Песенная поэзия +0.8.192 poem;Поэма, эпическая поэзия +0.8.193 palindromes;Визуальная и экспериментальная поэзия, верлибры, палиндромы +#---------- 0.9 Драматургия ---------- +0.9.54 dramaturgy;Драматургия +0.9.177 comedy;Комедия +0.9.178 tragedy;Трагедия +0.9.179 drama;Драма +0.9.180 drama_antique;Античная драма +0.9.181 screenplays;Сценарий +0.9.182 vaudeville;Мистерия, буффонада, водевиль +#---------- 0.10 Старинное ---------- +0.10.55 antique_ant;Античная литература +0.10.56 antique_european;Европейская старинная литература +0.10.57 antique_russian;Древнерусская литература +0.10.58 antique_east;Древневосточная литература +0.10.60 antique;antique +#---------- 0.11 Фольклор ---------- +0.11.59 antique_myths;Мифы. Легенды. Эпос +0.11.235 folklore;Фольклор, загадки folklore +0.11.236 folk_tale;Народные сказки +0.11.237 epic;Былины, эпопея +0.11.238 proverbs;Пословицы, поговорки +0.11.239 folk_songs;Народные песни +0.11.240 child_folklore;Детский фольклор +0.11.241 limerick;Частушки, прибаутки, потешки +#---------- 0.12 Наука, Образование ---------- +0.12.61 sci_history;История +0.12.62 sci_psychology;Психология и психотерапия +0.12.65 sci_philosophy;Философия +0.12.66 sci_politics;Политика +0.12.68 sci_juris;Юриспруденция +0.12.69 sci_linguistic;Языкознание, иностранные языки +0.12.70 sci_medicine;Медицина +0.12.71 sci_phys;Физика +0.12.72 sci_math;Математика +0.12.73 sci_chem;Химия +0.12.74 sci_biology;Биология, биофизика, биохимия +0.12.76 science;Научная литература +0.12.126 sci_cosmos;Астрономия и Космос +0.12.125 sci_geo;Геология и география +0.12.122 sci_state;Государство и право +0.12.121 sci_economy;Экономика +0.12.149 sci_medicine_alternative;Альтернативная медицина +0.12.150 sci_philology;Литературоведение +0.12.168 sci_popular;Зарубежная образовательная литература, зарубежная прикладная, научно-популярная литература +0.12.169 military_history;Военная история +0.12.170 sci_social_studies;Обществознание, социология +0.12.171 sci_zoo;Зоология +0.12.172 sci_botany;Ботаника +0.12.173 sci_ecology;Экология +0.12.174 sci_oriental;Востоковедение +0.12.175 sci_theories;Альтернативные науки и научные теории +0.12.176 sci_veterinary;Ветеринария +#---------- 0.13 Искусство, Искусствоведение, Дизайн ---------- +0.13.63 sci_culture;Культурология +0.13.127 notes;Партитуры +0.13.91 nonf_criticism;Критика +0.13.92 design;Искусство и Дизайн +0.13.242 music;Музыка +0.13.243 painting;Живопись, альбомы, иллюстрированные каталоги +0.13.244 architecture_book;Скульптура и архитектура +0.13.245 art_world_culture;Мировая художественная культура +0.13.246 cine;Кино +0.13.247 theatre;Театр +0.13.248 art_criticism;Искусствоведение +#---------- 0.14 Техника ---------- +0.14.75 sci_tech;Технические науки +0.14.120 sci_build;Строительство и сопромат +0.14.119 sci_radio;Радиоэлектроника +0.14.118 sci_metal;Металлургия +0.14.117 sci_transport;Транспорт и авиация +0.14.223 military_weapon;Военное дело, военная техника и вооружение +0.14.224 auto_business;Автодело +0.14.225 equ_history;История техники +#---------- 0.15 Компьютеры и Интернет ---------- +0.15.77 comp_www;ОС и Сети, интернет +0.15.79 comp_hard;Компьютерное 'железо' (аппаратное обеспечение), цифровая обработка сигналов +0.15.81 comp_db;Программирование, программы, базы данных +0.15.83 computers;Зарубежная компьютерная, околокомпьютерная литература +0.15.166 tbg_computers;Учебные пособия, самоучители +#---------- 0.16 Справочная литература ---------- +0.16.84 ref_encyc;Энциклопедии +0.16.85 ref_dict;Словари +0.16.86 ref_ref;Справочники +0.16.87 ref_guide;Руководства +0.16.88 reference;Справочная литература +0.16.152 geo_guides;Путеводители, карты, атласы +#---------- 0.17 Документальная литература ---------- +0.17.89 nonf_biography;Биографии и Мемуары +0.17.90 nonf_publicism;Публицистика +0.17.93 nonfiction;Документальная литература +0.17.159 nonf_military;Военная документалистика и аналитика +0.17.160 military_special;Военное дело +0.17.161 travel_notes;География, путевые заметки +#---------- 0.18 Юмор ---------- +0.18.98 humor_anecdote;Анекдоты +0.18.99 humor_prose;Юмористическая проза +0.18.101 humor;Юмор +0.18.234 humor_satire;Сатира +#---------- 0.19 Дом и семья ---------- +0.19.102 home_cooking;Кулинария +0.19.103 home_pets;Домашние животные +0.19.104 home_crafts;Хобби и ремесла +0.19.105 home_entertain;Развлечения +0.19.106 home_health;Здоровье +0.19.107 home_garden;Сад и огород +0.19.108 home_diy;Сделай сам +0.19.109 home_sport;Боевые искусства, спорт +0.19.110 home_sex;Семейные отношения, секс +0.19.111 home;Домоводство +0.19.162 sci_pedagogy;Педагогика, воспитание детей, литература для родителей +0.19.163 auto_regulations;Автомобили и ПДД +0.19.164 home_collecting;Коллекционирование +0.19.165 family;Семейные отношения +#---------- 0.20 Прочее ---------- +0.20.112 other;Неотсортированное +0.20.153 periodic;Журналы, газеты +0.20.210 comics;Комиксы +0.20.211 unfinished;Незавершенное +0.20.212 fanfiction;Фанфик +0.20.213 network_literature;Самиздат, сетевая литература +#---------- 0.21 Деловая литература ---------- +0.21.132 banking;Финансы +0.21.136 org_behavior;Маркетинг, PR +0.21.141 popular_business;Карьера, кадры +0.21.144 economics_ref;Деловая литература +0.21.147 economics;Экономика +#---------- 0.22 Учебники и пособия ---------- +0.22.249 sci_textbook;Учебники и пособия +0.22.250 tbg_school;Школьные учебники и пособия, рефераты, шпаргалки +0.22.251 tbg_secondary;Учебники и пособия для среднего и специального образования +0.22.252 tbg_higher;Учебники и пособия ВУЗов +#---------- 2021-07-22 11:35:50.469539---------- +" \ No newline at end of file From 8476f8b3c8fd3ecf04bf5a12e33e80991326a179 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 17 Aug 2022 01:02:14 +0700 Subject: [PATCH 011/177] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20execDir=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8?= =?UTF-8?q?=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/config/base.js | 1 + server/config/production.js | 2 ++ 2 files changed, 3 insertions(+) diff --git a/server/config/base.js b/server/config/base.js index 644f024..aeb507d 100644 --- a/server/config/base.js +++ b/server/config/base.js @@ -9,6 +9,7 @@ module.exports = { version: pckg.version, name: pckg.name, + execDir, dataDir, tempDir: `${dataDir}/tmp`, logDir: `${dataDir}/log`, diff --git a/server/config/production.js b/server/config/production.js index e649161..69a9720 100644 --- a/server/config/production.js +++ b/server/config/production.js @@ -7,6 +7,8 @@ const dataDir = `${execDir}/.${pckg.name}`; module.exports = Object.assign({}, base, { branch: 'production', + + execDir, dataDir, tempDir: `${dataDir}/tmp`, logDir: `${dataDir}/log`, From 6f8c323557988fc02a09d1e5f8407cb27348375d Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 17 Aug 2022 01:13:09 +0700 Subject: [PATCH 012/177] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BF=D0=B0=D1=80=D1=81=D0=B8=D0=BD=D0=B3=20cli?= =?UTF-8?q?-=D0=B0=D1=80=D0=B3=D1=83=D0=BC=D0=B5=D0=BD=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/index.js | 86 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 65 insertions(+), 21 deletions(-) diff --git a/server/index.js b/server/index.js index e02a7ef..1e9c055 100644 --- a/server/index.js +++ b/server/index.js @@ -1,5 +1,6 @@ const fs = require('fs-extra'); -const argv = require('minimist')(process.argv.slice(2)); +const path = require('path'); + const express = require('express'); const compression = require('compression'); const http = require('http'); @@ -8,12 +9,30 @@ const WebSocket = require ('ws'); const ayncExit = new (require('./core/AsyncExit'))(); const utils = require('./core/utils'); -let log = null; -let config = null; - const maxPayloadSize = 50;//in MB +let log; +let config; +let argv; +const argvStrings = ['lib-dir', 'inpx']; + +function showHelp() { + console.log(utils.versionText(config)); + console.log( +`Usage: ${config.name} [options] + +Options: + --help Print ${config.name} command line options + --lib-dir= Set library directory, default: the same as ${config.name} executable + --inpx= Set INPX collection file, default: the one that found in library dir + --recreate Force recreation of the search database on start +` + ); +} + async function init() { + argv = require('minimist')(process.argv.slice(2), {string: argvStrings}); + //config const configManager = new (require('./config'))();//singleton await configManager.init(); @@ -26,11 +45,52 @@ async function init() { await appLogger.init(config); log = appLogger.log; - if (!argv.help) { + //cli + if (argv.help) { + showHelp(); + ayncExit.exit(0); + } else { log(utils.versionText(config)); log('Initializing'); } + const libDir = argv['lib-dir']; + if (libDir) { + if (await fs.pathExists(libDir)) { + config.libDir = libDir; + } else { + throw new Error(`Directory "${libDir}" not exists`); + } + } else { + config.libDir = config.execDir; + } + + if (argv.inpx) { + if (await fs.pathExists(argv.inpx)) { + config.inpxFile = argv.inpx; + } else { + throw new Error(`File "${argv.inpx}" not found`); + } + } else { + const inpxFiles = []; + await utils.findFiles((file) => { + if (path.extname(file) == '.inpx') + inpxFiles.push(file); + }, config.libDir, false); + + if (inpxFiles.length) { + if (inpxFiles.length == 1) { + config.inpxFile = inpxFiles[0]; + } else { + throw new Error(`Found more than one .inpx files: \n${inpxFiles.join('\n')}`); + } + } else { + throw new Error(`No .inpx files found here: ${config.libDir}`); + } + } + + config.recreateDb = argv.recreate || false; + //dirs await fs.ensureDir(config.dataDir); await fs.ensureDir(config.tempDir); @@ -44,23 +104,7 @@ async function init() { } } -function showHelp() { - console.log(utils.versionText(config)); - console.log( -`Usage: ${config.name} [options] - -Options: - --help Print ${config.name} command line options -` - ); -} - async function main() { - if (argv.help) { - showHelp(); - ayncExit.exit(0); - } - const log = new (require('./core/AppLogger'))().log;//singleton //server From 425fdf607daa282ac8e964bf96230fefc417f95c Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 17 Aug 2022 01:15:35 +0700 Subject: [PATCH 013/177] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BD=D0=B5=D1=81=D0=BA=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE?= =?UTF-8?q?=20=D1=83=D1=82=D0=B8=D0=BB=D0=B8=D1=82=D0=B0=D1=80=D0=BD=D1=8B?= =?UTF-8?q?=D1=85=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/utils.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/server/core/utils.js b/server/core/utils.js index f81ae0b..62f538d 100644 --- a/server/core/utils.js +++ b/server/core/utils.js @@ -1,7 +1,43 @@ +const fs = require('fs-extra'); +const path = require('path'); + +function sleep(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); +} + function versionText(config) { return `${config.name} v${config.version}, Node.js ${process.version}`; } +async function findFiles(callback, dir, recursive = true) { + if (!(callback && dir)) + return; + + const files = await fs.readdir(dir, { withFileTypes: true }); + + for (const file of files) { + const found = path.resolve(dir, file.name); + if (file.isDirectory()) { + if (recursive) + await findFiles(callback, found); + } else { + await callback(found); + } + } +} + +async function touchFile(filename) { + await fs.utimes(filename, Date.now()/1000, Date.now()/1000); +} + +function hasProp(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} + module.exports = { + sleep, versionText, + findFiles, + touchFile, + hasProp, }; \ No newline at end of file From a0f701123df1ce7358f775fc7ea923160f83d8ff Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 17 Aug 2022 01:17:14 +0700 Subject: [PATCH 014/177] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20WebWorker=20=D0=B8=20DbCreator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/controllers/WebSocketController.js | 15 ++++++ server/core/DbCreator.js | 0 server/core/WebWorker.js | 50 ++++++++++++++++++ server/core/WorkerState.js | 62 +++++++++++++++++++++++ 4 files changed, 127 insertions(+) create mode 100644 server/core/DbCreator.js create mode 100644 server/core/WebWorker.js create mode 100644 server/core/WorkerState.js diff --git a/server/controllers/WebSocketController.js b/server/controllers/WebSocketController.js index 5cafd99..c02b9ee 100644 --- a/server/controllers/WebSocketController.js +++ b/server/controllers/WebSocketController.js @@ -1,6 +1,8 @@ const WebSocket = require ('ws'); const _ = require('lodash'); +const WorkerState = require('../core/WorkerState');//singleton +const WebWorker = require('../core/WebWorker');//singleton const log = new (require('../core/AppLogger'))().log;//singleton //const utils = require('../core/utils'); @@ -12,6 +14,9 @@ class WebSocketController { this.config = config; this.isDevelopment = (config.branch == 'development'); + this.workerState = new WorkerState(); + this.webWorker = new WebWorker(config); + this.wss = wss; wss.on('connection', (ws) => { @@ -59,6 +64,8 @@ class WebSocketController { await this.test(req, ws); break; case 'get-config': await this.getConfig(req, ws); break; + case 'get-worker-state': + await this.getWorkerState(req, ws); break; default: throw new Error(`Action not found: ${req.action}`); @@ -100,6 +107,14 @@ class WebSocketController { } } + async getWorkerState(req, ws) { + if (!req.workerId) + throw new Error(`key 'workerId' is empty`); + + const state = this.workerState.getState(req.workerId); + this.send((state ? state : {}), req, ws); + } + } module.exports = WebSocketController; diff --git a/server/core/DbCreator.js b/server/core/DbCreator.js new file mode 100644 index 0000000..e69de29 diff --git a/server/core/WebWorker.js b/server/core/WebWorker.js new file mode 100644 index 0000000..fd5b98c --- /dev/null +++ b/server/core/WebWorker.js @@ -0,0 +1,50 @@ +const WorkerState = require('./WorkerState'); + +//server states: +const ssNormal = 'normal'; +const ssDbLoading = 'db_loading'; + +//singleton +let instance = null; + +class WebWorker { + constructor(config) { + if (!instance) { + this.config = config; + this.workerState = new WorkerState(); + + this.wState = this.workerState.getControl('server_state'); + this.myState = ''; + + this.loadOrCreateDb();//no await + + instance = this; + } + + return instance; + } + + checkMyState() { + if (this.myState != ssNormal) + throw new Error('server_busy'); + } + + setMyState(newState) { + this.myState = newState; + this.wState.set({state: newState}); + } + + async loadOrCreateDb() { + this.setMyState(ssDbLoading); + + try { + // + } catch (e) { + // + } finally { + this.setMyState(ssNormal); + } + } +} + +module.exports = WebWorker; \ No newline at end of file diff --git a/server/core/WorkerState.js b/server/core/WorkerState.js new file mode 100644 index 0000000..3daf333 --- /dev/null +++ b/server/core/WorkerState.js @@ -0,0 +1,62 @@ +const utils = require('./utils'); + +const cleanInterval = 3600; //sec +const cleanAfterLastModified = cleanInterval - 60; //sec + +let instance = null; + +//singleton +class WorkerState { + constructor() { + if (!instance) { + this.states = {}; + this.cleanStates(); + instance = this; + } + + return instance; + } + + generateWorkerId() { + return utils.randomHexString(20); + } + + getControl(workerId) { + return { + set: state => this.setState(workerId, state), + finish: state => this.finishState(workerId, state), + get: () => this.getState(workerId), + }; + } + + setState(workerId, state) { + this.states[workerId] = Object.assign({}, this.states[workerId], state, { + workerId, + lastModified: Date.now() + }); + } + + finishState(workerId, state) { + this.states[workerId] = Object.assign({}, this.states[workerId], state, { + workerId, + state: 'finish', + lastModified: Date.now() + }); + } + + getState(workerId) { + return this.states[workerId]; + } + + cleanStates() { + const now = Date.now(); + for (let workerID in this.states) { + if ((now - this.states[workerID].lastModified) >= cleanAfterLastModified*1000) { + delete this.states[workerID]; + } + } + setTimeout(this.cleanStates.bind(this), cleanInterval*1000); + } +} + +module.exports = WorkerState; \ No newline at end of file From d00cb200a3b2bd39bfd7e93f8fe888c50d0f3db3 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 17 Aug 2022 02:40:39 +0700 Subject: [PATCH 015/177] =?UTF-8?q?=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=88=D0=B0=D1=8F=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/index.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/server/index.js b/server/index.js index 1e9c055..cfb890e 100644 --- a/server/index.js +++ b/server/index.js @@ -45,6 +45,11 @@ async function init() { await appLogger.init(config); log = appLogger.log; + //dirs + await fs.ensureDir(config.dataDir); + await fs.ensureDir(config.tempDir); + await fs.emptyDir(config.tempDir); + //cli if (argv.help) { showHelp(); @@ -90,12 +95,8 @@ async function init() { } config.recreateDb = argv.recreate || false; - - //dirs - await fs.ensureDir(config.dataDir); - await fs.ensureDir(config.tempDir); - await fs.emptyDir(config.tempDir); + //app const appDir = `${config.publicDir}/app`; const appNewDir = `${config.publicDir}/app_new`; if (await fs.pathExists(appNewDir)) { From f76a8f14ec0ff6833c8592ad95e03d819aa0728f Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 17 Aug 2022 02:40:57 +0700 Subject: [PATCH 016/177] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20DbCreator=20=D0=B8=20WebWorker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/DbCreator.js | 15 +++++++ server/core/WebWorker.js | 92 +++++++++++++++++++++++++++++++++++++--- 2 files changed, 101 insertions(+), 6 deletions(-) diff --git a/server/core/DbCreator.js b/server/core/DbCreator.js index e69de29..b31aa4c 100644 --- a/server/core/DbCreator.js +++ b/server/core/DbCreator.js @@ -0,0 +1,15 @@ +const InpxParser = + +class DbCreator { + constructor(config) { + this.config = config; + } + + async run(db, callback) { + const config = this.config; + + + } +} + +module.exports = DbCreator; \ No newline at end of file diff --git a/server/core/WebWorker.js b/server/core/WebWorker.js index fd5b98c..fb09d5a 100644 --- a/server/core/WebWorker.js +++ b/server/core/WebWorker.js @@ -1,8 +1,22 @@ -const WorkerState = require('./WorkerState'); +const fs = require('fs-extra'); -//server states: +const WorkerState = require('./WorkerState'); +const { JembaDbThread } = require('jembadb'); +const DbCreator = require('./DbCreator'); + +const ayncExit = new (require('./AsyncExit'))(); +const log = new (require('./AppLogger'))().log;//singleton + +//server states const ssNormal = 'normal'; const ssDbLoading = 'db_loading'; +const ssDbCreating = 'db_creating'; + +const stateToText = { + [ssNormal]: '', + [ssDbLoading]: 'Загрузка поисковой базы', + [ssDbCreating]: 'Создание поисковой базы', +}; //singleton let instance = null; @@ -15,6 +29,9 @@ class WebWorker { this.wState = this.workerState.getControl('server_state'); this.myState = ''; + this.db = null; + + ayncExit.add(this.closeDb.bind(this)); this.loadOrCreateDb();//no await @@ -29,18 +46,81 @@ class WebWorker { throw new Error('server_busy'); } - setMyState(newState) { + setMyState(newState, workerState = {}) { this.myState = newState; - this.wState.set({state: newState}); + this.wState.set(Object.assign({}, workerState, { + state: newState, + serverMessage: stateToText[newState] + })); + } + + async closeDb() { + if (this.db) { + await this.db.unlock(); + this.db = null; + } + } + + async createDb(dbPath) { + this.setMyState(ssDbCreating); + + const config = this.config; + + if (await fs.pathExists(dbPath)) + throw new Error(`createDb.pathExists: ${dbPath}`); + + const db = new JembaDbThread(); + await db.lock({ + dbPath, + create: true, + softLock: true, + + tableDefaults: { + cacheSize: 5, + }, + }); + + try { + const dbCreator = new DbCreator(config); + await dbCreator.run(db, (state) => this.setMyState(ssDbCreating, state)); + } finally { + await db.unlock(); + } } async loadOrCreateDb() { this.setMyState(ssDbLoading); try { - // + const config = this.config; + const dbPath = `${config.dataDir}/db`; + + //пересоздаем БД из INPX если нужно + if (config.recreateDb) + await fs.remove(dbPath); + + if (!await fs.pathExists(dbPath)) { + await this.createDb(dbPath); + } + + //загружаем БД + this.setMyState(ssDbLoading); + + this.db = new JembaDbThread(); + await this.db.lock({ + dbPath, + softLock: true, + + tableDefaults: { + cacheSize: 5, + }, + }); + + //открываем все таблицы + await this.db.openAll(); } catch (e) { - // + log(LM_FATAL, e.message); + ayncExit.exit(1); } finally { this.setMyState(ssNormal); } From 3cfb2beb3dac2915d231f6e5e8445a66dfb84c21 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 17 Aug 2022 03:13:47 +0700 Subject: [PATCH 017/177] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20WebWorker=20=D0=B8=20DbCreator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/DbCreator.js | 31 +++++++++++++++++++++++++++++-- server/core/InpxParser.js | 36 ++++++++++++++++++++++-------------- server/core/WebWorker.js | 21 ++++++++++++++++++++- 3 files changed, 71 insertions(+), 17 deletions(-) diff --git a/server/core/DbCreator.js b/server/core/DbCreator.js index b31aa4c..da0cc13 100644 --- a/server/core/DbCreator.js +++ b/server/core/DbCreator.js @@ -1,4 +1,4 @@ -const InpxParser = +const InpxParser = require('./InpxParser'); class DbCreator { constructor(config) { @@ -8,7 +8,34 @@ class DbCreator { async run(db, callback) { const config = this.config; - + //book + await db.create({ + table: 'book' + }); + + //парсинг + const parser = new InpxParser(); + + const readFileCallback = async(readState) => { + callback(readState); + }; + + let recsLoaded = 0; + let id = 0; + const parsedCallback = async(chunk) => { + for (const rec of chunk) { + rec.id = ++id; + } + + await db.insert({table: 'book', rows: chunk}); + + recsLoaded += chunk.length; + callback({recsLoaded}); + }; + + await parser.parse(config.inpxFile, readFileCallback, parsedCallback); + + //поисковые таблицы } } diff --git a/server/core/InpxParser.js b/server/core/InpxParser.js index 532e8f6..dda8ee8 100644 --- a/server/core/InpxParser.js +++ b/server/core/InpxParser.js @@ -37,33 +37,41 @@ class InpxParser { try { const info = this.inpxInfo; + //посчитаем inp-файлы + const entries = Object.values(zipReader.entries); + const inpFiles = []; + for (const entry of entries) { + if (!entry.isDirectory && path.extname(entry.name) == '.inp') + inpFiles.push(entry.name); + } + + //плюс 3 файла .info + await readFileCallback({total: inpFiles.length + 3}); + + let current = 0; //info - await readFileCallback(collectionInfo); + await readFileCallback({fileName: collectionInfo, current: ++current}); info.collection = await this.safeExtractToString(zipReader, collectionInfo); - await readFileCallback(structureInfo); + await readFileCallback({fileName: structureInfo, current: ++current}); info.structure = await this.safeExtractToString(zipReader, structureInfo); - await readFileCallback(versionInfo); + await readFileCallback({fileName: versionInfo, current: ++current}); info.version = await this.safeExtractToString(zipReader, versionInfo); - //structure + //структура let inpxStructure = info.structure; if (!inpxStructure) inpxStructure = defaultStructure; inpxStructure = inpxStructure.toLowerCase(); const structure = inpxStructure.split(';'); - //inp-файлы - const entries = Object.values(zipReader.entries); - for (const entry of entries) { - if (!entry.isDirectory && path.extname(entry.name) == '.inp') { - - await readFileCallback(entry.name); - const buf = await zipReader.extractToBuf(entry.name); - - await this.parseInp(buf, structure, parsedCallback); - } + //парсим inp-файлы + for (const inpFile of inpFiles) { + await readFileCallback({fileName: inpFile, current: ++current}); + const buf = await zipReader.extractToBuf(inpFile); + + await this.parseInp(buf, structure, parsedCallback); } } finally { zipReader.close(); diff --git a/server/core/WebWorker.js b/server/core/WebWorker.js index fb09d5a..4d69c74 100644 --- a/server/core/WebWorker.js +++ b/server/core/WebWorker.js @@ -63,6 +63,7 @@ class WebWorker { async createDb(dbPath) { this.setMyState(ssDbCreating); + log('Creating search DB'); const config = this.config; @@ -81,10 +82,25 @@ class WebWorker { }); try { + log(' start INPX import'); const dbCreator = new DbCreator(config); - await dbCreator.run(db, (state) => this.setMyState(ssDbCreating, state)); + + let fileName = ''; + await dbCreator.run(db, (state) => { + this.setMyState(ssDbCreating, state); + + if (state.fileName && state.fileName !== fileName) { + fileName = state.fileName; + log(` load ${fileName}`); + } + if (state.recsLoaded) + log(` processed ${state.recsLoaded} records`); + }); + + log(' finish INPX import'); } finally { await db.unlock(); + log('Search DB created'); } } @@ -105,6 +121,7 @@ class WebWorker { //загружаем БД this.setMyState(ssDbLoading); + log('Open search DB'); this.db = new JembaDbThread(); await this.db.lock({ @@ -118,6 +135,8 @@ class WebWorker { //открываем все таблицы await this.db.openAll(); + + log('Search DB ready'); } catch (e) { log(LM_FATAL, e.message); ayncExit.exit(1); From 38f63232a3bf06f43d483e38355087756949de0c Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 17 Aug 2022 17:53:47 +0700 Subject: [PATCH 018/177] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20WebWorker=20=D0=B8=20DbCreator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/InpxParser.js | 19 ++++++++++--------- server/core/WebWorker.js | 15 ++++++--------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/server/core/InpxParser.js b/server/core/InpxParser.js index dda8ee8..7f968e9 100644 --- a/server/core/InpxParser.js +++ b/server/core/InpxParser.js @@ -67,12 +67,18 @@ class InpxParser { const structure = inpxStructure.split(';'); //парсим inp-файлы + this.chunk = []; for (const inpFile of inpFiles) { await readFileCallback({fileName: inpFile, current: ++current}); const buf = await zipReader.extractToBuf(inpFile); await this.parseInp(buf, structure, parsedCallback); } + + if (this.chunk.length) { + await parsedCallback(this.chunk); + } + } finally { zipReader.close(); } @@ -82,7 +88,6 @@ class InpxParser { const structLen = structure.length; const rows = inpBuf.toString().split('\n'); - let chunk = []; for (const row of rows) { let line = row; if (!line) @@ -117,17 +122,13 @@ class InpxParser { rec.librate = parseInt(rec.librate, 10) || 0; //пушим - chunk.push(rec); + this.chunk.push(rec); - if (chunk.length >= 10000) { - await parsedCallback(chunk); - chunk = []; + if (this.chunk.length >= 10000) { + await parsedCallback(this.chunk); + this.chunk = []; } } - - if (chunk.length) { - await parsedCallback(chunk); - } } get info() { diff --git a/server/core/WebWorker.js b/server/core/WebWorker.js index 4d69c74..102172b 100644 --- a/server/core/WebWorker.js +++ b/server/core/WebWorker.js @@ -63,7 +63,7 @@ class WebWorker { async createDb(dbPath) { this.setMyState(ssDbCreating); - log('Creating search DB'); + log('Searcher DB create start'); const config = this.config; @@ -85,14 +85,11 @@ class WebWorker { log(' start INPX import'); const dbCreator = new DbCreator(config); - let fileName = ''; await dbCreator.run(db, (state) => { this.setMyState(ssDbCreating, state); - if (state.fileName && state.fileName !== fileName) { - fileName = state.fileName; - log(` load ${fileName}`); - } + if (state.fileName) + log(` load ${state.fileName}`); if (state.recsLoaded) log(` processed ${state.recsLoaded} records`); }); @@ -100,7 +97,7 @@ class WebWorker { log(' finish INPX import'); } finally { await db.unlock(); - log('Search DB created'); + log('Searcher DB successfully created'); } } @@ -121,7 +118,7 @@ class WebWorker { //загружаем БД this.setMyState(ssDbLoading); - log('Open search DB'); + log('Searcher DB open'); this.db = new JembaDbThread(); await this.db.lock({ @@ -136,7 +133,7 @@ class WebWorker { //открываем все таблицы await this.db.openAll(); - log('Search DB ready'); + log('Searcher DB is ready'); } catch (e) { log(LM_FATAL, e.message); ayncExit.exit(1); From 0e0c01e41913685262eb558e52cf14ebdf507989 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 17 Aug 2022 19:57:59 +0700 Subject: [PATCH 019/177] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B4=D0=BB=D1=8F=20pkg=20--options=20max-old-space-s?= =?UTF-8?q?ize=3D4096,expose-gc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9d2b6a0..2b86e2b 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,8 @@ "scripts": { "dev": "nodemon --inspect --ignore server/.inpx-web --ignore client --exec 'node server --lib-dir=.inpx-web/lib'", "build:client": "webpack --config build/webpack.prod.config.js", - "build:linux": "npm run build:client && node build/linux && pkg -t node16-linux-x64 -C GZip -o dist/linux/inpx-web .", - "build:win": "npm run build:client && node build/win && pkg -t node16-win-x64 -C GZip -o dist/win/inpx-web .", + "build:linux": "npm run build:client && node build/linux && pkg -t node16-linux-x64 -C GZip --options max-old-space-size=4096,expose-gc -o dist/linux/inpx-web .", + "build:win": "npm run build:client && node build/win && pkg -t node16-win-x64 -C GZip --options max-old-space-size=4096,expose-gc -o dist/win/inpx-web .", "build:client-dev": "webpack --config build/webpack.dev.config.js", "postinstall": "npm run build:client-dev" }, From a93ae030c43c7914759880448013afae89966d5a Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 17 Aug 2022 19:59:09 +0700 Subject: [PATCH 020/177] =?UTF-8?q?=D0=9A=20=D0=BF=D1=80=D0=B5=D0=B4=D1=8B?= =?UTF-8?q?=D0=B4=D1=83=D1=89=D0=B5=D0=BC=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 2b86e2b..4e8cfff 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "node": ">=16.16.0" }, "scripts": { - "dev": "nodemon --inspect --ignore server/.inpx-web --ignore client --exec 'node server --lib-dir=.inpx-web/lib'", + "dev": "nodemon --inspect --ignore server/.inpx-web --ignore client --exec 'node --expose-gc server --lib-dir=.inpx-web/lib'", "build:client": "webpack --config build/webpack.prod.config.js", "build:linux": "npm run build:client && node build/linux && pkg -t node16-linux-x64 -C GZip --options max-old-space-size=4096,expose-gc -o dist/linux/inpx-web .", "build:win": "npm run build:client && node build/win && pkg -t node16-win-x64 -C GZip --options max-old-space-size=4096,expose-gc -o dist/win/inpx-web .", From 801a4cdbb52c3de5018d11b7d3d4d1a8db7ca394 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 17 Aug 2022 20:47:34 +0700 Subject: [PATCH 021/177] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20WebWorker=20=D0=B8=20DbCreator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/DbCreator.js | 203 ++++++++++++++++++++++++++++++++++++++- server/core/WebWorker.js | 23 ++++- server/core/utils.js | 10 ++ server/index.js | 3 + 4 files changed, 233 insertions(+), 6 deletions(-) diff --git a/server/core/DbCreator.js b/server/core/DbCreator.js index da0cc13..634fdcd 100644 --- a/server/core/DbCreator.js +++ b/server/core/DbCreator.js @@ -1,4 +1,5 @@ const InpxParser = require('./InpxParser'); +const utils = require('./utils'); class DbCreator { constructor(config) { @@ -10,21 +11,112 @@ class DbCreator { //book await db.create({ - table: 'book' + table: 'book' }); - //парсинг - const parser = new InpxParser(); - + callback({job: 'load inpx', jobMessage: 'Загрузка INPX'}); const readFileCallback = async(readState) => { callback(readState); }; + //поисковые таблицы, ниже сохраним в БД + let authorMap = new Map();//авторы + let authorArr = []; + let seriesMap = new Map();//серии + let seriesArr = []; + let titleMap = new Map();//названия + let titleArr = []; + let genreMap = new Map();//жанры + let genreArr = []; + let recsLoaded = 0; let id = 0; const parsedCallback = async(chunk) => { for (const rec of chunk) { rec.id = ++id; + + if (!rec.author) + continue; + + //авторы + const author = rec.author.split(','); + if (author.length > 1) + author.push(rec.author); + + const authorIds = []; + for (const a of author) { + let authorRec; + if (authorMap.has(a)) { + const authorId = authorMap.get(a); + authorRec = authorArr[authorId]; + } else { + authorRec = {id: authorArr.length, author: a, value: a.toLowerCase(), bookId: []}; + authorArr.push(authorRec); + authorMap.set(a, authorRec.id); + } + + authorRec.bookId.push(id); + authorIds.push(authorRec.id); + } + + //серии + if (rec.series) { + const series = rec.series; + + let seriesRec; + if (seriesMap.has(series)) { + const seriesId = seriesMap.get(series); + seriesRec = seriesArr[seriesId]; + } else { + seriesRec = {id: seriesArr.length, value: series.toLowerCase(), authorId: new Set()}; + seriesArr.push(seriesRec); + seriesMap.set(series, seriesRec.id); + } + + for (const id of authorIds) { + seriesRec.authorId.add(id); + } + } + + //названия + if (rec.title) { + const title = rec.title; + + let titleRec; + if (titleMap.has(title)) { + const titileId = titleMap.get(title); + titleRec = titleArr[titileId]; + } else { + titleRec = {id: titleArr.length, value: title.toLowerCase(), authorId: new Set()}; + titleArr.push(titleRec); + titleMap.set(title, titleRec.id); + } + + for (const id of authorIds) { + titleRec.authorId.add(id); + } + } + + //жанры + if (rec.genre) { + const genre = rec.genre.split(','); + + for (const g of genre) { + let genreRec; + if (genreMap.has(g)) { + const genreId = genreMap.get(g); + genreRec = genreArr[genreId]; + } else { + genreRec = {id: genreArr.length, value: g, authorId: new Set()}; + genreArr.push(genreRec); + genreMap.set(g, genreRec.id); + } + + for (const id of authorIds) { + genreRec.authorId.add(id); + } + } + } } await db.insert({table: 'book', rows: chunk}); @@ -33,9 +125,110 @@ class DbCreator { callback({recsLoaded}); }; + //парсинг + const parser = new InpxParser(); await parser.parse(config.inpxFile, readFileCallback, parsedCallback); - //поисковые таблицы + callback({job: 'config save', jobMessage: 'Сохранение конфигурации'}); + + //чистка памяти, ибо жрет как не в себя + authorMap = null; + seriesMap = null; + titleMap = null; + genreMap = null; + + utils.freeMemory(); + + //конфиг + + console.log('author:', authorArr.length); + console.log('series:', seriesArr.length); + console.log('title:', titleArr.length); + console.log('genre:', genreArr.length); + + + //сохраним поисковые таблицы + const chunkSize = 10000; + + //author + callback({job: 'author save', jobMessage: 'Сохранение авторов книг'}); + await db.create({ + table: 'author', + index: {field: 'value', depth: config.indexDepth}, + }); + + //вставка в БД по кусочкам, экономим память + for (let i = 0; i < authorArr.length; i += chunkSize) { + const chunk = authorArr.slice(i, i + chunkSize); + + await db.insert({table: 'author', rows: chunk}); + } + + authorArr = null; + await db.close({table: 'author'}); + utils.freeMemory(); + + //series + callback({job: 'series save', jobMessage: 'Сохранение серий книг'}); + await db.create({ + table: 'series', + index: {field: 'value', depth: config.indexDepth}, + }); + + //вставка в БД по кусочкам, экономим память + for (let i = 0; i < seriesArr.length; i += chunkSize) { + const chunk = seriesArr.slice(i, i + chunkSize); + for (const rec of chunk) + rec.authorId = Array.from(rec.authorId); + + await db.insert({table: 'series', rows: chunk}); + } + + seriesArr = null; + await db.close({table: 'series'}); + utils.freeMemory(); + + //title + callback({job: 'title save', jobMessage: 'Сохранение названий книг'}); + await db.create({ + table: 'title', + index: {field: 'value', depth: config.indexDepth}, + }); + + //вставка в БД по кусочкам, экономим память + for (let i = 0; i < titleArr.length; i += chunkSize) { + const chunk = titleArr.slice(i, i + chunkSize); + for (const rec of chunk) + rec.authorId = Array.from(rec.authorId); + + await db.insert({table: 'title', rows: chunk}); + } + + titleArr = null; + await db.close({table: 'title'}); + utils.freeMemory(); + + //genre + callback({job: 'genre save', jobMessage: 'Сохранение жанров'}); + await db.create({ + table: 'genre', + index: {field: 'value', depth: config.indexDepth}, + }); + + //вставка в БД по кусочкам, экономим память + for (let i = 0; i < genreArr.length; i += chunkSize) { + const chunk = genreArr.slice(i, i + chunkSize); + for (const rec of chunk) + rec.authorId = Array.from(rec.authorId); + + await db.insert({table: 'genre', rows: chunk}); + } + + genreArr = null; + await db.close({table: 'genre'}); + utils.freeMemory(); + + callback({job: 'done', jobMessage: ''}); } } diff --git a/server/core/WebWorker.js b/server/core/WebWorker.js index 102172b..6ce6dca 100644 --- a/server/core/WebWorker.js +++ b/server/core/WebWorker.js @@ -1,3 +1,4 @@ +const os = require('os'); const fs = require('fs-extra'); const WorkerState = require('./WorkerState'); @@ -6,6 +7,7 @@ const DbCreator = require('./DbCreator'); const ayncExit = new (require('./AsyncExit'))(); const log = new (require('./AppLogger'))().log;//singleton +const utils = require('./utils'); //server states const ssNormal = 'normal'; @@ -34,6 +36,7 @@ class WebWorker { ayncExit.add(this.closeDb.bind(this)); this.loadOrCreateDb();//no await + this.logServerStats();//no await instance = this; } @@ -70,7 +73,7 @@ class WebWorker { if (await fs.pathExists(dbPath)) throw new Error(`createDb.pathExists: ${dbPath}`); - const db = new JembaDbThread(); + const db = new JembaDbThread();//создаем не в потоке, чтобы лучше работал GC await db.lock({ dbPath, create: true, @@ -92,6 +95,8 @@ class WebWorker { log(` load ${state.fileName}`); if (state.recsLoaded) log(` processed ${state.recsLoaded} records`); + if (state.job) + log(` ${state.job}`); }); log(' finish INPX import'); @@ -132,6 +137,7 @@ class WebWorker { //открываем все таблицы await this.db.openAll(); + await this.db.close({table: 'title'}); log('Searcher DB is ready'); } catch (e) { @@ -141,6 +147,21 @@ class WebWorker { this.setMyState(ssNormal); } } + + async logServerStats() { + while (1) {// eslint-disable-line + try { + const memUsage = process.memoryUsage().rss/(1024*1024);//Mb + let loadAvg = os.loadavg(); + loadAvg = loadAvg.map(v => v.toFixed(2)); + + log(`Server info [ memUsage: ${memUsage.toFixed(2)}MB, loadAvg: (${loadAvg.join(', ')}) ]`); + } catch (e) { + log(LM_ERR, e.message); + } + await utils.sleep(5000); + } + } } module.exports = WebWorker; \ No newline at end of file diff --git a/server/core/utils.js b/server/core/utils.js index 62f538d..18c79bd 100644 --- a/server/core/utils.js +++ b/server/core/utils.js @@ -34,10 +34,20 @@ function hasProp(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } +function freeMemory() { + if (global.gc) { + global.gc(); + global.gc(); + global.gc(); + } +} + + module.exports = { sleep, versionText, findFiles, touchFile, hasProp, + freeMemory, }; \ No newline at end of file diff --git a/server/index.js b/server/index.js index cfb890e..63906c4 100644 --- a/server/index.js +++ b/server/index.js @@ -96,6 +96,9 @@ async function init() { config.recreateDb = argv.recreate || false; + //TODO as cli param + config.indexDepth = 1000; + //app const appDir = `${config.publicDir}/app`; const appNewDir = `${config.publicDir}/app_new`; From 41d1dc14413ddee8c81006b3293907f86d6892e1 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 18 Aug 2022 00:41:00 +0700 Subject: [PATCH 022/177] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20WebWorker=20=D0=B8=20DbCreator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/core/DbCreator.js | 115 ++++++++++++++++++++++++++++++++++----- server/core/WebWorker.js | 4 +- server/core/utils.js | 18 ++++++ server/index.js | 2 +- 4 files changed, 123 insertions(+), 16 deletions(-) diff --git a/server/core/DbCreator.js b/server/core/DbCreator.js index 634fdcd..9290ec8 100644 --- a/server/core/DbCreator.js +++ b/server/core/DbCreator.js @@ -28,15 +28,33 @@ class DbCreator { let titleArr = []; let genreMap = new Map();//жанры let genreArr = []; + let langMap = new Map();//языки + let langArr = []; + //stats + let authorCount = 0; + let bookCount = 0; + let noAuthorBookCount = 0; + let bookDelCount = 0; + + //stuff let recsLoaded = 0; let id = 0; + let chunkNum = 0; const parsedCallback = async(chunk) => { for (const rec of chunk) { rec.id = ++id; - if (!rec.author) - continue; + if (!rec.del) + bookCount++; + else + bookDelCount++; + + if (!rec.author) { + if (!rec.del) + noAuthorBookCount++; + rec.author = 'Автор не указан'; + } //авторы const author = rec.author.split(','); @@ -44,8 +62,10 @@ class DbCreator { author.push(rec.author); const authorIds = []; - for (const a of author) { - let authorRec; + for (let i = 0; i < author.length; i++) { + const a = author[i]; + + let authorRec; if (authorMap.has(a)) { const authorId = authorMap.get(a); authorRec = authorArr[authorId]; @@ -53,6 +73,9 @@ class DbCreator { authorRec = {id: authorArr.length, author: a, value: a.toLowerCase(), bookId: []}; authorArr.push(authorRec); authorMap.set(a, authorRec.id); + + if (author.length == 1 || i < author.length - 1) //без соавторов + authorCount++; } authorRec.bookId.push(id); @@ -84,8 +107,8 @@ class DbCreator { let titleRec; if (titleMap.has(title)) { - const titileId = titleMap.get(title); - titleRec = titleArr[titileId]; + const titleId = titleMap.get(title); + titleRec = titleArr[titleId]; } else { titleRec = {id: titleArr.length, value: title.toLowerCase(), authorId: new Set()}; titleArr.push(titleRec); @@ -117,20 +140,40 @@ class DbCreator { } } } + + //языки + if (rec.lang) { + const lang = rec.lang; + + let langRec; + if (langMap.has(lang)) { + const langId = langMap.get(lang); + langRec = langArr[langId]; + } else { + langRec = {id: langArr.length, value: lang, authorId: new Set()}; + langArr.push(langRec); + langMap.set(lang, langRec.id); + } + + for (const id of authorIds) { + langRec.authorId.add(id); + } + } } await db.insert({table: 'book', rows: chunk}); recsLoaded += chunk.length; callback({recsLoaded}); + + if (chunkNum++ % 10 == 0) + utils.freeMemory(); }; //парсинг const parser = new InpxParser(); await parser.parse(config.inpxFile, readFileCallback, parsedCallback); - callback({job: 'config save', jobMessage: 'Сохранение конфигурации'}); - //чистка памяти, ибо жрет как не в себя authorMap = null; seriesMap = null; @@ -139,13 +182,35 @@ class DbCreator { utils.freeMemory(); - //конфиг + //config + callback({job: 'config save', jobMessage: 'Сохранение конфигурации'}); + await db.create({ + table: 'config' + }); - console.log('author:', authorArr.length); - console.log('series:', seriesArr.length); - console.log('title:', titleArr.length); - console.log('genre:', genreArr.length); + const stats = { + recsLoaded, + authorCount, + authorCountAll: authorArr.length, + bookCount, + bookCountAll: bookCount + bookDelCount, + bookDelCount, + noAuthorBookCount, + titleCount: titleArr.length, + seriesCount: seriesArr.length, + genreCount: genreArr.length, + langCount: langArr.length, + }; + console.log(stats); + + const inpxHash = await utils.getFileHash(config.inpxFile, 'sha256', 'hex'); + + await db.insert({table: 'config', rows: [ + {id: 'inpxInfo', value: parser.info}, + {id: 'stats', value: stats}, + {id: 'inpxHash', value: inpxHash}, + ]}); //сохраним поисковые таблицы const chunkSize = 10000; @@ -196,12 +261,16 @@ class DbCreator { }); //вставка в БД по кусочкам, экономим память + let j = 0; for (let i = 0; i < titleArr.length; i += chunkSize) { const chunk = titleArr.slice(i, i + chunkSize); for (const rec of chunk) rec.authorId = Array.from(rec.authorId); await db.insert({table: 'title', rows: chunk}); + if (j++ % 10 == 0) + utils.freeMemory(); + await utils.sleep(100); } titleArr = null; @@ -228,6 +297,26 @@ class DbCreator { await db.close({table: 'genre'}); utils.freeMemory(); + //genre + callback({job: 'lang save', jobMessage: 'Сохранение языков'}); + await db.create({ + table: 'lang', + index: {field: 'value', depth: config.indexDepth}, + }); + + //вставка в БД по кусочкам, экономим память + for (let i = 0; i < langArr.length; i += chunkSize) { + const chunk = langArr.slice(i, i + chunkSize); + for (const rec of chunk) + rec.authorId = Array.from(rec.authorId); + + await db.insert({table: 'lang', rows: chunk}); + } + + langArr = null; + await db.close({table: 'lang'}); + utils.freeMemory(); + callback({job: 'done', jobMessage: ''}); } } diff --git a/server/core/WebWorker.js b/server/core/WebWorker.js index 6ce6dca..447c1c4 100644 --- a/server/core/WebWorker.js +++ b/server/core/WebWorker.js @@ -106,7 +106,7 @@ class WebWorker { } } - async loadOrCreateDb() { + async loadOrCreateDb(recreate = false) { this.setMyState(ssDbLoading); try { @@ -114,7 +114,7 @@ class WebWorker { const dbPath = `${config.dataDir}/db`; //пересоздаем БД из INPX если нужно - if (config.recreateDb) + if (config.recreateDb || recreate) await fs.remove(dbPath); if (!await fs.pathExists(dbPath)) { diff --git a/server/core/utils.js b/server/core/utils.js index 18c79bd..e100e45 100644 --- a/server/core/utils.js +++ b/server/core/utils.js @@ -1,5 +1,6 @@ const fs = require('fs-extra'); const path = require('path'); +const crypto = require('crypto'); function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); @@ -42,6 +43,21 @@ function freeMemory() { } } +function getFileHash(filename, hashName, enc) { + return new Promise((resolve, reject) => { + const hash = crypto.createHash(hashName); + const rs = fs.createReadStream(filename); + rs.on('error', reject); + rs.on('data', chunk => hash.update(chunk)); + rs.on('end', () => resolve(hash.digest(enc))); + }); +} + +function getBufHash(buf, hashName, enc) { + const hash = crypto.createHash(hashName); + hash.update(buf); + return hash.digest(enc); +} module.exports = { sleep, @@ -50,4 +66,6 @@ module.exports = { touchFile, hasProp, freeMemory, + getFileHash, + getBufHash, }; \ No newline at end of file diff --git a/server/index.js b/server/index.js index 63906c4..2b9dac6 100644 --- a/server/index.js +++ b/server/index.js @@ -96,7 +96,7 @@ async function init() { config.recreateDb = argv.recreate || false; - //TODO as cli param + //TODO as cli param? config.indexDepth = 1000; //app From 3850a7d624c0b1ca899476294702be5a60847e86 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 18 Aug 2022 18:53:06 +0700 Subject: [PATCH 023/177] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D1=81?= =?UTF-8?q?=D0=BA=D0=BE=D0=B9=20=D1=87=D0=B0=D1=81=D1=82=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Api/Api.vue | 59 +++++++++ client/components/Api/webSocketConnection.js | 3 + client/components/App.vue | 22 ++++ client/components/Search/Search.vue | 129 ++++++++++++++++++- client/share/LockQueue.js | 53 ++++++++ client/store/root.js | 6 +- 6 files changed, 267 insertions(+), 5 deletions(-) create mode 100644 client/components/Api/Api.vue create mode 100644 client/components/Api/webSocketConnection.js create mode 100644 client/share/LockQueue.js diff --git a/client/components/Api/Api.vue b/client/components/Api/Api.vue new file mode 100644 index 0000000..da03f43 --- /dev/null +++ b/client/components/Api/Api.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/client/components/Api/webSocketConnection.js b/client/components/Api/webSocketConnection.js new file mode 100644 index 0000000..f4c2e47 --- /dev/null +++ b/client/components/Api/webSocketConnection.js @@ -0,0 +1,3 @@ +import WebSocketConnection from '../../../server/core/WebSocketConnection'; + +export default new WebSocketConnection(); \ No newline at end of file diff --git a/client/components/App.vue b/client/components/App.vue index 88de668..86414e4 100644 --- a/client/components/App.vue +++ b/client/components/App.vue @@ -1,5 +1,6 @@ @@ -74,6 +95,7 @@ class NumInput { disable: Boolean, minusIcon: {type: String, default: 'la la-minus-circle'}, plusIcon: {type: String, default: 'la la-plus-circle'}, + mmButtons: Boolean, }; filteredValue = 0; @@ -188,6 +210,14 @@ class NumInput { this.inTouch = false; this.onMouseUp(); } + + toMin() { + this.filteredValue = this.min; + } + + toMax() { + this.filteredValue = this.max; + } } export default vueComponent(NumInput); @@ -202,7 +232,9 @@ export default vueComponent(NumInput); .button { font-size: 130%; - border-radius: 20px; + border-radius: 15px; + width: 30px; + height: 30px; color: #bbb; cursor: pointer; } From ce5f736a50480ebd08043d969c5b810500f31a96 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Thu, 22 Sep 2022 17:07:28 +0700 Subject: [PATCH 091/177] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=81=D1=82=D0=BE=D1=80=D0=BE=D0=BD=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Search/Search.vue | 94 ++++++++++++++++++++++++++++- 1 file changed, 92 insertions(+), 2 deletions(-) diff --git a/client/components/Search/Search.vue b/client/components/Search/Search.vue index c7fe9a9..6233b28 100644 --- a/client/components/Search/Search.vue +++ b/client/components/Search/Search.vue @@ -139,7 +139,7 @@
- {{ book.title }} {{ book.src.del }} + {{ book.title }} {{ book.src.lang }} {{ book.src.del }}
+
+ +{{ hiddenCount }} результатов скрыты +
@@ -304,6 +307,7 @@ class Search { langList = []; genreTreeInpxHash = ''; cachedAuthors = {}; + hiddenCount = 0; limitOptions = [ {label: '10', value: 10}, @@ -396,6 +400,12 @@ class Search { `, 'Подсказка', {iconName: 'la la-info-circle'}); } + showHiddenHelp() { + this.$root.stdDialog.alert(` + Книги этих авторов помечены как удаленные. Для того, чтобы их увидеть, необходимо установить опцию "Показывать удаленные" в настройках. + `, 'Пояснение', {iconName: 'la la-info-circle'}); + } + showCollectionInfo() { this.$root.stdDialog.alert(`

@@ -508,19 +518,13 @@ class Search { getBookCount(item) { let result = ''; - if (!this.showCounts || item.bookCount === undefined) + if (!this.showCounts || item.count === undefined) return result; - if (this.showDeleted) { - result = item.bookCount + item.bookDelCount; - } else { - result = item.bookCount; - } - if (item.books) - result = `${item.books.length}/${result}`; + result = `${item.books.length}/${item.count}`; else - result = `#/${result}`; + result = `#/${item.count}`; return `(${result})`; } @@ -713,16 +717,22 @@ class Search { return; let num = 0; + this.hiddenCount = 0; for (const rec of authors) { this.cachedAuthors[rec.author] = rec; + const count = (this.showDeleted ? rec.bookCount + rec.bookDelCount : rec.bookCount); + if (!count) { + this.hiddenCount++; + continue; + } + const item = reactive({ key: rec.id, num, author: rec.author, name: rec.author.replace(/,/g, ', '), - bookCount: rec.bookCount, - bookDelCount: rec.bookDelCount, + count, book: false, }); num++; From aaf3c0d076c8943638df05f0041e074a06455fc6 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Fri, 23 Sep 2022 15:00:25 +0700 Subject: [PATCH 094/177] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/Search/BookView/BookView.vue | 36 ++++ client/components/Search/Search.vue | 162 +++++++++++++++--- client/store/root.js | 1 + 3 files changed, 172 insertions(+), 27 deletions(-) create mode 100644 client/components/Search/BookView/BookView.vue diff --git a/client/components/Search/BookView/BookView.vue b/client/components/Search/BookView/BookView.vue new file mode 100644 index 0000000..75a2519 --- /dev/null +++ b/client/components/Search/BookView/BookView.vue @@ -0,0 +1,36 @@ + + + + + \ No newline at end of file diff --git a/client/components/Search/Search.vue b/client/components/Search/Search.vue index f5c6546..83fcf33 100644 --- a/client/components/Search/Search.vue +++ b/client/components/Search/Search.vue @@ -44,17 +44,29 @@ + > + + {{ search.author }} + +

+ > + + {{ search.series }} + +
+ > + + {{ search.title }} + +
- -
@@ -138,21 +142,40 @@
-
- {{ book.title }} -
{{ book.src }} +
+
+
+
+
+ +
+
+ +
+
+
+ +
+ Серия: {{ book.series }} +
+
+ +
+ +
+
+
+
-
- +{{ hiddenCount }} результатов скрыты + {{ hiddenResultsMessage }}
+
@@ -203,6 +226,7 @@ import { reactive } from 'vue'; import PageScroller from './PageScroller/PageScroller.vue'; import SelectGenreDialog from './SelectGenreDialog/SelectGenreDialog.vue'; import SelectLangDialog from './SelectLangDialog/SelectLangDialog.vue'; +import BookView from './BookView/BookView.vue'; import authorBooksStorage from './authorBooksStorage'; import DivBtn from '../share/DivBtn.vue'; @@ -218,6 +242,7 @@ const componentOptions = { PageScroller, SelectGenreDialog, SelectLangDialog, + BookView, Dialog, DivBtn }, @@ -291,6 +316,7 @@ class Search { //settings expanded = []; + expandedSeries = []; showCounts = true; showDeleted = false; abCacheEnabled = true; @@ -353,6 +379,7 @@ class Search { this.search.limit = settings.limit; this.expanded = _.cloneDeep(settings.expanded); + this.expandedSeries = _.cloneDeep(settings.expandedSeries); this.showCounts = settings.showCounts; this.showDeleted = settings.showDeleted; this.abCacheEnabled = settings.abCacheEnabled; @@ -459,6 +486,10 @@ class Search { return `Найден${utils.wordEnding(this.totalFound, 2)} ${this.totalFound} автор${utils.wordEnding(this.totalFound)}`; } + get hiddenResultsMessage() { + return `+${this.hiddenCount} результат${utils.wordEnding(this.hiddenCount)} скрыты`; + } + updatePageCount() { const prevPageCount = this.pageCount; @@ -480,35 +511,47 @@ class Search { this.scrollToTop(); } - selectTitle(title) { - this.search.title = `=${title}`; + selectSeries(series) { + this.search.series = `=${series}`; + } + + bookEvent(event) { + switch (event.action) { + case 'titleClick': + this.search.title = `=${event.book.title}`; + break; + } } isExpanded(item) { return this.expanded.indexOf(item.author) >= 0; } + isExpandedSeries(seriesItem) { + return this.expandedSeries.indexOf(seriesItem.key) >= 0; + } + setSetting(name, newValue) { this.commit('setSettings', {[name]: _.cloneDeep(newValue)}); } expandAuthor(item) { const expanded = _.cloneDeep(this.expanded); - const author = item.author; + const key = item.author; if (!this.isExpanded(item)) { - expanded.push(author); + expanded.push(key); this.getBooks(item); - if (expanded.length > 10) { + if (expanded.length > 100) { expanded.shift(); } this.setSetting('expanded', expanded); this.ignoreScroll(); } else { - const i = expanded.indexOf(author); + const i = expanded.indexOf(key); if (i >= 0) { expanded.splice(i, 1); this.setSetting('expanded', expanded); @@ -516,6 +559,28 @@ class Search { } } + expandSeries(seriesItem) { + const expandedSeries = _.cloneDeep(this.expandedSeries); + const key = seriesItem.key; + + if (!this.isExpandedSeries(seriesItem)) { + expandedSeries.push(key); + + if (expandedSeries.length > 100) { + expandedSeries.shift(); + } + + this.setSetting('expandedSeries', expandedSeries); + this.ignoreScroll(); + } else { + const i = expandedSeries.indexOf(key); + if (i >= 0) { + expandedSeries.splice(i, 1); + this.setSetting('expandedSeries', expandedSeries); + } + } + } + getBookCount(item) { let result = ''; if (!this.showCounts || item.count === undefined) @@ -665,13 +730,56 @@ class Search { const filtered = this.filterBooks(loadedBooks); - filtered.sort((a, b) => a.title.localeCompare(b.title)); + const prepareBook = (book) => { + return { + key: book.id, + type: 'book', + title: book.title, + series: book.series, + } + }; + //объединение по сериям const books = []; + const seriesIndex = {}; for (const book of filtered) { - books.push({key: book.id, title: book.title, src: book}); + if (book.series) { + let index = seriesIndex[book.series]; + if (index === undefined) { + index = books.length; + books.push({ + key: `${item.author}-${book.series}`, + type: 'series', + series: book.series, + books: [], + }); + + seriesIndex[book.series] = index; + } + + books[index].books.push(prepareBook(book)); + } else { + books.push(prepareBook(book)); + } } + //сортировка + books.sort((a, b) => { + if (a.type == 'series') { + if (b.type == 'series') + return a.key.localeCompare(b.key); + else + return -1; + } else { + if (b.type == 'book') + return a.title.localeCompare(b.title); + else + return 1; + } + }); + + //сортировка внутри серий + item.books = books; } finally { this.getBooksFlag--; @@ -909,6 +1017,6 @@ export default vueComponent(Search); } .book-row { - margin-left: 50px; + margin-left: 70px; } diff --git a/client/store/root.js b/client/store/root.js index 3226b5a..c335931 100644 --- a/client/store/root.js +++ b/client/store/root.js @@ -4,6 +4,7 @@ const state = { settings: { limit: 50, expanded: [], + expandedSeries: [], showCounts: true, showDeleted: false, abCacheEnabled: true, From b4c8f5ad72a86dd8f1d5f644f3de2549f061cfbf Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Fri, 23 Sep 2022 17:48:15 +0700 Subject: [PATCH 095/177] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/Search/BookView/BookView.vue | 68 ++++++++++- client/components/Search/Search.vue | 108 ++++++++++++------ client/components/share/NumInput.vue | 5 +- 3 files changed, 141 insertions(+), 40 deletions(-) diff --git a/client/components/Search/BookView/BookView.vue b/client/components/Search/BookView/BookView.vue index 75a2519..67833b8 100644 --- a/client/components/Search/BookView/BookView.vue +++ b/client/components/Search/BookView/BookView.vue @@ -1,9 +1,27 @@ @@ -21,11 +39,44 @@ class BookView { _options = componentOptions; _props = { book: Object, + genreTree: Array, }; created() { } + get bookSize() { + let size = this.book.size/1024; + let unit = 'KB'; + if (size > 1024) { + size = size/1024; + unit = 'MB'; + } + return `${size.toFixed(0)}${unit}`; + } + + get bookGenre() { + let result = []; + const genre = new Set(this.book.genre.split(',')); + + for (const section of this.genreTree) { + for (const g of section.value) + if (genre.has(g.value)) + result.push(g.name); + } + + return `(${result.join(', ')})`; + } + + selectTitle() { + this.$emit('bookEvent', {action: 'titleClick', book: this.book}); + } + + download() { + } + + copyLink() { + } } export default vueComponent(BookView); @@ -33,4 +84,13 @@ export default vueComponent(BookView); \ No newline at end of file diff --git a/client/components/Search/Search.vue b/client/components/Search/Search.vue index 83fcf33..b0283f5 100644 --- a/client/components/Search/Search.vue +++ b/client/components/Search/Search.vue @@ -131,7 +131,7 @@
-
+
{{ item.name }}
@@ -140,10 +140,15 @@
+
+ Загрузка + +
+
-
+
@@ -161,12 +166,10 @@
- +
-
- -
+
@@ -179,6 +182,7 @@
+
@@ -237,6 +241,8 @@ import diffUtils from '../../share/diffUtils'; import _ from 'lodash'; +const maxItemCount = 500;//выше этого значения показываем "Загрузка" + const componentOptions = { components: { PageScroller, @@ -487,7 +493,7 @@ class Search { } get hiddenResultsMessage() { - return `+${this.hiddenCount} результат${utils.wordEnding(this.hiddenCount)} скрыты`; + return `+${this.hiddenCount} результат${utils.wordEnding(this.hiddenCount)} скрыт${utils.wordEnding(this.hiddenCount, 2)}`; } updatePageCount() { @@ -506,13 +512,37 @@ class Search { } } + getBookCount(item) { + let result = ''; + if (!this.showCounts || item.count === undefined) + return result; + + if (item.books) { + let count = 0; + for (const book of item.books) { + if (book.type == 'series') + count += book.books.length; + else + count++; + } + + result = `${count}/${item.count}`; + } else + result = `#/${item.count}`; + + return `(${result})`; + } + selectAuthor(author) { this.search.author = `=${author}`; + this.search.series = ''; + this.search.title = ''; this.scrollToTop(); } selectSeries(series) { this.search.series = `=${series}`; + this.search.title = ''; } bookEvent(event) { @@ -535,14 +565,14 @@ class Search { this.commit('setSettings', {[name]: _.cloneDeep(newValue)}); } - expandAuthor(item) { + async expandAuthor(item) { const expanded = _.cloneDeep(this.expanded); const key = item.author; if (!this.isExpanded(item)) { expanded.push(key); - this.getBooks(item); + await this.getBooks(item); if (expanded.length > 100) { expanded.shift(); @@ -581,19 +611,6 @@ class Search { } } - getBookCount(item) { - let result = ''; - if (!this.showCounts || item.count === undefined) - return result; - - if (item.books) - result = `${item.books.length}/${item.count}`; - else - result = `#/${item.count}`; - - return `(${result})`; - } - async loadBooks(authorId) { try { let result; @@ -709,13 +726,20 @@ class Search { } async getBooks(item) { - if (item.books) + if (item.books) { + if (item.count > maxItemCount) { + item.bookLoading = true; + await utils.sleep(1);//для перерисовки списка + item.bookLoading = false; + } return; + } if (!this.getBooksFlag) this.getBooksFlag = 0; this.getBooksFlag++; + item.bookLoading = true; try { if (this.getBooksFlag == 1) { @@ -736,6 +760,12 @@ class Search { type: 'book', title: book.title, series: book.series, + serno: book.serno, + genre: book.genre, + size: book.size, + ext: book.ext, + + src: book, } }; @@ -751,6 +781,7 @@ class Search { key: `${item.author}-${book.series}`, type: 'series', series: book.series, + books: [], }); @@ -766,22 +797,32 @@ class Search { //сортировка books.sort((a, b) => { if (a.type == 'series') { - if (b.type == 'series') - return a.key.localeCompare(b.key); - else - return -1; + return (b.type == 'series' ? a.key.localeCompare(b.key) : -1); } else { - if (b.type == 'book') - return a.title.localeCompare(b.title); - else - return 1; + return (b.type == 'book' ? a.title.localeCompare(b.title) : 1); } }); //сортировка внутри серий + for (const book of books) { + if (book.type == 'series') { + book.books.sort((a, b) => { + const dserno = (a.serno || Number.MAX_VALUE) - (b.serno || Number.MAX_VALUE); + const dtitle = a.title.localeCompare(b.title); + const dext = a.ext.localeCompare(b.ext); + return (dserno ? dserno : (dtitle ? dtitle : dext)); + }); + } + } + + if (books.length == 1 && books[0].type == 'series' && !this.isExpandedSeries(books[0])) { + this.expandSeries(books[0]); + } item.books = books; + await this.$nextTick(); } finally { + item.bookLoading = false; this.getBooksFlag--; if (this.getBooksFlag == 0) this.loadingMessage2 = ''; @@ -842,11 +883,12 @@ class Search { name: rec.author.replace(/,/g, ', '), count, book: false, + bookLoading: false, }); num++; if (expandedSet.has(item.author)) { - if (authors.length > 1) + if (authors.length > 1 || item.count > maxItemCount) this.getBooks(item);//no await else await this.getBooks(item); @@ -857,7 +899,7 @@ class Search { if (result.length == 1 && !this.isExpanded(result[0])) { this.expandAuthor(result[0]); - } + } this.tableData = result; } diff --git a/client/components/share/NumInput.vue b/client/components/share/NumInput.vue index c89a9e7..229b0f1 100644 --- a/client/components/share/NumInput.vue +++ b/client/components/share/NumInput.vue @@ -11,8 +11,8 @@ From b6cd6b7c51337e7c1661c364f391dda3e22e6071 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sun, 25 Sep 2022 13:18:41 +0700 Subject: [PATCH 096/177] =?UTF-8?q?=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D1=88=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Search/Search.vue | 11 ++++++----- client/quasar.js | 4 ++-- client/store/root.js | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/client/components/Search/Search.vue b/client/components/Search/Search.vue index b0283f5..6164c78 100644 --- a/client/components/Search/Search.vue +++ b/client/components/Search/Search.vue @@ -2,7 +2,7 @@
- +
{{ loadingMessage }}
@@ -10,7 +10,7 @@
- +
{{ loadingMessage2 }}
@@ -140,9 +140,9 @@
-
- Загрузка +
+
Обработка...
@@ -739,7 +739,8 @@ class Search { this.getBooksFlag = 0; this.getBooksFlag++; - item.bookLoading = true; + if (item.count > maxItemCount) + item.bookLoading = true; try { if (this.getBooksFlag == 1) { diff --git a/client/quasar.js b/client/quasar.js index 0e3de94..7c7a855 100644 --- a/client/quasar.js +++ b/client/quasar.js @@ -23,7 +23,7 @@ import {QIcon} from 'quasar/src/components/icon'; //import {QList} from 'quasar/src/components/item'; //import {QItem, QItemSection, QItemLabel} from 'quasar/src/components/item'; import {QTooltip} from 'quasar/src/components/tooltip'; -import {QSpinner} from 'quasar/src/components/spinner'; +//import {QSpinner} from 'quasar/src/components/spinner'; //import {QTable, QTh, QTr, QTd} from 'quasar/src/components/table'; import {QCheckbox} from 'quasar/src/components/checkbox'; import {QSelect} from 'quasar/src/components/select'; @@ -56,7 +56,7 @@ const components = { //QList, //QItem, QItemSection, QItemLabel, QTooltip, - QSpinner, + //QSpinner, //QTable, QTh, QTr, QTd, QCheckbox, QSelect, diff --git a/client/store/root.js b/client/store/root.js index c335931..74b6e57 100644 --- a/client/store/root.js +++ b/client/store/root.js @@ -2,7 +2,7 @@ const state = { config: {}, settings: { - limit: 50, + limit: 20, expanded: [], expandedSeries: [], showCounts: true, From 5e3fe21c255cbf7066e8e6a087ee16aee82ca9f0 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sun, 25 Sep 2022 13:35:23 +0700 Subject: [PATCH 097/177] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=20limit=20=D0=B2=20routeQuery?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Search/Search.vue | 107 +++++++++++++++------------- 1 file changed, 56 insertions(+), 51 deletions(-) diff --git a/client/components/Search/Search.vue b/client/components/Search/Search.vue index 6164c78..8b3d3eb 100644 --- a/client/components/Search/Search.vue +++ b/client/components/Search/Search.vue @@ -142,7 +142,9 @@
-
Обработка...
+
+ Обработка... +
@@ -327,7 +329,7 @@ class Search { showDeleted = false; abCacheEnabled = true; langDefault = ''; - limit = 50; + limit = 20; //stuff refreshing = false; @@ -565,6 +567,57 @@ class Search { this.commit('setSettings', {[name]: _.cloneDeep(newValue)}); } + setDefaults() { + this.search = Object.assign({}, this.search, { + author: '', + series: '', + title: '', + genre: '', + lang: this.langDefault, + }); + } + + async updateQueryFromRoute(to) { + if (this.routeUpdating) + return; + + const query = to.query; + + this.search = Object.assign({}, this.search, { + author: query.author || '', + series: query.series || '', + title: query.title || '', + genre: query.genre || '', + lang: (query.lang == 'default' ? this.langDefault : query.lang || ''), + page: parseInt(query.page, 10) || 1, + limit: parseInt(query.limit, 10) || 20, + }); + + if (this.search.limit > 1000) + this.search.limit = 1000; + } + + updateRouteQuery() { + this.routeUpdating = true; + try { + const oldQuery = this.$route.query; + const query = _.pickBy(this.search); + + if (this.search.lang == this.langDefault) + query.lang = 'default' + + const diff = diffUtils.getObjDiff(oldQuery, query); + if (!diffUtils.isEmptyObjDiff(diff)) { + this.$router.replace({query}); + } + } finally { + (async() => { + await utils.sleep(100); + this.routeUpdating = false; + })(); + } + } + async expandAuthor(item) { const expanded = _.cloneDeep(this.expanded); const key = item.author; @@ -905,53 +958,6 @@ class Search { this.tableData = result; } - setDefaults() { - this.search = Object.assign({}, this.search, { - author: '', - series: '', - title: '', - genre: '', - lang: this.langDefault, - }); - } - - async updateQueryFromRoute(to) { - if (this.routeUpdating) - return; - - const query = to.query; - - this.search = Object.assign({}, this.search, { - author: query.author || '', - series: query.series || '', - title: query.title || '', - genre: query.genre || '', - lang: (query.lang == 'default' ? this.langDefault : query.lang || ''), - page: parseInt(query.page, 10) || 1, - }); - } - - updateRouteQuery() { - this.routeUpdating = true; - try { - const oldQuery = this.$route.query; - const query = _.pickBy(this.search); - delete query.limit; - if (this.search.lang == this.langDefault) - query.lang = 'default' - - const diff = diffUtils.getObjDiff(oldQuery, query); - if (!diffUtils.isEmptyObjDiff(diff)) { - this.$router.replace({query}); - } - } finally { - (async() => { - await utils.sleep(100); - this.routeUpdating = false; - })(); - } - } - async refresh() { if (!this.ready) return; @@ -978,10 +984,9 @@ class Search { } //параметры запроса - const offset = (this.search.page - 1)*this.limit; + const offset = (this.search.page - 1)*this.search.limit; const newQuery = _.cloneDeep(this.search); - newQuery.limit = this.limit; newQuery.offset = offset; this.queryExecute = newQuery; From 1cfa787e5aa0912e8574eac4737f26d233b70861 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sun, 25 Sep 2022 13:44:58 +0700 Subject: [PATCH 098/177] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9?= =?UTF-8?q?=D0=BA=D0=B0=20"=D0=9F=D0=BE=D0=BA=D0=B0=D0=B7=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D0=B6=D0=B0=D0=BD=D1=80=D1=8B"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Search/BookView/BookView.vue | 18 +++++++++++++++++- client/components/Search/Search.vue | 6 ++++++ client/store/root.js | 1 + 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/client/components/Search/BookView/BookView.vue b/client/components/Search/BookView/BookView.vue index 67833b8..f5e7208 100644 --- a/client/components/Search/BookView/BookView.vue +++ b/client/components/Search/BookView/BookView.vue @@ -17,7 +17,7 @@
-
+
{{ bookGenre }}
@@ -33,6 +33,9 @@ const componentOptions = { components: { }, watch: { + settings() { + this.loadSettings(); + }, } }; class BookView { @@ -42,7 +45,20 @@ class BookView { genreTree: Array, }; + showGenres = true; + created() { + this.loadSettings(); + } + + loadSettings() { + const settings = this.settings; + + this.showGenres = settings.showGenres; + } + + get settings() { + return this.$store.state.settings; } get bookSize() { diff --git a/client/components/Search/Search.vue b/client/components/Search/Search.vue index 8b3d3eb..567e816 100644 --- a/client/components/Search/Search.vue +++ b/client/components/Search/Search.vue @@ -208,6 +208,7 @@
+
@@ -276,6 +277,9 @@ const componentOptions = { showCounts(newValue) { this.setSetting('showCounts', newValue); }, + showGenres(newValue) { + this.setSetting('showGenres', newValue); + }, showDeleted(newValue) { this.setSetting('showDeleted', newValue); this.updateTableData(); @@ -326,6 +330,7 @@ class Search { expanded = []; expandedSeries = []; showCounts = true; + showGenres = true; showDeleted = false; abCacheEnabled = true; langDefault = ''; @@ -389,6 +394,7 @@ class Search { this.expanded = _.cloneDeep(settings.expanded); this.expandedSeries = _.cloneDeep(settings.expandedSeries); this.showCounts = settings.showCounts; + this.showGenres = settings.showGenres; this.showDeleted = settings.showDeleted; this.abCacheEnabled = settings.abCacheEnabled; this.langDefault = settings.langDefault; diff --git a/client/store/root.js b/client/store/root.js index 74b6e57..ee7baa9 100644 --- a/client/store/root.js +++ b/client/store/root.js @@ -6,6 +6,7 @@ const state = { expanded: [], expandedSeries: [], showCounts: true, + showGenres: true, showDeleted: false, abCacheEnabled: true, langDefault: '', From 7e5ea30579910241062200d09a30662d88ab8fab Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sun, 25 Sep 2022 16:12:54 +0700 Subject: [PATCH 099/177] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/controllers/WebSocketController.js | 11 +++ server/core/DbCreator.js | 3 + server/core/WebWorker.js | 93 ++++++++++++++++++++++- server/core/utils.js | 5 ++ server/index.js | 35 +++++++-- 5 files changed, 140 insertions(+), 7 deletions(-) diff --git a/server/controllers/WebSocketController.js b/server/controllers/WebSocketController.js index 43e7d5b..939270f 100644 --- a/server/controllers/WebSocketController.js +++ b/server/controllers/WebSocketController.js @@ -72,6 +72,8 @@ class WebSocketController { await this.getBookList(req, ws); break; case 'get-genre-tree': await this.getGenreTree(req, ws); break; + case 'get-book-link': + await this.getBookLink(req, ws); break; default: throw new Error(`Action not found: ${req.action}`); @@ -141,6 +143,15 @@ class WebSocketController { this.send(result, req, ws); } + + async getBookLink(req, ws) { + if (!utils.hasProp(req, 'bookPath')) + throw new Error(`bookPath is empty`); + + const result = await this.webWorker.getBookLink(req.bookPath); + + this.send(result, req, ws); + } } module.exports = WebSocketController; diff --git a/server/core/DbCreator.js b/server/core/DbCreator.js index 1a536f6..6becb12 100644 --- a/server/core/DbCreator.js +++ b/server/core/DbCreator.js @@ -442,6 +442,9 @@ class DbCreator { await db.create({table: 'query_cache'}); await db.create({table: 'query_time'}); + //кэш-таблица имен файлов и их хешей + await db.create({table: 'file_hash'}); + callback({job: 'done', jobMessage: ''}); } } diff --git a/server/core/WebWorker.js b/server/core/WebWorker.js index 60b1840..cca0a6a 100644 --- a/server/core/WebWorker.js +++ b/server/core/WebWorker.js @@ -1,7 +1,9 @@ const os = require('os'); +const path = require('path'); const fs = require('fs-extra'); const _ = require('lodash'); +const ZipReader = require('./ZipReader'); const WorkerState = require('./WorkerState'); const { JembaDbThread } = require('jembadb'); const DbCreator = require('./DbCreator'); @@ -263,6 +265,95 @@ class WebWorker { return result; } + async extractBook(bookPath) { + const tempDir = this.config.tempDir; + const outFile = `${tempDir}/${utils.randomHexString(30)}`; + + const folder = path.dirname(bookPath); + const file = path.basename(bookPath); + + const zipReader = new ZipReader(); + await zipReader.open(folder); + + try { + await zipReader.extractToFile(file, outFile); + return outFile; + } finally { + zipReader.close(); + } + } + + async restoreBook(bookPath) { + const db = this.db; + const publicDir = this.config.publicDir; + + const extractedFile = await this.extractBook(bookPath); + + const hash = await utils.getFileHash(extractedFile, 'sha256', 'hex'); + const link = `/files/${hash}`; + const publicPath = `${publicDir}${link}`; + + if (!await fs.pathExists(publicPath)) { + await fs.move(extractedFile, publicPath); + } else { + await fs.remove(extractedFile); + } + + await db.insert({ + table: 'file_hash', + replace: true, + rows: [ + {id: bookPath, hash}, + {id: hash, bookPath} + ] + }); + + return link; + } + + async getBookLink(bookPath) { + this.checkMyState(); + + const db = this.db; + const publicDir = this.config.publicDir; + let link = ''; + + //найдем хеш + const rows = await db.select({table: 'file_hash', where: `@@id(${db.esc(bookPath)})`}); + if (rows.length) {//хеш найден по bookPath + const hash = rows[0].hash; + link = `/files/${hash}`; + const publicPath = `${publicDir}${link}`; + + if (!await fs.pathExists(publicPath)) { + link = ''; + } + } + + if (!link) { + link = await this.restoreBook(bookPath) + } + + if (!link) + throw new Error('404 Файл не найден'); + + return {link}; + } + + async restoreBookFile(publicPath) { + const db = this.db; + const hash = path.basename(publicPath); + + //найдем bookPath + const rows = await db.select({table: 'file_hash', where: `@@id(${db.esc(hash)})`}); + if (rows.length) {//bookPath найден по хешу + const bookPath = rows[0].bookPath; + await this.restoreBook(bookPath); + } else {//bookPath не найден + throw new Error('404 Файл не найден'); + } + } + async logServerStats() { while (1) {// eslint-disable-line try { @@ -274,7 +365,7 @@ class WebWorker { } catch (e) { log(LM_ERR, e.message); } - await utils.sleep(5000); + await utils.sleep(5*1000); } } } diff --git a/server/core/utils.js b/server/core/utils.js index 0411130..d2c276a 100644 --- a/server/core/utils.js +++ b/server/core/utils.js @@ -89,6 +89,10 @@ function intersectSet(arrSet) { return result; } +function randomHexString(len) { + return crypto.randomBytes(len).toString('hex') +} + module.exports = { sleep, versionText, @@ -99,4 +103,5 @@ module.exports = { getFileHash, getBufHash, intersectSet, + randomHexString, }; \ No newline at end of file diff --git a/server/index.js b/server/index.js index 69cda7c..222667f 100644 --- a/server/index.js +++ b/server/index.js @@ -149,19 +149,42 @@ async function main() { }); } -function initStatic(app, config) {// eslint-disable-line - //загрузка файлов в /files - //TODO +function initStatic(app, config) { + const WebWorker = require('./core/WebWorker');//singleton + const webWorker = new WebWorker(config); + //загрузка или восстановление файлов в /files, при необходимости + app.use(async(req, res, next) => { + if ((req.method !== 'GET' && req.method !== 'HEAD') || + !(req.path.indexOf('/files/') === 0) + ) { + return next(); + } + + const publicPath = `${config.publicDir}${req.path}`; + + //восстановим + try { + if (!await fs.pathExists(publicPath)) { + await webWorker.restoreBookFile(publicPath); + } + } catch(e) { + log(LM_ERR, `static::restoreBookFile ${req.path} > ${e.message}`); + } + + return next(); + }); + + //заголовки при отдаче + const filesDir = `${config.publicDir}/files`; app.use(express.static(config.publicDir, { maxAge: '30d', - /*setHeaders: (res, filePath) => { + setHeaders: (res, filePath) => { if (path.dirname(filePath) == filesDir) { - res.set('Content-Type', 'application/xml'); res.set('Content-Encoding', 'gzip'); } - },*/ + }, })); } From e6d0c6e5193ca77585152926ffc2a31bfbe8e7d5 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sun, 25 Sep 2022 17:27:40 +0700 Subject: [PATCH 100/177] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Api/Api.vue | 10 ++ .../components/Search/BookView/BookView.vue | 2 + client/components/Search/Search.vue | 65 ++++++++----- server/core/InpxParser.js | 2 +- server/core/WebWorker.js | 95 ++++++++++++------- server/core/ZipReader.js | 4 +- server/index.js | 2 +- 7 files changed, 117 insertions(+), 63 deletions(-) diff --git a/client/components/Api/Api.vue b/client/components/Api/Api.vue index 924c2cf..014c0c1 100644 --- a/client/components/Api/Api.vue +++ b/client/components/Api/Api.vue @@ -166,6 +166,16 @@ class Api { return response; } + async getBookLink(bookPath) { + const response = await this.request({action: 'get-book-link', bookPath}); + + if (response.error) { + throw new Error(response.error); + } + + return response; + } + async getConfig() { const response = await this.request({action: 'get-config'}); diff --git a/client/components/Search/BookView/BookView.vue b/client/components/Search/BookView/BookView.vue index f5e7208..6694e7a 100644 --- a/client/components/Search/BookView/BookView.vue +++ b/client/components/Search/BookView/BookView.vue @@ -89,9 +89,11 @@ class BookView { } download() { + this.$emit('bookEvent', {action: 'download', book: this.book}); } copyLink() { + this.$emit('bookEvent', {action: 'copyLink', book: this.book}); } } diff --git a/client/components/Search/Search.vue b/client/components/Search/Search.vue index 567e816..b9f16d8 100644 --- a/client/components/Search/Search.vue +++ b/client/components/Search/Search.vue @@ -148,8 +148,8 @@
-
-
+
+
@@ -168,7 +168,7 @@
- +
@@ -528,7 +528,7 @@ class Search { if (item.books) { let count = 0; for (const book of item.books) { - if (book.type == 'series') + if (book._type == 'series') count += book.books.length; else count++; @@ -553,11 +553,31 @@ class Search { this.search.title = ''; } + async download(book, copy = false) { + try { + const bookPath = `${book.folder}/${book.file}.${book.ext}`; + const response = await this.api.getBookLink(bookPath); + + if (!copy) { + // + } +console.log(response); + } catch(e) { + this.$root.stdDialog.alert(e.message, 'Ошибка'); + } + } + bookEvent(event) { switch (event.action) { case 'titleClick': this.search.title = `=${event.book.title}`; break; + case 'download': + this.download(event.book);//no await + break; + case 'copyLink': + this.download(event.book, true);//no await + break; } } @@ -566,7 +586,7 @@ class Search { } isExpandedSeries(seriesItem) { - return this.expandedSeries.indexOf(seriesItem.key) >= 0; + return this.expandedSeries.indexOf(seriesItem._key) >= 0; } setSetting(name, newValue) { @@ -650,7 +670,7 @@ class Search { expandSeries(seriesItem) { const expandedSeries = _.cloneDeep(this.expandedSeries); - const key = seriesItem.key; + const key = seriesItem._key; if (!this.isExpandedSeries(seriesItem)) { expandedSeries.push(key); @@ -815,18 +835,13 @@ class Search { const filtered = this.filterBooks(loadedBooks); const prepareBook = (book) => { - return { - key: book.id, - type: 'book', - title: book.title, - series: book.series, - serno: book.serno, - genre: book.genre, - size: book.size, - ext: book.ext, - - src: book, - } + return Object.assign( + { + _key: book.id, + _type: 'book', + }, + book + ); }; //объединение по сериям @@ -838,8 +853,8 @@ class Search { if (index === undefined) { index = books.length; books.push({ - key: `${item.author}-${book.series}`, - type: 'series', + _key: `${item.author}-${book.series}`, + _type: 'series', series: book.series, books: [], @@ -856,16 +871,16 @@ class Search { //сортировка books.sort((a, b) => { - if (a.type == 'series') { - return (b.type == 'series' ? a.key.localeCompare(b.key) : -1); + if (a._type == 'series') { + return (b._type == 'series' ? a._key.localeCompare(b._key) : -1); } else { - return (b.type == 'book' ? a.title.localeCompare(b.title) : 1); + return (b._type == 'book' ? a.title.localeCompare(b.title) : 1); } }); //сортировка внутри серий for (const book of books) { - if (book.type == 'series') { + if (book._type == 'series') { book.books.sort((a, b) => { const dserno = (a.serno || Number.MAX_VALUE) - (b.serno || Number.MAX_VALUE); const dtitle = a.title.localeCompare(b.title); @@ -875,7 +890,7 @@ class Search { } } - if (books.length == 1 && books[0].type == 'series' && !this.isExpandedSeries(books[0])) { + if (books.length == 1 && books[0]._type == 'series' && !this.isExpandedSeries(books[0])) { this.expandSeries(books[0]); } diff --git a/server/core/InpxParser.js b/server/core/InpxParser.js index ae455fa..68dc179 100644 --- a/server/core/InpxParser.js +++ b/server/core/InpxParser.js @@ -80,7 +80,7 @@ class InpxParser { } } finally { - zipReader.close(); + await zipReader.close(); } } diff --git a/server/core/WebWorker.js b/server/core/WebWorker.js index cca0a6a..6940403 100644 --- a/server/core/WebWorker.js +++ b/server/core/WebWorker.js @@ -1,6 +1,7 @@ const os = require('os'); const path = require('path'); const fs = require('fs-extra'); +const zlib = require('zlib'); const _ = require('lodash'); const ZipReader = require('./ZipReader'); @@ -269,7 +270,7 @@ class WebWorker { const tempDir = this.config.tempDir; const outFile = `${tempDir}/${utils.randomHexString(30)}`; - const folder = path.dirname(bookPath); + const folder = `${this.config.libDir}/${path.dirname(bookPath)}`; const file = path.basename(bookPath); const zipReader = new ZipReader(); @@ -279,22 +280,35 @@ class WebWorker { await zipReader.extractToFile(file, outFile); return outFile; } finally { - zipReader.close(); + await zipReader.close(); } } + async gzipFile(inputFile, outputFile, level = 1) { + return new Promise((resolve, reject) => { + const gzip = zlib.createGzip({level}); + const input = fs.createReadStream(inputFile); + const output = fs.createWriteStream(outputFile); + + input.pipe(gzip).pipe(output).on('finish', (err) => { + if (err) reject(err); + else resolve(); + }); + }); + } + async restoreBook(bookPath) { const db = this.db; - const publicDir = this.config.publicDir; const extractedFile = await this.extractBook(bookPath); const hash = await utils.getFileHash(extractedFile, 'sha256', 'hex'); const link = `/files/${hash}`; - const publicPath = `${publicDir}${link}`; + const publicPath = `${this.config.publicDir}${link}`; if (!await fs.pathExists(publicPath)) { - await fs.move(extractedFile, publicPath); + await fs.ensureDir(path.dirname(publicPath)); + await this.gzipFile(extractedFile, publicPath, 4); } else { await fs.remove(extractedFile); } @@ -314,43 +328,56 @@ class WebWorker { async getBookLink(bookPath) { this.checkMyState(); - const db = this.db; - const publicDir = this.config.publicDir; - let link = ''; + try { + const db = this.db; + let link = ''; - //найдем хеш - const rows = await db.select({table: 'file_hash', where: `@@id(${db.esc(bookPath)})`}); - if (rows.length) {//хеш найден по bookPath - const hash = rows[0].hash; - link = `/files/${hash}`; - const publicPath = `${publicDir}${link}`; + //найдем хеш + const rows = await db.select({table: 'file_hash', where: `@@id(${db.esc(bookPath)})`}); + if (rows.length) {//хеш найден по bookPath + const hash = rows[0].hash; + link = `/files/${hash}`; + const publicPath = `${this.config.publicDir}${link}`; - if (!await fs.pathExists(publicPath)) { - link = ''; + if (!await fs.pathExists(publicPath)) { + link = ''; + } } + + if (!link) { + link = await this.restoreBook(bookPath) + } + + if (!link) + throw new Error('404 Файл не найден'); + + return {link}; + } catch(e) { + log(LM_ERR, `getBookLink error: ${e.message}`); + if (e.message.indexOf('ENOENT') >= 0) + throw new Error('404 Файл не найден'); + throw e; } - - if (!link) { - link = await this.restoreBook(bookPath) - } - - if (!link) - throw new Error('404 Файл не найден'); - - return {link}; } async restoreBookFile(publicPath) { - const db = this.db; - const hash = path.basename(publicPath); + try { + const db = this.db; + const hash = path.basename(publicPath); - //найдем bookPath - const rows = await db.select({table: 'file_hash', where: `@@id(${db.esc(hash)})`}); - if (rows.length) {//bookPath найден по хешу - const bookPath = rows[0].bookPath; - await this.restoreBook(bookPath); - } else {//bookPath не найден - throw new Error('404 Файл не найден'); + //найдем bookPath + const rows = await db.select({table: 'file_hash', where: `@@id(${db.esc(hash)})`}); + if (rows.length) {//bookPath найден по хешу + const bookPath = rows[0].bookPath; + await this.restoreBook(bookPath); + } else {//bookPath не найден + throw new Error('404 Файл не найден'); + } + } catch(e) { + log(LM_ERR, `restoreBookFile error: ${e.message}`); + if (e.message.indexOf('ENOENT') >= 0) + throw new Error('404 Файл не найден'); + throw e; } } diff --git a/server/core/ZipReader.js b/server/core/ZipReader.js index 1693144..698baa4 100644 --- a/server/core/ZipReader.js +++ b/server/core/ZipReader.js @@ -46,9 +46,9 @@ class ZipReader { await this.zip.extract(null, outputDir); } - close() { + async close() { if (this.zip) { - this.zip.close(); + await this.zip.close(); this.zip = null; this.zipEntries = undefined; } diff --git a/server/index.js b/server/index.js index 222667f..e68f80f 100644 --- a/server/index.js +++ b/server/index.js @@ -169,7 +169,7 @@ function initStatic(app, config) { await webWorker.restoreBookFile(publicPath); } } catch(e) { - log(LM_ERR, `static::restoreBookFile ${req.path} > ${e.message}`); + //quiet } return next(); From 66e5985335cb263e86c3744fd04de44ca5426328 Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Sun, 25 Sep 2022 17:53:44 +0700 Subject: [PATCH 101/177] =?UTF-8?q?=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B4=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/components/Search/Search.vue | 27 ++++++++++++++++++++++++--- client/quasar.js | 4 ++-- client/share/utils.js | 12 ++++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/client/components/Search/Search.vue b/client/components/Search/Search.vue index b9f16d8..f37308f 100644 --- a/client/components/Search/Search.vue +++ b/client/components/Search/Search.vue @@ -1,5 +1,6 @@