From 3f3351a1c9fe40658522d7c42e3c1171ced04384 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 17:27:16 +0100 Subject: [PATCH 01/60] Created New Version --- .eslintignore | 1 + .eslintrc.json | 13 +++ .github/workflows/codeql-analysis.yml | 34 ++++++++ .github/workflows/main.yml | 97 ++++++---------------- action.yml | 22 +++-- index.js | 11 +++ lib/setup.js | 114 ++++++++++++++++++++++++++ package.json | 25 ++++++ 8 files changed, 237 insertions(+), 80 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 .github/workflows/codeql-analysis.yml create mode 100644 index.js create mode 100644 lib/setup.js create mode 100644 package.json diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..849ddff --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +dist/ diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..286cc8a --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,13 @@ +{ + "env": { + "commonjs": true, + "es6": true, + "jest": true, + "node": true + }, + "extends": "eslint:recommended", + "parserOptions": { + "ecmaVersion": 2018 + }, + "rules": {} +} diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000..9a3de10 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,34 @@ +name: "CodeQL" + +on: + push: + branches: [ main, ft/2.0.0 ] + pull_request: + branches: [ main, ft/2.0.0 ] + schedule: + - cron: '38 18 * * 3' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + language: [ 'javascript' ] + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index dade039..64891bc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,82 +1,35 @@ -name: CI - +name: "Tests" on: push: - branches: - - master # Push events on master branch - pull_request: # Run tests for any PRs - -env: - IMAGE_NAME: cfn-lint-action - + branches: + - main + - ft/2.0.0 + pull_request: jobs: - # Run tests. - test: + unit: + name: npm test runs-on: ubuntu-latest - steps: - uses: actions/checkout@v2 - - - name: Docker build - run: docker build . --file Dockerfile --tag image - - - name: Docker run - run: docker run --entrypoint cfn-lint image -v - - lint: - # Name the Job - name: Lint Code Base - # Set the agent to run on - runs-on: ubuntu-latest - - ################## - # Load all steps # - ################## - steps: - ########################## - # Checkout the code base # - ########################## - - name: Checkout Code - uses: actions/checkout@v2 - - ################################ - # Run Linter against code base # - ################################ - - name: Lint Code Base - uses: docker://github/super-linter:v2.2.0 - env: - VALIDATE_ALL_CODEBASE: true - - # Push image to GitHub Packages. - # See also https://docs.docker.com/docker-hub/builds/ - push: - # Ensure test job passes before pushing image. - needs: test - - runs-on: ubuntu-latest - if: github.event_name == 'push' - + - uses: actions/setup-node@v2 + - run: npm ci + + integ: + strategy: + fail-fast: false + matrix: + os: + - ubuntu-18.04 + - ubuntu-20.04 + name: ${{ matrix.os }} + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v2 - - name: Build image - run: docker build . --file Dockerfile --tag $IMAGE_NAME - - - name: Log into GitHub Container Registry - run: echo "${{ secrets.CFN_CR_PAT }}" | docker login https://ghcr.io -u ${{ github.actor }} --password-stdin + - uses: ./ + with: + version: "0.44.5" + - run: cfn-lint --version | grep -F 1.18.2 - - name: Push image to GitHub Container Registry - run: | - IMAGE_ID=ghcr.io/${{ github.repository_owner }}/$IMAGE_NAME - # Change all uppercase to lowercase - IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') - SHA="${{ github.sha }}" - # Strip git ref prefix from version - REF=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') - echo IMAGE_ID=$IMAGE_ID - echo SHA=$SHA - echo REF=$REF - docker tag $IMAGE_NAME $IMAGE_ID:$SHA - docker tag $IMAGE_NAME $IMAGE_ID:$REF - docker push $IMAGE_ID:$SHA - docker push $IMAGE_ID:$REF + - uses: ./ + - run: cfn-lint --version | grep -Fv 1.18.2 diff --git a/action.yml b/action.yml index 60b85ad..4001070 100644 --- a/action.yml +++ b/action.yml @@ -1,9 +1,15 @@ -name: 'cfn-lint-action' -author: 'Scott Brenner ' -description: 'GitHub Action for CloudFormation Linter' -runs: - using: 'docker' - image: 'Dockerfile' +name: "Setup AWS CFN LINT" +description: "Setup AWS CFN LINT and add it to the PATH" branding: - icon: 'box' - color: 'yellow' + icon: "terminal" + color: "orange" +inputs: + version: + description: "The AWS CFN LINT version to install" + required: false + python: + description: "The Python interpreter to use for AWS CFN LINT" + required: false +runs: + using: "node12" + main: "dist/index.js" diff --git a/index.js b/index.js new file mode 100644 index 0000000..55edb00 --- /dev/null +++ b/index.js @@ -0,0 +1,11 @@ +const core = require("@actions/core"); + +const setup = require("./lib/setup"); + +(async () => { + try { + await setup(); + } catch (error) { + core.setFailed(error.message); + } +})(); diff --git a/lib/setup.js b/lib/setup.js new file mode 100644 index 0000000..00beafc --- /dev/null +++ b/lib/setup.js @@ -0,0 +1,114 @@ +const fs = require("fs"); +const path = require("path"); +const os = require("os"); + +const core = require("@actions/core"); +const exec = require("@actions/exec"); +const io = require("@actions/io"); + +/** + * Returns whether the current platform is Windows. + */ +function isWindows() { + return os.platform() === "win32"; +} + +/** + * Returns a new temporary directory. + */ +function mkdirTemp() { + return fs.mkdtempSync(path.join(os.tmpdir(), "setup-cfn-lint-")); +} + +/** + * Creates a Python virtual environment. + * + * @param {string} python - The Python interpreter to use. + * @param {string} venvPath - The virtual environment directory. + */ +async function createPythonVenv(python, venvPath) { + const pythonPath = await io.which(python, true); + + await exec.exec(pythonPath, ["--version"]); + await exec.exec(pythonPath, ["-m", "venv", venvPath]); +} + +/** + * Installs SAM CLI. + * + * @param {string} python - The Python interpreter to use for SAM CLI. + * @param {string} version - The SAM CLI version to install. + * @returns {Promise} The directory SAM CLI is installed in. + */ +async function installSamCli(python, version) { + const tempPath = mkdirTemp(); + + // Create virtual environment + const venvPath = path.join(tempPath, ".venv"); + await createPythonVenv(python, venvPath); + + // See https://docs.python.org/3/library/venv.html + const binDir = isWindows() ? "Scripts" : "bin"; + const binPath = path.join(venvPath, binDir); + + // Virtual environment Python + const pythonPath = path.join(binPath, "python"); + + // Ensure installation tooling is up-to-date across platforms + // setuptools and wheel needed for source and binary distributions + await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "pip"]); + await exec.exec(pythonPath, [ + "-m", + "pip", + "install", + "--upgrade", + "setuptools", + "wheel", + ]); + + // Install latest compatible version + await exec.exec(pythonPath, [ + "-m", + "pip", + "install", + "--upgrade", + `cfn-lint==${version}`, + ]); + + // Symlink from separate directory so only SAM CLI is added to PATH + const symlinkPath = path.join(tempPath, "bin"); + fs.mkdirSync(symlinkPath); + const sam = isWindows() ? "cfn.exe" : "sam"; + fs.symlinkSync(path.join(binPath, sam), path.join(symlinkPath, sam)); + + return symlinkPath; +} + +/** + * Gets an input value. + * + * @param {string} name - The input value name. + * @param {RegExp} pattern - The input value pattern. + * @param {string} defaultValue - The default value if the input value is empty. + * @returns {string} The input value. + * @throws {Error} Throws if the input value doesn't match `pattern`. + */ +function getInput(name, pattern, defaultValue) { + const value = core.getInput(name) || defaultValue; + if (!pattern.test(value)) { + throw new Error(`${name} doesn't match ${pattern}`); + } + return value; +} + +async function setup() { + const version = getInput("version", /^[\d.*]+$/, "1.*"); + // python3 isn't standard on Windows + const defaultPython = isWindows() ? "python" : "python3"; + const python = getInput("python", /^.+$/, defaultPython); + + const binPath = await installSamCli(python, version); + core.addPath(binPath); +} + +module.exports = setup; diff --git a/package.json b/package.json new file mode 100644 index 0000000..ef09657 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "setup-cfn-lint", + "version": "0.1.0", + "private": true, + "description": "Action to setup Cloud Formation to the the PATH", + "main": "index.js", + "scripts": { + "test": "jest && eslint . && prettier --check .", + "build": "ncc build index.js --out dist --license licenses.txt", + "format": "prettier --write .", + "all": "npm run format && npm test && npm run build" + }, + "license": "Apache-2.0", + "dependencies": { + "@actions/core": "^1.2.6", + "@actions/exec": "^1.0.4", + "@actions/io": "^1.0.2" + }, + "devDependencies": { + "@vercel/ncc": "^0.27.0", + "eslint": "^7.20.0", + "jest": "^26.6.3", + "prettier": "2.2.1" + } +} From cb7854543236ed277c903822e4eb1d374c0088bd Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 17:33:56 +0100 Subject: [PATCH 02/60] Pushing build --- .dockerignore | 8 - .gitignore | 1 + Dockerfile | 23 - dist/index.js | 1820 +++++++ dist/licenses.txt | 26 + entrypoint.sh | 9 - package-lock.json | 12438 ++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 14285 insertions(+), 40 deletions(-) delete mode 100644 .dockerignore create mode 100644 .gitignore delete mode 100644 Dockerfile create mode 100644 dist/index.js create mode 100644 dist/licenses.txt delete mode 100644 entrypoint.sh create mode 100644 package-lock.json diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index aa41a89..0000000 --- a/.dockerignore +++ /dev/null @@ -1,8 +0,0 @@ -# ignore all files by default -* -# include required files with an exception -!cfn-lint.json -!entrypoint.sh -!LICENSE -!README.md -!THIRD_PARTY_NOTICE.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 2646390..0000000 --- a/Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -FROM python:3.9.4-alpine - -LABEL name="cfn-lint-action" -LABEL repository="https://github.com/ScottBrenner/cfn-lint-action" -LABEL homepage="https://github.com/ScottBrenner/cfn-lint-action" -LABEL org.opencontainers.image.source="https://github.com/ScottBrenner/cfn-lint-action" - -LABEL "com.github.actions.name"="cfn-lint-action" -LABEL "com.github.actions.description"="GitHub Action for CloudFormation Linter" -LABEL "com.github.actions.icon"="box" -LABEL "com.github.actions.color"="green" - -LABEL "maintainer"="Scott Brenner " - -RUN pip install cfn-lint --no-cache-dir -RUN cfn-lint --update-specs -RUN cfn-lint --update-iam-policies - -COPY cfn-lint.json /cfn-lint.json -COPY entrypoint.sh /entrypoint.sh -RUN ["chmod", "+x", "/entrypoint.sh"] -ENTRYPOINT ["/entrypoint.sh"] -CMD ["**/*.yml"] diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..ed50941 --- /dev/null +++ b/dist/index.js @@ -0,0 +1,1820 @@ +module.exports = +/******/ (() => { // webpackBootstrap +/******/ var __webpack_modules__ = ({ + +/***/ 932: +/***/ ((__unused_webpack_module, __unused_webpack_exports, __nccwpck_require__) => { + +const core = __nccwpck_require__(186); + +const setup = __nccwpck_require__(391); + +(async () => { + try { + await setup(); + } catch (error) { + core.setFailed(error.message); + } +})(); + + +/***/ }), + +/***/ 391: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const fs = __nccwpck_require__(747); +const path = __nccwpck_require__(622); +const os = __nccwpck_require__(87); + +const core = __nccwpck_require__(186); +const exec = __nccwpck_require__(514); +const io = __nccwpck_require__(436); + +/** + * Returns whether the current platform is Windows. + */ +function isWindows() { + return os.platform() === "win32"; +} + +/** + * Returns a new temporary directory. + */ +function mkdirTemp() { + return fs.mkdtempSync(path.join(os.tmpdir(), "setup-cfn-lint-")); +} + +/** + * Creates a Python virtual environment. + * + * @param {string} python - The Python interpreter to use. + * @param {string} venvPath - The virtual environment directory. + */ +async function createPythonVenv(python, venvPath) { + const pythonPath = await io.which(python, true); + + await exec.exec(pythonPath, ["--version"]); + await exec.exec(pythonPath, ["-m", "venv", venvPath]); +} + +/** + * Installs SAM CLI. + * + * @param {string} python - The Python interpreter to use for SAM CLI. + * @param {string} version - The SAM CLI version to install. + * @returns {Promise} The directory SAM CLI is installed in. + */ +async function installSamCli(python, version) { + const tempPath = mkdirTemp(); + + // Create virtual environment + const venvPath = path.join(tempPath, ".venv"); + await createPythonVenv(python, venvPath); + + // See https://docs.python.org/3/library/venv.html + const binDir = isWindows() ? "Scripts" : "bin"; + const binPath = path.join(venvPath, binDir); + + // Virtual environment Python + const pythonPath = path.join(binPath, "python"); + + // Ensure installation tooling is up-to-date across platforms + // setuptools and wheel needed for source and binary distributions + await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "pip"]); + await exec.exec(pythonPath, [ + "-m", + "pip", + "install", + "--upgrade", + "setuptools", + "wheel", + ]); + + // Install latest compatible version + await exec.exec(pythonPath, [ + "-m", + "pip", + "install", + "--upgrade", + `cfn-lint==${version}`, + ]); + + // Symlink from separate directory so only SAM CLI is added to PATH + const symlinkPath = path.join(tempPath, "bin"); + fs.mkdirSync(symlinkPath); + const sam = isWindows() ? "cfn.exe" : "sam"; + fs.symlinkSync(path.join(binPath, sam), path.join(symlinkPath, sam)); + + return symlinkPath; +} + +/** + * Gets an input value. + * + * @param {string} name - The input value name. + * @param {RegExp} pattern - The input value pattern. + * @param {string} defaultValue - The default value if the input value is empty. + * @returns {string} The input value. + * @throws {Error} Throws if the input value doesn't match `pattern`. + */ +function getInput(name, pattern, defaultValue) { + const value = core.getInput(name) || defaultValue; + if (!pattern.test(value)) { + throw new Error(`${name} doesn't match ${pattern}`); + } + return value; +} + +async function setup() { + const version = getInput("version", /^[\d.*]+$/, "1.*"); + // python3 isn't standard on Windows + const defaultPython = isWindows() ? "python" : "python3"; + const python = getInput("python", /^.+$/, defaultPython); + + const binPath = await installSamCli(python, version); + core.addPath(binPath); +} + +module.exports = setup; + + +/***/ }), + +/***/ 351: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const os = __importStar(__nccwpck_require__(87)); +const utils_1 = __nccwpck_require__(278); +/** + * Commands + * + * Command Format: + * ::name key=value,key=value::message + * + * Examples: + * ::warning::This is the message + * ::set-env name=MY_VAR::some value + */ +function issueCommand(command, properties, message) { + const cmd = new Command(command, properties, message); + process.stdout.write(cmd.toString() + os.EOL); +} +exports.issueCommand = issueCommand; +function issue(name, message = '') { + issueCommand(name, {}, message); +} +exports.issue = issue; +const CMD_STRING = '::'; +class Command { + constructor(command, properties, message) { + if (!command) { + command = 'missing.command'; + } + this.command = command; + this.properties = properties; + this.message = message; + } + toString() { + let cmdStr = CMD_STRING + this.command; + if (this.properties && Object.keys(this.properties).length > 0) { + cmdStr += ' '; + let first = true; + for (const key in this.properties) { + if (this.properties.hasOwnProperty(key)) { + const val = this.properties[key]; + if (val) { + if (first) { + first = false; + } + else { + cmdStr += ','; + } + cmdStr += `${key}=${escapeProperty(val)}`; + } + } + } + } + cmdStr += `${CMD_STRING}${escapeData(this.message)}`; + return cmdStr; + } +} +function escapeData(s) { + return utils_1.toCommandValue(s) + .replace(/%/g, '%25') + .replace(/\r/g, '%0D') + .replace(/\n/g, '%0A'); +} +function escapeProperty(s) { + return utils_1.toCommandValue(s) + .replace(/%/g, '%25') + .replace(/\r/g, '%0D') + .replace(/\n/g, '%0A') + .replace(/:/g, '%3A') + .replace(/,/g, '%2C'); +} +//# sourceMappingURL=command.js.map + +/***/ }), + +/***/ 186: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const command_1 = __nccwpck_require__(351); +const file_command_1 = __nccwpck_require__(717); +const utils_1 = __nccwpck_require__(278); +const os = __importStar(__nccwpck_require__(87)); +const path = __importStar(__nccwpck_require__(622)); +/** + * The code to exit an action + */ +var ExitCode; +(function (ExitCode) { + /** + * A code indicating that the action was successful + */ + ExitCode[ExitCode["Success"] = 0] = "Success"; + /** + * A code indicating that the action was a failure + */ + ExitCode[ExitCode["Failure"] = 1] = "Failure"; +})(ExitCode = exports.ExitCode || (exports.ExitCode = {})); +//----------------------------------------------------------------------- +// Variables +//----------------------------------------------------------------------- +/** + * Sets env variable for this action and future actions in the job + * @param name the name of the variable to set + * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function exportVariable(name, val) { + const convertedVal = utils_1.toCommandValue(val); + process.env[name] = convertedVal; + const filePath = process.env['GITHUB_ENV'] || ''; + if (filePath) { + const delimiter = '_GitHubActionsFileCommandDelimeter_'; + const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`; + file_command_1.issueCommand('ENV', commandValue); + } + else { + command_1.issueCommand('set-env', { name }, convertedVal); + } +} +exports.exportVariable = exportVariable; +/** + * Registers a secret which will get masked from logs + * @param secret value of the secret + */ +function setSecret(secret) { + command_1.issueCommand('add-mask', {}, secret); +} +exports.setSecret = setSecret; +/** + * Prepends inputPath to the PATH (for this action and future actions) + * @param inputPath + */ +function addPath(inputPath) { + const filePath = process.env['GITHUB_PATH'] || ''; + if (filePath) { + file_command_1.issueCommand('PATH', inputPath); + } + else { + command_1.issueCommand('add-path', {}, inputPath); + } + process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`; +} +exports.addPath = addPath; +/** + * Gets the value of an input. The value is also trimmed. + * + * @param name name of the input to get + * @param options optional. See InputOptions. + * @returns string + */ +function getInput(name, options) { + const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || ''; + if (options && options.required && !val) { + throw new Error(`Input required and not supplied: ${name}`); + } + return val.trim(); +} +exports.getInput = getInput; +/** + * Sets the value of an output. + * + * @param name name of the output to set + * @param value value to store. Non-string values will be converted to a string via JSON.stringify + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function setOutput(name, value) { + process.stdout.write(os.EOL); + command_1.issueCommand('set-output', { name }, value); +} +exports.setOutput = setOutput; +/** + * Enables or disables the echoing of commands into stdout for the rest of the step. + * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set. + * + */ +function setCommandEcho(enabled) { + command_1.issue('echo', enabled ? 'on' : 'off'); +} +exports.setCommandEcho = setCommandEcho; +//----------------------------------------------------------------------- +// Results +//----------------------------------------------------------------------- +/** + * Sets the action status to failed. + * When the action exits it will be with an exit code of 1 + * @param message add error issue message + */ +function setFailed(message) { + process.exitCode = ExitCode.Failure; + error(message); +} +exports.setFailed = setFailed; +//----------------------------------------------------------------------- +// Logging Commands +//----------------------------------------------------------------------- +/** + * Gets whether Actions Step Debug is on or not + */ +function isDebug() { + return process.env['RUNNER_DEBUG'] === '1'; +} +exports.isDebug = isDebug; +/** + * Writes debug message to user log + * @param message debug message + */ +function debug(message) { + command_1.issueCommand('debug', {}, message); +} +exports.debug = debug; +/** + * Adds an error issue + * @param message error issue message. Errors will be converted to string via toString() + */ +function error(message) { + command_1.issue('error', message instanceof Error ? message.toString() : message); +} +exports.error = error; +/** + * Adds an warning issue + * @param message warning issue message. Errors will be converted to string via toString() + */ +function warning(message) { + command_1.issue('warning', message instanceof Error ? message.toString() : message); +} +exports.warning = warning; +/** + * Writes info to log with console.log. + * @param message info message + */ +function info(message) { + process.stdout.write(message + os.EOL); +} +exports.info = info; +/** + * Begin an output group. + * + * Output until the next `groupEnd` will be foldable in this group + * + * @param name The name of the output group + */ +function startGroup(name) { + command_1.issue('group', name); +} +exports.startGroup = startGroup; +/** + * End an output group. + */ +function endGroup() { + command_1.issue('endgroup'); +} +exports.endGroup = endGroup; +/** + * Wrap an asynchronous function call in a group. + * + * Returns the same type as the function itself. + * + * @param name The name of the group + * @param fn The function to wrap in the group + */ +function group(name, fn) { + return __awaiter(this, void 0, void 0, function* () { + startGroup(name); + let result; + try { + result = yield fn(); + } + finally { + endGroup(); + } + return result; + }); +} +exports.group = group; +//----------------------------------------------------------------------- +// Wrapper action state +//----------------------------------------------------------------------- +/** + * Saves state for current action, the state can only be retrieved by this action's post job execution. + * + * @param name name of the state to store + * @param value value to store. Non-string values will be converted to a string via JSON.stringify + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function saveState(name, value) { + command_1.issueCommand('save-state', { name }, value); +} +exports.saveState = saveState; +/** + * Gets the value of an state set by this action's main execution. + * + * @param name name of the state to get + * @returns string + */ +function getState(name) { + return process.env[`STATE_${name}`] || ''; +} +exports.getState = getState; +//# sourceMappingURL=core.js.map + +/***/ }), + +/***/ 717: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +// For internal use, subject to change. +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +// We use any as a valid input type +/* eslint-disable @typescript-eslint/no-explicit-any */ +const fs = __importStar(__nccwpck_require__(747)); +const os = __importStar(__nccwpck_require__(87)); +const utils_1 = __nccwpck_require__(278); +function issueCommand(command, message) { + const filePath = process.env[`GITHUB_${command}`]; + if (!filePath) { + throw new Error(`Unable to find environment variable for file command ${command}`); + } + if (!fs.existsSync(filePath)) { + throw new Error(`Missing file at path: ${filePath}`); + } + fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, { + encoding: 'utf8' + }); +} +exports.issueCommand = issueCommand; +//# sourceMappingURL=file-command.js.map + +/***/ }), + +/***/ 278: +/***/ ((__unused_webpack_module, exports) => { + +"use strict"; + +// We use any as a valid input type +/* eslint-disable @typescript-eslint/no-explicit-any */ +Object.defineProperty(exports, "__esModule", ({ value: true })); +/** + * Sanitizes an input into a string so it can be passed into issueCommand safely + * @param input input to sanitize into a string + */ +function toCommandValue(input) { + if (input === null || input === undefined) { + return ''; + } + else if (typeof input === 'string' || input instanceof String) { + return input; + } + return JSON.stringify(input); +} +exports.toCommandValue = toCommandValue; +//# sourceMappingURL=utils.js.map + +/***/ }), + +/***/ 514: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const tr = __importStar(__nccwpck_require__(159)); +/** + * Exec a command. + * Output will be streamed to the live console. + * Returns promise with return code + * + * @param commandLine command to execute (can include additional args). Must be correctly escaped. + * @param args optional arguments for tool. Escaping is handled by the lib. + * @param options optional exec options. See ExecOptions + * @returns Promise exit code + */ +function exec(commandLine, args, options) { + return __awaiter(this, void 0, void 0, function* () { + const commandArgs = tr.argStringToArray(commandLine); + if (commandArgs.length === 0) { + throw new Error(`Parameter 'commandLine' cannot be null or empty.`); + } + // Path to tool to execute should be first arg + const toolPath = commandArgs[0]; + args = commandArgs.slice(1).concat(args || []); + const runner = new tr.ToolRunner(toolPath, args, options); + return runner.exec(); + }); +} +exports.exec = exec; +//# sourceMappingURL=exec.js.map + +/***/ }), + +/***/ 159: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const os = __importStar(__nccwpck_require__(87)); +const events = __importStar(__nccwpck_require__(614)); +const child = __importStar(__nccwpck_require__(129)); +const path = __importStar(__nccwpck_require__(622)); +const io = __importStar(__nccwpck_require__(436)); +const ioUtil = __importStar(__nccwpck_require__(962)); +/* eslint-disable @typescript-eslint/unbound-method */ +const IS_WINDOWS = process.platform === 'win32'; +/* + * Class for running command line tools. Handles quoting and arg parsing in a platform agnostic way. + */ +class ToolRunner extends events.EventEmitter { + constructor(toolPath, args, options) { + super(); + if (!toolPath) { + throw new Error("Parameter 'toolPath' cannot be null or empty."); + } + this.toolPath = toolPath; + this.args = args || []; + this.options = options || {}; + } + _debug(message) { + if (this.options.listeners && this.options.listeners.debug) { + this.options.listeners.debug(message); + } + } + _getCommandString(options, noPrefix) { + const toolPath = this._getSpawnFileName(); + const args = this._getSpawnArgs(options); + let cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool + if (IS_WINDOWS) { + // Windows + cmd file + if (this._isCmdFile()) { + cmd += toolPath; + for (const a of args) { + cmd += ` ${a}`; + } + } + // Windows + verbatim + else if (options.windowsVerbatimArguments) { + cmd += `"${toolPath}"`; + for (const a of args) { + cmd += ` ${a}`; + } + } + // Windows (regular) + else { + cmd += this._windowsQuoteCmdArg(toolPath); + for (const a of args) { + cmd += ` ${this._windowsQuoteCmdArg(a)}`; + } + } + } + else { + // OSX/Linux - this can likely be improved with some form of quoting. + // creating processes on Unix is fundamentally different than Windows. + // on Unix, execvp() takes an arg array. + cmd += toolPath; + for (const a of args) { + cmd += ` ${a}`; + } + } + return cmd; + } + _processLineBuffer(data, strBuffer, onLine) { + try { + let s = strBuffer + data.toString(); + let n = s.indexOf(os.EOL); + while (n > -1) { + const line = s.substring(0, n); + onLine(line); + // the rest of the string ... + s = s.substring(n + os.EOL.length); + n = s.indexOf(os.EOL); + } + strBuffer = s; + } + catch (err) { + // streaming lines to console is best effort. Don't fail a build. + this._debug(`error processing line. Failed with error ${err}`); + } + } + _getSpawnFileName() { + if (IS_WINDOWS) { + if (this._isCmdFile()) { + return process.env['COMSPEC'] || 'cmd.exe'; + } + } + return this.toolPath; + } + _getSpawnArgs(options) { + if (IS_WINDOWS) { + if (this._isCmdFile()) { + let argline = `/D /S /C "${this._windowsQuoteCmdArg(this.toolPath)}`; + for (const a of this.args) { + argline += ' '; + argline += options.windowsVerbatimArguments + ? a + : this._windowsQuoteCmdArg(a); + } + argline += '"'; + return [argline]; + } + } + return this.args; + } + _endsWith(str, end) { + return str.endsWith(end); + } + _isCmdFile() { + const upperToolPath = this.toolPath.toUpperCase(); + return (this._endsWith(upperToolPath, '.CMD') || + this._endsWith(upperToolPath, '.BAT')); + } + _windowsQuoteCmdArg(arg) { + // for .exe, apply the normal quoting rules that libuv applies + if (!this._isCmdFile()) { + return this._uvQuoteCmdArg(arg); + } + // otherwise apply quoting rules specific to the cmd.exe command line parser. + // the libuv rules are generic and are not designed specifically for cmd.exe + // command line parser. + // + // for a detailed description of the cmd.exe command line parser, refer to + // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912 + // need quotes for empty arg + if (!arg) { + return '""'; + } + // determine whether the arg needs to be quoted + const cmdSpecialChars = [ + ' ', + '\t', + '&', + '(', + ')', + '[', + ']', + '{', + '}', + '^', + '=', + ';', + '!', + "'", + '+', + ',', + '`', + '~', + '|', + '<', + '>', + '"' + ]; + let needsQuotes = false; + for (const char of arg) { + if (cmdSpecialChars.some(x => x === char)) { + needsQuotes = true; + break; + } + } + // short-circuit if quotes not needed + if (!needsQuotes) { + return arg; + } + // the following quoting rules are very similar to the rules that by libuv applies. + // + // 1) wrap the string in quotes + // + // 2) double-up quotes - i.e. " => "" + // + // this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately + // doesn't work well with a cmd.exe command line. + // + // note, replacing " with "" also works well if the arg is passed to a downstream .NET console app. + // for example, the command line: + // foo.exe "myarg:""my val""" + // is parsed by a .NET console app into an arg array: + // [ "myarg:\"my val\"" ] + // which is the same end result when applying libuv quoting rules. although the actual + // command line from libuv quoting rules would look like: + // foo.exe "myarg:\"my val\"" + // + // 3) double-up slashes that precede a quote, + // e.g. hello \world => "hello \world" + // hello\"world => "hello\\""world" + // hello\\"world => "hello\\\\""world" + // hello world\ => "hello world\\" + // + // technically this is not required for a cmd.exe command line, or the batch argument parser. + // the reasons for including this as a .cmd quoting rule are: + // + // a) this is optimized for the scenario where the argument is passed from the .cmd file to an + // external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule. + // + // b) it's what we've been doing previously (by deferring to node default behavior) and we + // haven't heard any complaints about that aspect. + // + // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be + // escaped when used on the command line directly - even though within a .cmd file % can be escaped + // by using %%. + // + // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts + // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing. + // + // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would + // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the + // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args + // to an external program. + // + // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file. + // % can be escaped within a .cmd file. + let reverse = '"'; + let quoteHit = true; + for (let i = arg.length; i > 0; i--) { + // walk the string in reverse + reverse += arg[i - 1]; + if (quoteHit && arg[i - 1] === '\\') { + reverse += '\\'; // double the slash + } + else if (arg[i - 1] === '"') { + quoteHit = true; + reverse += '"'; // double the quote + } + else { + quoteHit = false; + } + } + reverse += '"'; + return reverse + .split('') + .reverse() + .join(''); + } + _uvQuoteCmdArg(arg) { + // Tool runner wraps child_process.spawn() and needs to apply the same quoting as + // Node in certain cases where the undocumented spawn option windowsVerbatimArguments + // is used. + // + // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV, + // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details), + // pasting copyright notice from Node within this function: + // + // Copyright Joyent, Inc. and other Node contributors. All rights reserved. + // + // Permission is hereby granted, free of charge, to any person obtaining a copy + // of this software and associated documentation files (the "Software"), to + // deal in the Software without restriction, including without limitation the + // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + // sell copies of the Software, and to permit persons to whom the Software is + // furnished to do so, subject to the following conditions: + // + // The above copyright notice and this permission notice shall be included in + // all copies or substantial portions of the Software. + // + // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + // IN THE SOFTWARE. + if (!arg) { + // Need double quotation for empty argument + return '""'; + } + if (!arg.includes(' ') && !arg.includes('\t') && !arg.includes('"')) { + // No quotation needed + return arg; + } + if (!arg.includes('"') && !arg.includes('\\')) { + // No embedded double quotes or backslashes, so I can just wrap + // quote marks around the whole thing. + return `"${arg}"`; + } + // Expected input/output: + // input : hello"world + // output: "hello\"world" + // input : hello""world + // output: "hello\"\"world" + // input : hello\world + // output: hello\world + // input : hello\\world + // output: hello\\world + // input : hello\"world + // output: "hello\\\"world" + // input : hello\\"world + // output: "hello\\\\\"world" + // input : hello world\ + // output: "hello world\\" - note the comment in libuv actually reads "hello world\" + // but it appears the comment is wrong, it should be "hello world\\" + let reverse = '"'; + let quoteHit = true; + for (let i = arg.length; i > 0; i--) { + // walk the string in reverse + reverse += arg[i - 1]; + if (quoteHit && arg[i - 1] === '\\') { + reverse += '\\'; + } + else if (arg[i - 1] === '"') { + quoteHit = true; + reverse += '\\'; + } + else { + quoteHit = false; + } + } + reverse += '"'; + return reverse + .split('') + .reverse() + .join(''); + } + _cloneExecOptions(options) { + options = options || {}; + const result = { + cwd: options.cwd || process.cwd(), + env: options.env || process.env, + silent: options.silent || false, + windowsVerbatimArguments: options.windowsVerbatimArguments || false, + failOnStdErr: options.failOnStdErr || false, + ignoreReturnCode: options.ignoreReturnCode || false, + delay: options.delay || 10000 + }; + result.outStream = options.outStream || process.stdout; + result.errStream = options.errStream || process.stderr; + return result; + } + _getSpawnOptions(options, toolPath) { + options = options || {}; + const result = {}; + result.cwd = options.cwd; + result.env = options.env; + result['windowsVerbatimArguments'] = + options.windowsVerbatimArguments || this._isCmdFile(); + if (options.windowsVerbatimArguments) { + result.argv0 = `"${toolPath}"`; + } + return result; + } + /** + * Exec a tool. + * Output will be streamed to the live console. + * Returns promise with return code + * + * @param tool path to tool to exec + * @param options optional exec options. See ExecOptions + * @returns number + */ + exec() { + return __awaiter(this, void 0, void 0, function* () { + // root the tool path if it is unrooted and contains relative pathing + if (!ioUtil.isRooted(this.toolPath) && + (this.toolPath.includes('/') || + (IS_WINDOWS && this.toolPath.includes('\\')))) { + // prefer options.cwd if it is specified, however options.cwd may also need to be rooted + this.toolPath = path.resolve(process.cwd(), this.options.cwd || process.cwd(), this.toolPath); + } + // if the tool is only a file name, then resolve it from the PATH + // otherwise verify it exists (add extension on Windows if necessary) + this.toolPath = yield io.which(this.toolPath, true); + return new Promise((resolve, reject) => { + this._debug(`exec tool: ${this.toolPath}`); + this._debug('arguments:'); + for (const arg of this.args) { + this._debug(` ${arg}`); + } + const optionsNonNull = this._cloneExecOptions(this.options); + if (!optionsNonNull.silent && optionsNonNull.outStream) { + optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL); + } + const state = new ExecState(optionsNonNull, this.toolPath); + state.on('debug', (message) => { + this._debug(message); + }); + const fileName = this._getSpawnFileName(); + const cp = child.spawn(fileName, this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(this.options, fileName)); + const stdbuffer = ''; + if (cp.stdout) { + cp.stdout.on('data', (data) => { + if (this.options.listeners && this.options.listeners.stdout) { + this.options.listeners.stdout(data); + } + if (!optionsNonNull.silent && optionsNonNull.outStream) { + optionsNonNull.outStream.write(data); + } + this._processLineBuffer(data, stdbuffer, (line) => { + if (this.options.listeners && this.options.listeners.stdline) { + this.options.listeners.stdline(line); + } + }); + }); + } + const errbuffer = ''; + if (cp.stderr) { + cp.stderr.on('data', (data) => { + state.processStderr = true; + if (this.options.listeners && this.options.listeners.stderr) { + this.options.listeners.stderr(data); + } + if (!optionsNonNull.silent && + optionsNonNull.errStream && + optionsNonNull.outStream) { + const s = optionsNonNull.failOnStdErr + ? optionsNonNull.errStream + : optionsNonNull.outStream; + s.write(data); + } + this._processLineBuffer(data, errbuffer, (line) => { + if (this.options.listeners && this.options.listeners.errline) { + this.options.listeners.errline(line); + } + }); + }); + } + cp.on('error', (err) => { + state.processError = err.message; + state.processExited = true; + state.processClosed = true; + state.CheckComplete(); + }); + cp.on('exit', (code) => { + state.processExitCode = code; + state.processExited = true; + this._debug(`Exit code ${code} received from tool '${this.toolPath}'`); + state.CheckComplete(); + }); + cp.on('close', (code) => { + state.processExitCode = code; + state.processExited = true; + state.processClosed = true; + this._debug(`STDIO streams have closed for tool '${this.toolPath}'`); + state.CheckComplete(); + }); + state.on('done', (error, exitCode) => { + if (stdbuffer.length > 0) { + this.emit('stdline', stdbuffer); + } + if (errbuffer.length > 0) { + this.emit('errline', errbuffer); + } + cp.removeAllListeners(); + if (error) { + reject(error); + } + else { + resolve(exitCode); + } + }); + if (this.options.input) { + if (!cp.stdin) { + throw new Error('child process missing stdin'); + } + cp.stdin.end(this.options.input); + } + }); + }); + } +} +exports.ToolRunner = ToolRunner; +/** + * Convert an arg string to an array of args. Handles escaping + * + * @param argString string of arguments + * @returns string[] array of arguments + */ +function argStringToArray(argString) { + const args = []; + let inQuotes = false; + let escaped = false; + let arg = ''; + function append(c) { + // we only escape double quotes. + if (escaped && c !== '"') { + arg += '\\'; + } + arg += c; + escaped = false; + } + for (let i = 0; i < argString.length; i++) { + const c = argString.charAt(i); + if (c === '"') { + if (!escaped) { + inQuotes = !inQuotes; + } + else { + append(c); + } + continue; + } + if (c === '\\' && escaped) { + append(c); + continue; + } + if (c === '\\' && inQuotes) { + escaped = true; + continue; + } + if (c === ' ' && !inQuotes) { + if (arg.length > 0) { + args.push(arg); + arg = ''; + } + continue; + } + append(c); + } + if (arg.length > 0) { + args.push(arg.trim()); + } + return args; +} +exports.argStringToArray = argStringToArray; +class ExecState extends events.EventEmitter { + constructor(options, toolPath) { + super(); + this.processClosed = false; // tracks whether the process has exited and stdio is closed + this.processError = ''; + this.processExitCode = 0; + this.processExited = false; // tracks whether the process has exited + this.processStderr = false; // tracks whether stderr was written to + this.delay = 10000; // 10 seconds + this.done = false; + this.timeout = null; + if (!toolPath) { + throw new Error('toolPath must not be empty'); + } + this.options = options; + this.toolPath = toolPath; + if (options.delay) { + this.delay = options.delay; + } + } + CheckComplete() { + if (this.done) { + return; + } + if (this.processClosed) { + this._setResult(); + } + else if (this.processExited) { + this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this); + } + } + _debug(message) { + this.emit('debug', message); + } + _setResult() { + // determine whether there is an error + let error; + if (this.processExited) { + if (this.processError) { + error = new Error(`There was an error when attempting to execute the process '${this.toolPath}'. This may indicate the process failed to start. Error: ${this.processError}`); + } + else if (this.processExitCode !== 0 && !this.options.ignoreReturnCode) { + error = new Error(`The process '${this.toolPath}' failed with exit code ${this.processExitCode}`); + } + else if (this.processStderr && this.options.failOnStdErr) { + error = new Error(`The process '${this.toolPath}' failed because one or more lines were written to the STDERR stream`); + } + } + // clear the timeout + if (this.timeout) { + clearTimeout(this.timeout); + this.timeout = null; + } + this.done = true; + this.emit('done', error, this.processExitCode); + } + static HandleTimeout(state) { + if (state.done) { + return; + } + if (!state.processClosed && state.processExited) { + const message = `The STDIO streams did not close within ${state.delay / + 1000} seconds of the exit event from process '${state.toolPath}'. This may indicate a child process inherited the STDIO streams and has not yet exited.`; + state._debug(message); + } + state._setResult(); + } +} +//# sourceMappingURL=toolrunner.js.map + +/***/ }), + +/***/ 962: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +var _a; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const assert_1 = __nccwpck_require__(357); +const fs = __importStar(__nccwpck_require__(747)); +const path = __importStar(__nccwpck_require__(622)); +_a = fs.promises, exports.chmod = _a.chmod, exports.copyFile = _a.copyFile, exports.lstat = _a.lstat, exports.mkdir = _a.mkdir, exports.readdir = _a.readdir, exports.readlink = _a.readlink, exports.rename = _a.rename, exports.rmdir = _a.rmdir, exports.stat = _a.stat, exports.symlink = _a.symlink, exports.unlink = _a.unlink; +exports.IS_WINDOWS = process.platform === 'win32'; +function exists(fsPath) { + return __awaiter(this, void 0, void 0, function* () { + try { + yield exports.stat(fsPath); + } + catch (err) { + if (err.code === 'ENOENT') { + return false; + } + throw err; + } + return true; + }); +} +exports.exists = exists; +function isDirectory(fsPath, useStat = false) { + return __awaiter(this, void 0, void 0, function* () { + const stats = useStat ? yield exports.stat(fsPath) : yield exports.lstat(fsPath); + return stats.isDirectory(); + }); +} +exports.isDirectory = isDirectory; +/** + * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like: + * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases). + */ +function isRooted(p) { + p = normalizeSeparators(p); + if (!p) { + throw new Error('isRooted() parameter "p" cannot be empty'); + } + if (exports.IS_WINDOWS) { + return (p.startsWith('\\') || /^[A-Z]:/i.test(p) // e.g. \ or \hello or \\hello + ); // e.g. C: or C:\hello + } + return p.startsWith('/'); +} +exports.isRooted = isRooted; +/** + * Recursively create a directory at `fsPath`. + * + * This implementation is optimistic, meaning it attempts to create the full + * path first, and backs up the path stack from there. + * + * @param fsPath The path to create + * @param maxDepth The maximum recursion depth + * @param depth The current recursion depth + */ +function mkdirP(fsPath, maxDepth = 1000, depth = 1) { + return __awaiter(this, void 0, void 0, function* () { + assert_1.ok(fsPath, 'a path argument must be provided'); + fsPath = path.resolve(fsPath); + if (depth >= maxDepth) + return exports.mkdir(fsPath); + try { + yield exports.mkdir(fsPath); + return; + } + catch (err) { + switch (err.code) { + case 'ENOENT': { + yield mkdirP(path.dirname(fsPath), maxDepth, depth + 1); + yield exports.mkdir(fsPath); + return; + } + default: { + let stats; + try { + stats = yield exports.stat(fsPath); + } + catch (err2) { + throw err; + } + if (!stats.isDirectory()) + throw err; + } + } + } + }); +} +exports.mkdirP = mkdirP; +/** + * Best effort attempt to determine whether a file exists and is executable. + * @param filePath file path to check + * @param extensions additional file extensions to try + * @return if file exists and is executable, returns the file path. otherwise empty string. + */ +function tryGetExecutablePath(filePath, extensions) { + return __awaiter(this, void 0, void 0, function* () { + let stats = undefined; + try { + // test file exists + stats = yield exports.stat(filePath); + } + catch (err) { + if (err.code !== 'ENOENT') { + // eslint-disable-next-line no-console + console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); + } + } + if (stats && stats.isFile()) { + if (exports.IS_WINDOWS) { + // on Windows, test for valid extension + const upperExt = path.extname(filePath).toUpperCase(); + if (extensions.some(validExt => validExt.toUpperCase() === upperExt)) { + return filePath; + } + } + else { + if (isUnixExecutable(stats)) { + return filePath; + } + } + } + // try each extension + const originalFilePath = filePath; + for (const extension of extensions) { + filePath = originalFilePath + extension; + stats = undefined; + try { + stats = yield exports.stat(filePath); + } + catch (err) { + if (err.code !== 'ENOENT') { + // eslint-disable-next-line no-console + console.log(`Unexpected error attempting to determine if executable file exists '${filePath}': ${err}`); + } + } + if (stats && stats.isFile()) { + if (exports.IS_WINDOWS) { + // preserve the case of the actual file (since an extension was appended) + try { + const directory = path.dirname(filePath); + const upperName = path.basename(filePath).toUpperCase(); + for (const actualName of yield exports.readdir(directory)) { + if (upperName === actualName.toUpperCase()) { + filePath = path.join(directory, actualName); + break; + } + } + } + catch (err) { + // eslint-disable-next-line no-console + console.log(`Unexpected error attempting to determine the actual case of the file '${filePath}': ${err}`); + } + return filePath; + } + else { + if (isUnixExecutable(stats)) { + return filePath; + } + } + } + } + return ''; + }); +} +exports.tryGetExecutablePath = tryGetExecutablePath; +function normalizeSeparators(p) { + p = p || ''; + if (exports.IS_WINDOWS) { + // convert slashes on Windows + p = p.replace(/\//g, '\\'); + // remove redundant slashes + return p.replace(/\\\\+/g, '\\'); + } + // remove redundant slashes + return p.replace(/\/\/+/g, '/'); +} +// on Mac/Linux, test the execute bit +// R W X R W X R W X +// 256 128 64 32 16 8 4 2 1 +function isUnixExecutable(stats) { + return ((stats.mode & 1) > 0 || + ((stats.mode & 8) > 0 && stats.gid === process.getgid()) || + ((stats.mode & 64) > 0 && stats.uid === process.getuid())); +} +//# sourceMappingURL=io-util.js.map + +/***/ }), + +/***/ 436: +/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) { + +"use strict"; + +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", ({ value: true })); +const childProcess = __importStar(__nccwpck_require__(129)); +const path = __importStar(__nccwpck_require__(622)); +const util_1 = __nccwpck_require__(669); +const ioUtil = __importStar(__nccwpck_require__(962)); +const exec = util_1.promisify(childProcess.exec); +/** + * Copies a file or folder. + * Based off of shelljs - https://github.com/shelljs/shelljs/blob/9237f66c52e5daa40458f94f9565e18e8132f5a6/src/cp.js + * + * @param source source path + * @param dest destination path + * @param options optional. See CopyOptions. + */ +function cp(source, dest, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + const { force, recursive } = readCopyOptions(options); + const destStat = (yield ioUtil.exists(dest)) ? yield ioUtil.stat(dest) : null; + // Dest is an existing file, but not forcing + if (destStat && destStat.isFile() && !force) { + return; + } + // If dest is an existing directory, should copy inside. + const newDest = destStat && destStat.isDirectory() + ? path.join(dest, path.basename(source)) + : dest; + if (!(yield ioUtil.exists(source))) { + throw new Error(`no such file or directory: ${source}`); + } + const sourceStat = yield ioUtil.stat(source); + if (sourceStat.isDirectory()) { + if (!recursive) { + throw new Error(`Failed to copy. ${source} is a directory, but tried to copy without recursive flag.`); + } + else { + yield cpDirRecursive(source, newDest, 0, force); + } + } + else { + if (path.relative(source, newDest) === '') { + // a file cannot be copied to itself + throw new Error(`'${newDest}' and '${source}' are the same file`); + } + yield copyFile(source, newDest, force); + } + }); +} +exports.cp = cp; +/** + * Moves a path. + * + * @param source source path + * @param dest destination path + * @param options optional. See MoveOptions. + */ +function mv(source, dest, options = {}) { + return __awaiter(this, void 0, void 0, function* () { + if (yield ioUtil.exists(dest)) { + let destExists = true; + if (yield ioUtil.isDirectory(dest)) { + // If dest is directory copy src into dest + dest = path.join(dest, path.basename(source)); + destExists = yield ioUtil.exists(dest); + } + if (destExists) { + if (options.force == null || options.force) { + yield rmRF(dest); + } + else { + throw new Error('Destination already exists'); + } + } + } + yield mkdirP(path.dirname(dest)); + yield ioUtil.rename(source, dest); + }); +} +exports.mv = mv; +/** + * Remove a path recursively with force + * + * @param inputPath path to remove + */ +function rmRF(inputPath) { + return __awaiter(this, void 0, void 0, function* () { + if (ioUtil.IS_WINDOWS) { + // Node doesn't provide a delete operation, only an unlink function. This means that if the file is being used by another + // program (e.g. antivirus), it won't be deleted. To address this, we shell out the work to rd/del. + try { + if (yield ioUtil.isDirectory(inputPath, true)) { + yield exec(`rd /s /q "${inputPath}"`); + } + else { + yield exec(`del /f /a "${inputPath}"`); + } + } + catch (err) { + // if you try to delete a file that doesn't exist, desired result is achieved + // other errors are valid + if (err.code !== 'ENOENT') + throw err; + } + // Shelling out fails to remove a symlink folder with missing source, this unlink catches that + try { + yield ioUtil.unlink(inputPath); + } + catch (err) { + // if you try to delete a file that doesn't exist, desired result is achieved + // other errors are valid + if (err.code !== 'ENOENT') + throw err; + } + } + else { + let isDir = false; + try { + isDir = yield ioUtil.isDirectory(inputPath); + } + catch (err) { + // if you try to delete a file that doesn't exist, desired result is achieved + // other errors are valid + if (err.code !== 'ENOENT') + throw err; + return; + } + if (isDir) { + yield exec(`rm -rf "${inputPath}"`); + } + else { + yield ioUtil.unlink(inputPath); + } + } + }); +} +exports.rmRF = rmRF; +/** + * Make a directory. Creates the full path with folders in between + * Will throw if it fails + * + * @param fsPath path to create + * @returns Promise + */ +function mkdirP(fsPath) { + return __awaiter(this, void 0, void 0, function* () { + yield ioUtil.mkdirP(fsPath); + }); +} +exports.mkdirP = mkdirP; +/** + * Returns path of a tool had the tool actually been invoked. Resolves via paths. + * If you check and the tool does not exist, it will throw. + * + * @param tool name of the tool + * @param check whether to check if tool exists + * @returns Promise path to tool + */ +function which(tool, check) { + return __awaiter(this, void 0, void 0, function* () { + if (!tool) { + throw new Error("parameter 'tool' is required"); + } + // recursive when check=true + if (check) { + const result = yield which(tool, false); + if (!result) { + if (ioUtil.IS_WINDOWS) { + throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also verify the file has a valid extension for an executable file.`); + } + else { + throw new Error(`Unable to locate executable file: ${tool}. Please verify either the file path exists or the file can be found within a directory specified by the PATH environment variable. Also check the file mode to verify the file is executable.`); + } + } + return result; + } + const matches = yield findInPath(tool); + if (matches && matches.length > 0) { + return matches[0]; + } + return ''; + }); +} +exports.which = which; +/** + * Returns a list of all occurrences of the given tool on the system path. + * + * @returns Promise the paths of the tool + */ +function findInPath(tool) { + return __awaiter(this, void 0, void 0, function* () { + if (!tool) { + throw new Error("parameter 'tool' is required"); + } + // build the list of extensions to try + const extensions = []; + if (ioUtil.IS_WINDOWS && process.env['PATHEXT']) { + for (const extension of process.env['PATHEXT'].split(path.delimiter)) { + if (extension) { + extensions.push(extension); + } + } + } + // if it's rooted, return it if exists. otherwise return empty. + if (ioUtil.isRooted(tool)) { + const filePath = yield ioUtil.tryGetExecutablePath(tool, extensions); + if (filePath) { + return [filePath]; + } + return []; + } + // if any path separators, return empty + if (tool.includes(path.sep)) { + return []; + } + // build the list of directories + // + // Note, technically "where" checks the current directory on Windows. From a toolkit perspective, + // it feels like we should not do this. Checking the current directory seems like more of a use + // case of a shell, and the which() function exposed by the toolkit should strive for consistency + // across platforms. + const directories = []; + if (process.env.PATH) { + for (const p of process.env.PATH.split(path.delimiter)) { + if (p) { + directories.push(p); + } + } + } + // find all matches + const matches = []; + for (const directory of directories) { + const filePath = yield ioUtil.tryGetExecutablePath(path.join(directory, tool), extensions); + if (filePath) { + matches.push(filePath); + } + } + return matches; + }); +} +exports.findInPath = findInPath; +function readCopyOptions(options) { + const force = options.force == null ? true : options.force; + const recursive = Boolean(options.recursive); + return { force, recursive }; +} +function cpDirRecursive(sourceDir, destDir, currentDepth, force) { + return __awaiter(this, void 0, void 0, function* () { + // Ensure there is not a run away recursive copy + if (currentDepth >= 255) + return; + currentDepth++; + yield mkdirP(destDir); + const files = yield ioUtil.readdir(sourceDir); + for (const fileName of files) { + const srcFile = `${sourceDir}/${fileName}`; + const destFile = `${destDir}/${fileName}`; + const srcFileStat = yield ioUtil.lstat(srcFile); + if (srcFileStat.isDirectory()) { + // Recurse + yield cpDirRecursive(srcFile, destFile, currentDepth, force); + } + else { + yield copyFile(srcFile, destFile, force); + } + } + // Change the mode for the newly created directory + yield ioUtil.chmod(destDir, (yield ioUtil.stat(sourceDir)).mode); + }); +} +// Buffered file copy +function copyFile(srcFile, destFile, force) { + return __awaiter(this, void 0, void 0, function* () { + if ((yield ioUtil.lstat(srcFile)).isSymbolicLink()) { + // unlink/re-link it + try { + yield ioUtil.lstat(destFile); + yield ioUtil.unlink(destFile); + } + catch (e) { + // Try to override file permission + if (e.code === 'EPERM') { + yield ioUtil.chmod(destFile, '0666'); + yield ioUtil.unlink(destFile); + } + // other errors = it doesn't exist, no work to do + } + // Copy over symlink + const symlinkFull = yield ioUtil.readlink(srcFile); + yield ioUtil.symlink(symlinkFull, destFile, ioUtil.IS_WINDOWS ? 'junction' : null); + } + else if (!(yield ioUtil.exists(destFile)) || force) { + yield ioUtil.copyFile(srcFile, destFile); + } + }); +} +//# sourceMappingURL=io.js.map + +/***/ }), + +/***/ 357: +/***/ ((module) => { + +"use strict"; +module.exports = require("assert");; + +/***/ }), + +/***/ 129: +/***/ ((module) => { + +"use strict"; +module.exports = require("child_process");; + +/***/ }), + +/***/ 614: +/***/ ((module) => { + +"use strict"; +module.exports = require("events");; + +/***/ }), + +/***/ 747: +/***/ ((module) => { + +"use strict"; +module.exports = require("fs");; + +/***/ }), + +/***/ 87: +/***/ ((module) => { + +"use strict"; +module.exports = require("os");; + +/***/ }), + +/***/ 622: +/***/ ((module) => { + +"use strict"; +module.exports = require("path");; + +/***/ }), + +/***/ 669: +/***/ ((module) => { + +"use strict"; +module.exports = require("util");; + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __nccwpck_require__(moduleId) { +/******/ // Check if module is in cache +/******/ if(__webpack_module_cache__[moduleId]) { +/******/ return __webpack_module_cache__[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ var threw = true; +/******/ try { +/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __nccwpck_require__); +/******/ threw = false; +/******/ } finally { +/******/ if(threw) delete __webpack_module_cache__[moduleId]; +/******/ } +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/compat */ +/******/ +/******/ __nccwpck_require__.ab = __dirname + "/";/************************************************************************/ +/******/ // module exports must be returned from runtime so entry inlining is disabled +/******/ // startup +/******/ // Load entry module and return exports +/******/ return __nccwpck_require__(932); +/******/ })() +; \ No newline at end of file diff --git a/dist/licenses.txt b/dist/licenses.txt new file mode 100644 index 0000000..115c562 --- /dev/null +++ b/dist/licenses.txt @@ -0,0 +1,26 @@ +@actions/core +MIT +The MIT License (MIT) + +Copyright 2019 GitHub + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +@actions/exec +MIT + +@actions/io +MIT +The MIT License (MIT) + +Copyright 2019 GitHub + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/entrypoint.sh b/entrypoint.sh deleted file mode 100644 index 2a5d0df..0000000 --- a/entrypoint.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -set -e - -# Copy the matcher to the host system; otherwise "add-matcher" can't find it. -cp /cfn-lint.json /github/workflow/cfn-lint.json -echo "::add-matcher::${RUNNER_TEMP}/_github_workflow/cfn-lint.json" - -sh -c "cfn-lint $*" diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..946ff28 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,12438 @@ +{ + "name": "setup-cfn-lint", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "setup-cfn-lint", + "version": "0.1.0", + "license": "Apache-2.0", + "dependencies": { + "@actions/core": "^1.2.6", + "@actions/exec": "^1.0.4", + "@actions/io": "^1.0.2" + }, + "devDependencies": { + "@vercel/ncc": "^0.27.0", + "eslint": "^7.20.0", + "jest": "^26.6.3", + "prettier": "2.2.1" + } + }, + "node_modules/@actions/core": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.7.tgz", + "integrity": "sha512-kzLFD5BgEvq6ubcxdgPbRKGD2Qrgya/5j+wh4LZzqT915I0V3rED+MvjH6NXghbvk1MXknpNNQ3uKjXSEN00Ig==" + }, + "node_modules/@actions/exec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.0.4.tgz", + "integrity": "sha512-4DPChWow9yc9W3WqEbUj8Nr86xkpyE29ZzWjXucHItclLbEW6jr80Zx4nqv18QL6KK65+cifiQZXvnqgTV6oHw==", + "dependencies": { + "@actions/io": "^1.0.1" + } + }, + "node_modules/@actions/io": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.0.tgz", + "integrity": "sha512-PspSX7Z9zh2Fyyuf3F6BsYeXcYHfc/VJ1vwy2vouas95efHVd42M6UfBFRs+jY0uiMDXhAoUtATn9g2r1MaWBQ==" + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz", + "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==", + "dev": true + }, + "node_modules/@babel/core": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", + "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-compilation-targets": "^7.13.13", + "@babel/helper-module-transforms": "^7.13.14", + "@babel/helpers": "^7.13.10", + "@babel/parser": "^7.13.15", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.14", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/core/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/@babel/core/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/generator": { + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "node_modules/@babel/generator/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", + "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.12", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/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/@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "dependencies": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", + "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.14" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.13.12" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "node_modules/@babel/helpers": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", + "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@babel/highlight/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/@babel/highlight/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/@babel/highlight/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/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/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/@babel/parser": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.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-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "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-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "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-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "node_modules/@babel/template/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/traverse": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/traverse/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/@babel/types": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", + "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", + "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/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/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/core": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/environment": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/fake-timers": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/globals": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "dev": true, + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/reporters": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "node-notifier": "^8.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", + "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", + "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.3.0" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/node": { + "version": "14.14.40", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.40.tgz", + "integrity": "sha512-2HoZZGylcnz19ZSbvWhgWHqvprw1ZGHanxIrDWYykPD4CauLW4gcyLzCVfUN2kv/1t1F3CurQIdi+s1l9+XgEA==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "node_modules/@types/prettier": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", + "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", + "dev": true + }, + "node_modules/@types/stack-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "dev": true + }, + "node_modules/@vercel/ncc": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.27.0.tgz", + "integrity": "sha512-DllIJQapnU2YwewIhh/4dYesmMQw3h2cFtabECc/zSJHqUbNa0eJuEkRa6DXbZvh1YPWBtYQoPV17NlDpBw1Vw==", + "dev": true, + "bin": { + "ncc": "dist/ncc/cli.js" + } + }, + "node_modules/abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "dev": true, + "dependencies": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@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-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.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/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "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/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.4.tgz", + "integrity": "sha512-d7rCxYV8I9kj41RH8UKYnvDYCRENUlHRgyXy/Rhr/1BaeLGfiCptEdFE8MIrvGfWbBFNjVYx76SQWvNX1j+/cQ==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001208", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.712", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "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/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001208", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz", + "integrity": "sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==", + "dev": true + }, + "node_modules/capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/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/colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "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==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "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/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "dev": true + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "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/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.3.717", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz", + "integrity": "sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "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/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/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "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-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/escodegen/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/escodegen/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz", + "integrity": "sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.21", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "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.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "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/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/exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "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": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "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/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/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.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "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.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "node_modules/growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true, + "optional": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "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/has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "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.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "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": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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==", + "dev": true + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "optional": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "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-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "optional": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/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/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "dev": true, + "dependencies": { + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "dev": true, + "dependencies": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "dev": true, + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "dev": true, + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "dev": true, + "dependencies": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "dev": true, + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "dev": true, + "dependencies": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "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": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "node_modules/jsdom": { + "version": "16.5.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.5.3.tgz", + "integrity": "sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA==", + "dev": true, + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.1.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "html-encoding-sniffer": "^2.0.1", + "is-potential-custom-element-name": "^1.0.0", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "request": "^2.88.2", + "request-promise-native": "^1.0.9", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.4", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/acorn": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.1.tgz", + "integrity": "sha512-xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "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": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "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/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "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/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "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/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/make-dir/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/makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "dependencies": { + "tmpl": "1.0.x" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dev": true, + "dependencies": { + "mime-db": "1.47.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node_modules/node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-notifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", + "dev": true, + "optional": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node_modules/node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/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/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/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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/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/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/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/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "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.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "dependencies": { + "node-modules-regexp": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "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/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "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/prompts": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "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.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "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/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "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/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "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/rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true, + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/sane/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/sane/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/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/sane/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "optional": true + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "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/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "node_modules/table": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.1.0.tgz", + "integrity": "sha512-T4G5KMmqIk6X87gLKWyU5exPpTjLjY5KyrFWaIjv3SvgaIUGXV7UEzGEnZJdTA38/yUS6f9PlKezQ0bYXG3iIQ==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.1.0.tgz", + "integrity": "sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==", + "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/table/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/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "node_modules/tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "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": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "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-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.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/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "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/v8-to-istanbul": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.1.tgz", + "integrity": "sha512-p0BB09E5FRjx0ELN6RgusIPsSPhtgexSRcKETybEs6IGOTXJSZqfwxp7r//55nnu0f1AxltY5VvdVqy2vZf9AA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "dependencies": { + "makeerror": "1.0.x" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", + "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "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/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "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": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "dev": true, + "engines": { + "node": ">=8.3.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": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "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/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + } + }, + "dependencies": { + "@actions/core": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.7.tgz", + "integrity": "sha512-kzLFD5BgEvq6ubcxdgPbRKGD2Qrgya/5j+wh4LZzqT915I0V3rED+MvjH6NXghbvk1MXknpNNQ3uKjXSEN00Ig==" + }, + "@actions/exec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.0.4.tgz", + "integrity": "sha512-4DPChWow9yc9W3WqEbUj8Nr86xkpyE29ZzWjXucHItclLbEW6jr80Zx4nqv18QL6KK65+cifiQZXvnqgTV6oHw==", + "requires": { + "@actions/io": "^1.0.1" + } + }, + "@actions/io": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.0.tgz", + "integrity": "sha512-PspSX7Z9zh2Fyyuf3F6BsYeXcYHfc/VJ1vwy2vouas95efHVd42M6UfBFRs+jY0uiMDXhAoUtATn9g2r1MaWBQ==" + }, + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.13.15.tgz", + "integrity": "sha512-ltnibHKR1VnrU4ymHyQ/CXtNXI6yZC0oJThyW78Hft8XndANwi+9H+UIklBDraIjFEJzw8wmcM427oDd9KS5wA==", + "dev": true + }, + "@babel/core": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.13.15.tgz", + "integrity": "sha512-6GXmNYeNjS2Uz+uls5jalOemgIhnTMeaXo+yBUA72kC2uX/8VW6XyhVIo2L8/q0goKQA3EVKx0KOQpVKSeWadQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-compilation-targets": "^7.13.13", + "@babel/helper-module-transforms": "^7.13.14", + "@babel/helpers": "^7.13.10", + "@babel/parser": "^7.13.15", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.15", + "@babel/types": "^7.13.14", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.13.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.13.9.tgz", + "integrity": "sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.13.13", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz", + "integrity": "sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.12", + "@babel/helper-validator-option": "^7.12.17", + "browserslist": "^4.14.5", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz", + "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.12.13", + "@babel/template": "^7.12.13", + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz", + "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz", + "integrity": "sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-imports": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz", + "integrity": "sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-module-transforms": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.13.14.tgz", + "integrity": "sha512-QuU/OJ0iAOSIatyVZmfqB0lbkVP0kDRiKj34xy+QNsnVZi/PA6BoSoreeqnxxa9EHFAIL0R9XOaAR/G9WlIy5g==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.13.12", + "@babel/helper-replace-supers": "^7.13.12", + "@babel/helper-simple-access": "^7.13.12", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/helper-validator-identifier": "^7.12.11", + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.13", + "@babel/types": "^7.13.14" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz", + "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz", + "integrity": "sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz", + "integrity": "sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.13.12", + "@babel/helper-optimise-call-expression": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-simple-access": { + "version": "7.13.12", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz", + "integrity": "sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA==", + "dev": true, + "requires": { + "@babel/types": "^7.13.12" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz", + "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==", + "dev": true, + "requires": { + "@babel/types": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.12.17", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz", + "integrity": "sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.13.10.tgz", + "integrity": "sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ==", + "dev": true, + "requires": { + "@babel/template": "^7.12.13", + "@babel/traverse": "^7.13.0", + "@babel/types": "^7.13.0" + } + }, + "@babel/highlight": { + "version": "7.13.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.10.tgz", + "integrity": "sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "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" + } + }, + "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" + } + }, + "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "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" + } + } + } + }, + "@babel/parser": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.13.15.tgz", + "integrity": "sha512-b9COtcAlVEQljy/9fbcMHpG+UIW9ReF+gpaxDHTlZd0c6/UU9ng8zdySAW9sRTzpvcdCHn6bUcbuYUgGzLAWVQ==", + "dev": true + }, + "@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-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "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-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@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-top-level-await": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz", + "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/template": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz", + "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/parser": "^7.12.13", + "@babel/types": "^7.12.13" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + } + } + }, + "@babel/traverse": { + "version": "7.13.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.13.15.tgz", + "integrity": "sha512-/mpZMNvj6bce59Qzl09fHEs8Bt8NnpEDQYleHUPZQ3wXUMvXi+HJPLars68oAbmp839fGoOkv2pSL2z9ajCIaQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@babel/generator": "^7.13.9", + "@babel/helper-function-name": "^7.12.13", + "@babel/helper-split-export-declaration": "^7.12.13", + "@babel/parser": "^7.13.15", + "@babel/types": "^7.13.14", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "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 + } + } + }, + "@babel/types": { + "version": "7.13.14", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.13.14.tgz", + "integrity": "sha512-A2aa3QTkWoyqsZZFl56MLUsfmh7O0gN41IPvXAE/++8ojpbz12SszD7JEGYVdn4f9Kt4amIei07swF1h4AqmmQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.12.11", + "lodash": "^4.17.19", + "to-fast-properties": "^2.0.0" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "@cnakazawa/watch": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz", + "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==", + "dev": true, + "requires": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + } + }, + "@eslint/eslintrc": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.0.tgz", + "integrity": "sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "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 + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jest/console": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz", + "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + } + }, + "@jest/core": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz", + "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "@jest/environment": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz", + "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + } + }, + "@jest/fake-timers": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz", + "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "@jest/globals": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz", + "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + } + }, + "@jest/reporters": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz", + "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "node-notifier": "^8.0.0", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + } + }, + "@jest/source-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz", + "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==", + "dev": true, + "requires": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + } + }, + "@jest/test-result": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz", + "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + } + }, + "@jest/test-sequencer": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz", + "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==", + "dev": true, + "requires": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + } + }, + "@jest/transform": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz", + "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + } + }, + "@jest/types": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz", + "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + } + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz", + "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@types/babel__core": { + "version": "7.1.14", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.14.tgz", + "integrity": "sha512-zGZJzzBUVDo/eV6KgbE0f0ZI7dInEYvo12Rb70uNQDshC3SkRMb67ja0GgRHZgAX3Za6rhaWlvbDO8rrGyAb1g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz", + "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz", + "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.1.tgz", + "integrity": "sha512-Vs0hm0vPahPMYi9tDjtP66llufgO3ST16WXaSTtDGEl9cewAl3AibmxWw6TINOqHPT9z0uABKAYjT9jNSg4npw==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/graceful-fs": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", + "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==", + "dev": true + }, + "@types/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "*" + } + }, + "@types/istanbul-reports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz", + "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==", + "dev": true, + "requires": { + "@types/istanbul-lib-report": "*" + } + }, + "@types/node": { + "version": "14.14.40", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.40.tgz", + "integrity": "sha512-2HoZZGylcnz19ZSbvWhgWHqvprw1ZGHanxIrDWYykPD4CauLW4gcyLzCVfUN2kv/1t1F3CurQIdi+s1l9+XgEA==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@types/prettier": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", + "integrity": "sha512-PijRCG/K3s3w1We6ynUKdxEc5AcuuH3NBmMDP8uvKVp6X43UY7NQlTzczakXP3DJR0F4dfNQIGjU2cUeRYs2AA==", + "dev": true + }, + "@types/stack-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz", + "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==", + "dev": true + }, + "@types/yargs": { + "version": "15.0.13", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz", + "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "dev": true + }, + "@vercel/ncc": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.27.0.tgz", + "integrity": "sha512-DllIJQapnU2YwewIhh/4dYesmMQw3h2cFtabECc/zSJHqUbNa0eJuEkRa6DXbZvh1YPWBtYQoPV17NlDpBw1Vw==", + "dev": true + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "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" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "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" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "babel-jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz", + "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==", + "dev": true, + "requires": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + } + }, + "babel-plugin-istanbul": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz", + "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^4.0.0", + "test-exclude": "^6.0.0" + } + }, + "babel-plugin-jest-hoist": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz", + "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==", + "dev": true, + "requires": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + } + }, + "babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "requires": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@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-top-level-await": "^7.8.3" + } + }, + "babel-preset-jest": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz", + "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==", + "dev": true, + "requires": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + } + }, + "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 + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "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" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browserslist": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.4.tgz", + "integrity": "sha512-d7rCxYV8I9kj41RH8UKYnvDYCRENUlHRgyXy/Rhr/1BaeLGfiCptEdFE8MIrvGfWbBFNjVYx76SQWvNX1j+/cQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001208", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.712", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "requires": { + "node-int64": "^0.4.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "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 + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001208", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz", + "integrity": "sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==", + "dev": true + }, + "capture-exit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz", + "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==", + "dev": true, + "requires": { + "rsvp": "^4.8.4" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cjs-module-lexer": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz", + "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==", + "dev": true + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "collect-v8-coverage": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", + "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.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 + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "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==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "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" + } + }, + "cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dev": true, + "requires": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decimal.js": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz", + "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "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==", + "dev": true + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true + }, + "diff-sequences": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", + "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==", + "dev": true + }, + "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" + } + }, + "domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dev": true, + "requires": { + "webidl-conversions": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "dev": true + } + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "electron-to-chromium": { + "version": "1.3.717", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz", + "integrity": "sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==", + "dev": true + }, + "emittery": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz", + "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==", + "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 + }, + "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" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, + "eslint": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.24.0.tgz", + "integrity": "sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.21", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + } + }, + "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": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "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.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "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.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "exec-sh": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz", + "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==", + "dev": true + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", + "dev": true + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "expect": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz", + "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "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-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": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fb-watchman": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", + "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", + "dev": true, + "requires": { + "bser": "2.1.1" + } + }, + "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" + } + }, + "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" + } + }, + "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.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "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.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "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" + } + }, + "globals": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true, + "optional": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "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 + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^1.0.5" + } + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "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.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "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": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-boolean-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.0.tgz", + "integrity": "sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "optional": true + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "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 + }, + "is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "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-number-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.4.tgz", + "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", + "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" + } + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "optional": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", + "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + } + }, + "istanbul-reports": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz", + "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jest": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz", + "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==", + "dev": true, + "requires": { + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + } + }, + "jest-changed-files": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz", + "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + } + }, + "jest-cli": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz", + "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==", + "dev": true, + "requires": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + } + }, + "jest-config": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz", + "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==", + "dev": true, + "requires": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + } + }, + "jest-diff": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz", + "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-docblock": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz", + "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==", + "dev": true, + "requires": { + "detect-newline": "^3.0.0" + } + }, + "jest-each": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz", + "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + } + }, + "jest-environment-jsdom": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz", + "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + } + }, + "jest-environment-node": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz", + "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==", + "dev": true, + "requires": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + } + }, + "jest-get-type": { + "version": "26.3.0", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz", + "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==", + "dev": true + }, + "jest-haste-map": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz", + "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "fsevents": "^2.1.2", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + } + }, + "jest-jasmine2": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz", + "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==", + "dev": true, + "requires": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + } + }, + "jest-leak-detector": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz", + "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==", + "dev": true, + "requires": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-matcher-utils": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz", + "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + } + }, + "jest-message-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz", + "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + } + }, + "jest-mock": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz", + "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*" + } + }, + "jest-pnp-resolver": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", + "dev": true, + "requires": {} + }, + "jest-regex-util": { + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz", + "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==", + "dev": true + }, + "jest-resolve": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz", + "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + } + }, + "jest-resolve-dependencies": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz", + "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + } + }, + "jest-runner": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz", + "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + } + }, + "jest-runtime": { + "version": "26.6.3", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz", + "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==", + "dev": true, + "requires": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + } + }, + "jest-serializer": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz", + "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==", + "dev": true, + "requires": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + } + }, + "jest-snapshot": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz", + "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + } + }, + "jest-util": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz", + "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + } + }, + "jest-validate": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz", + "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "dependencies": { + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + } + } + }, + "jest-watcher": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz", + "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==", + "dev": true, + "requires": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.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": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdom": { + "version": "16.5.3", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.5.3.tgz", + "integrity": "sha512-Qj1H+PEvUsOtdPJ056ewXM4UJPCi4hhLA8wpiz9F2YvsRBhuFsXxtrIFAgGBDynQA9isAMGE91PfUYbdMPXuTA==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.1.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "html-encoding-sniffer": "^2.0.1", + "is-potential-custom-element-name": "^1.0.0", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "request": "^2.88.2", + "request-promise-native": "^1.0.9", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.4", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "acorn": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.1.tgz", + "integrity": "sha512-xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g==", + "dev": true + } + } + }, + "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": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.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 + }, + "kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "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" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "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" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "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" + } + }, + "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" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "makeerror": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", + "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", + "dev": true, + "requires": { + "tmpl": "1.0.x" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "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 + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "dev": true + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dev": true, + "requires": { + "mime-db": "1.47.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + } + }, + "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 + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-notifier": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.2.tgz", + "integrity": "sha512-oJP/9NAdd9+x2Q+rfphB2RJCHjod70RcRLjosiPMMu5gjIfwVnOUGq2nbTjTUbmy0DJ/tFIVT30+Qe3nzl4TJg==", + "dev": true, + "optional": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "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 + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "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-each-series": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", + "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "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" + } + }, + "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 + }, + "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" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "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.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.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" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "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 + }, + "prettier": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", + "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", + "dev": true + }, + "pretty-format": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz", + "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==", + "dev": true, + "requires": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + } + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prompts": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.1.tgz", + "integrity": "sha512-EQyfIuO2hPDsX1L/blblV+H7I0knhgAd82cVneCwcdND9B8AuCDuRcBH6yIcG4dFzlOUqbazQqwGjx5xmsNLuQ==", + "dev": true, + "requires": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + } + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "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.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + } + } + }, + "request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "requires": { + "lodash": "^4.17.19" + } + }, + "request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "dev": true, + "requires": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "dependencies": { + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "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 + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "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 + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "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" + } + }, + "rsvp": { + "version": "4.8.5", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", + "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sane": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz", + "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==", + "dev": true, + "requires": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "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 + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + } + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + } + }, + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "requires": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "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 + }, + "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" + } + }, + "supports-hyperlinks": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", + "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "table": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.1.0.tgz", + "integrity": "sha512-T4G5KMmqIk6X87gLKWyU5exPpTjLjY5KyrFWaIjv3SvgaIUGXV7UEzGEnZJdTA38/yUS6f9PlKezQ0bYXG3iIQ==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ajv": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.1.0.tgz", + "integrity": "sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==", + "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 + } + } + }, + "terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "requires": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + } + }, + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "dev": true + }, + "tmpl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", + "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "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": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "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" + } + }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + } + }, + "tr46": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", + "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "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-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "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 + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + } + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "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" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "optional": true + }, + "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 + }, + "v8-to-istanbul": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.1.tgz", + "integrity": "sha512-p0BB09E5FRjx0ELN6RgusIPsSPhtgexSRcKETybEs6IGOTXJSZqfwxp7r//55nnu0f1AxltY5VvdVqy2vZf9AA==", + "dev": true, + "requires": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dev": true, + "requires": { + "xml-name-validator": "^3.0.0" + } + }, + "walker": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", + "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", + "dev": true, + "requires": { + "makeerror": "1.0.x" + } + }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.5.0.tgz", + "integrity": "sha512-fy+R77xWv0AiqfLl4nuGUlQ3/6b5uNfQ4WAbGQVMYshCTCCPK9psC1nWh3XHuxGVCtlcDDQPQW1csmmIQo+fwg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.0.2", + "webidl-conversions": "^6.1.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" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "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": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "ws": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz", + "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==", + "dev": true, + "requires": {} + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "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 + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } +} From 91b7114a82d658fa9d65954a005e1bbb0609fcd9 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 17:41:01 +0100 Subject: [PATCH 03/60] Rename --- dist/index.js | 18 +++++++++--------- lib/setup.js | 18 +++++++++--------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/dist/index.js b/dist/index.js index ed50941..a5c7b1a 100644 --- a/dist/index.js +++ b/dist/index.js @@ -59,13 +59,13 @@ async function createPythonVenv(python, venvPath) { } /** - * Installs SAM CLI. + * Installs CFN LINT CLI. * - * @param {string} python - The Python interpreter to use for SAM CLI. - * @param {string} version - The SAM CLI version to install. - * @returns {Promise} The directory SAM CLI is installed in. + * @param {string} python - The Python interpreter to use for CFN LINT CLI. + * @param {string} version - The CFN LINT CLI version to install. + * @returns {Promise} The directory CFN LINT CLI is installed in. */ -async function installSamCli(python, version) { +async function installCfnLintCli(python, version) { const tempPath = mkdirTemp(); // Create virtual environment @@ -100,11 +100,11 @@ async function installSamCli(python, version) { `cfn-lint==${version}`, ]); - // Symlink from separate directory so only SAM CLI is added to PATH + // Symlink from separate directory so only CFN LINT CLI is added to PATH const symlinkPath = path.join(tempPath, "bin"); fs.mkdirSync(symlinkPath); - const sam = isWindows() ? "cfn.exe" : "sam"; - fs.symlinkSync(path.join(binPath, sam), path.join(symlinkPath, sam)); + const cfnLint = isWindows() ? "cfn.exe" : "cfn-lint"; + fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); return symlinkPath; } @@ -132,7 +132,7 @@ async function setup() { const defaultPython = isWindows() ? "python" : "python3"; const python = getInput("python", /^.+$/, defaultPython); - const binPath = await installSamCli(python, version); + const binPath = await installCfnLintCli(python, version); core.addPath(binPath); } diff --git a/lib/setup.js b/lib/setup.js index 00beafc..118f249 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -34,13 +34,13 @@ async function createPythonVenv(python, venvPath) { } /** - * Installs SAM CLI. + * Installs CFN LINT CLI. * - * @param {string} python - The Python interpreter to use for SAM CLI. - * @param {string} version - The SAM CLI version to install. - * @returns {Promise} The directory SAM CLI is installed in. + * @param {string} python - The Python interpreter to use for CFN LINT CLI. + * @param {string} version - The CFN LINT CLI version to install. + * @returns {Promise} The directory CFN LINT CLI is installed in. */ -async function installSamCli(python, version) { +async function installCfnLintCli(python, version) { const tempPath = mkdirTemp(); // Create virtual environment @@ -75,11 +75,11 @@ async function installSamCli(python, version) { `cfn-lint==${version}`, ]); - // Symlink from separate directory so only SAM CLI is added to PATH + // Symlink from separate directory so only CFN LINT CLI is added to PATH const symlinkPath = path.join(tempPath, "bin"); fs.mkdirSync(symlinkPath); - const sam = isWindows() ? "cfn.exe" : "sam"; - fs.symlinkSync(path.join(binPath, sam), path.join(symlinkPath, sam)); + const cfnLint = isWindows() ? "cfn.exe" : "cfn-lint"; + fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); return symlinkPath; } @@ -107,7 +107,7 @@ async function setup() { const defaultPython = isWindows() ? "python" : "python3"; const python = getInput("python", /^.+$/, defaultPython); - const binPath = await installSamCli(python, version); + const binPath = await installCfnLintCli(python, version); core.addPath(binPath); } From 670d96a50bd73eab4fee3ae3aaa39c10c598a8a6 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 17:43:36 +0100 Subject: [PATCH 04/60] Pushing quick update --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 64891bc..b9e39a6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,7 +29,7 @@ jobs: - uses: ./ with: version: "0.44.5" - - run: cfn-lint --version | grep -F 1.18.2 + - run: cfn-lint --version - uses: ./ - - run: cfn-lint --version | grep -Fv 1.18.2 + - run: cfn-lint --version From 45075d922535fd4564ccd69b7c927282ed2ebbbe Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 17:54:16 +0100 Subject: [PATCH 05/60] Setting Default Version --- dist/index.js | 2 +- lib/setup.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index a5c7b1a..eebf06b 100644 --- a/dist/index.js +++ b/dist/index.js @@ -127,7 +127,7 @@ function getInput(name, pattern, defaultValue) { } async function setup() { - const version = getInput("version", /^[\d.*]+$/, "1.*"); + const version = getInput("version", /^[\d.*]+$/, "0.*"); // python3 isn't standard on Windows const defaultPython = isWindows() ? "python" : "python3"; const python = getInput("python", /^.+$/, defaultPython); diff --git a/lib/setup.js b/lib/setup.js index 118f249..7d55f7b 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -102,7 +102,7 @@ function getInput(name, pattern, defaultValue) { } async function setup() { - const version = getInput("version", /^[\d.*]+$/, "1.*"); + const version = getInput("version", /^[\d.*]+$/, "0.*"); // python3 isn't standard on Windows const defaultPython = isWindows() ? "python" : "python3"; const python = getInput("python", /^.+$/, defaultPython); From 4b0da2828cd4f5acab00eb5841cd5eb07d429f62 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 18:02:11 +0100 Subject: [PATCH 06/60] Update Specs and Policies --- .github/workflows/main.yml | 2 ++ lib/setup.js | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b9e39a6..f61e8e5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,10 +26,12 @@ jobs: steps: - uses: actions/checkout@v2 + ### Testing specifying a version. - uses: ./ with: version: "0.44.5" - run: cfn-lint --version + ### Testing pulling latest version. - uses: ./ - run: cfn-lint --version diff --git a/lib/setup.js b/lib/setup.js index 7d55f7b..16c779b 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -40,7 +40,7 @@ async function createPythonVenv(python, venvPath) { * @param {string} version - The CFN LINT CLI version to install. * @returns {Promise} The directory CFN LINT CLI is installed in. */ -async function installCfnLintCli(python, version) { +async function installCLI(python, version) { const tempPath = mkdirTemp(); // Create virtual environment @@ -75,6 +75,20 @@ async function installCfnLintCli(python, version) { `cfn-lint==${version}`, ]); + // Update to the latest linting specs + await exec.exec(pythonPath, [ + "-m", + "cfn-lint", + "--update-specs", + ]); + + // Update the IAM Polices + await exec.exec(pythonPath, [ + "-m", + "cfn-lint", + "--update-iam-policies", + ]); + // Symlink from separate directory so only CFN LINT CLI is added to PATH const symlinkPath = path.join(tempPath, "bin"); fs.mkdirSync(symlinkPath); @@ -107,7 +121,7 @@ async function setup() { const defaultPython = isWindows() ? "python" : "python3"; const python = getInput("python", /^.+$/, defaultPython); - const binPath = await installCfnLintCli(python, version); + const binPath = await installCLI(python, version); core.addPath(binPath); } From 9b4098b3a4f98c21dbd4c596fa52755d5279770c Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 18:03:51 +0100 Subject: [PATCH 07/60] Running Build First --- dist/index.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index eebf06b..3fb1fb0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -65,7 +65,7 @@ async function createPythonVenv(python, venvPath) { * @param {string} version - The CFN LINT CLI version to install. * @returns {Promise} The directory CFN LINT CLI is installed in. */ -async function installCfnLintCli(python, version) { +async function installCLI(python, version) { const tempPath = mkdirTemp(); // Create virtual environment @@ -100,6 +100,20 @@ async function installCfnLintCli(python, version) { `cfn-lint==${version}`, ]); + // Update to the latest linting specs + await exec.exec(pythonPath, [ + "-m", + "cfn-lint", + "--update-specs", + ]); + + // Update the IAM Polices + await exec.exec(pythonPath, [ + "-m", + "cfn-lint", + "--update-iam-policies", + ]); + // Symlink from separate directory so only CFN LINT CLI is added to PATH const symlinkPath = path.join(tempPath, "bin"); fs.mkdirSync(symlinkPath); @@ -132,7 +146,7 @@ async function setup() { const defaultPython = isWindows() ? "python" : "python3"; const python = getInput("python", /^.+$/, defaultPython); - const binPath = await installCfnLintCli(python, version); + const binPath = await installCLI(python, version); core.addPath(binPath); } From 999c9407dc243692cfc7e703ac8ccc51b8b86dbf Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 18:06:04 +0100 Subject: [PATCH 08/60] Pushing Updates Files without module --- dist/index.js | 2 -- lib/setup.js | 2 -- 2 files changed, 4 deletions(-) diff --git a/dist/index.js b/dist/index.js index 3fb1fb0..f8ad72f 100644 --- a/dist/index.js +++ b/dist/index.js @@ -102,14 +102,12 @@ async function installCLI(python, version) { // Update to the latest linting specs await exec.exec(pythonPath, [ - "-m", "cfn-lint", "--update-specs", ]); // Update the IAM Polices await exec.exec(pythonPath, [ - "-m", "cfn-lint", "--update-iam-policies", ]); diff --git a/lib/setup.js b/lib/setup.js index 16c779b..0ba3a89 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -77,14 +77,12 @@ async function installCLI(python, version) { // Update to the latest linting specs await exec.exec(pythonPath, [ - "-m", "cfn-lint", "--update-specs", ]); // Update the IAM Polices await exec.exec(pythonPath, [ - "-m", "cfn-lint", "--update-iam-policies", ]); From 36e480be21caf6b5f1fd6497b622c461adbdc64e Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 18:07:16 +0100 Subject: [PATCH 09/60] Moving to where the cfn lint files are found --- dist/index.js | 14 ++++++++------ lib/setup.js | 14 ++++++++------ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/dist/index.js b/dist/index.js index f8ad72f..4b04097 100644 --- a/dist/index.js +++ b/dist/index.js @@ -100,24 +100,26 @@ async function installCLI(python, version) { `cfn-lint==${version}`, ]); + // Symlink from separate directory so only CFN LINT CLI is added to PATH + const symlinkPath = path.join(tempPath, "bin"); + fs.mkdirSync(symlinkPath); + const cfnLint = isWindows() ? "cfn.exe" : "cfn-lint"; + fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); + // Update to the latest linting specs await exec.exec(pythonPath, [ + "-m", "cfn-lint", "--update-specs", ]); // Update the IAM Polices await exec.exec(pythonPath, [ + "-m", "cfn-lint", "--update-iam-policies", ]); - // Symlink from separate directory so only CFN LINT CLI is added to PATH - const symlinkPath = path.join(tempPath, "bin"); - fs.mkdirSync(symlinkPath); - const cfnLint = isWindows() ? "cfn.exe" : "cfn-lint"; - fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); - return symlinkPath; } diff --git a/lib/setup.js b/lib/setup.js index 0ba3a89..164a54c 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -75,24 +75,26 @@ async function installCLI(python, version) { `cfn-lint==${version}`, ]); + // Symlink from separate directory so only CFN LINT CLI is added to PATH + const symlinkPath = path.join(tempPath, "bin"); + fs.mkdirSync(symlinkPath); + const cfnLint = isWindows() ? "cfn.exe" : "cfn-lint"; + fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); + // Update to the latest linting specs await exec.exec(pythonPath, [ + "-m", "cfn-lint", "--update-specs", ]); // Update the IAM Polices await exec.exec(pythonPath, [ + "-m", "cfn-lint", "--update-iam-policies", ]); - // Symlink from separate directory so only CFN LINT CLI is added to PATH - const symlinkPath = path.join(tempPath, "bin"); - fs.mkdirSync(symlinkPath); - const cfnLint = isWindows() ? "cfn.exe" : "cfn-lint"; - fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); - return symlinkPath; } From b403f7bc970a238b0d1103ffceaccdc9c86aea40 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 18:10:36 +0100 Subject: [PATCH 10/60] Build Vrsion --- dist/index.js | 9 ++++++++- lib/setup.js | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index 4b04097..cf12eef 100644 --- a/dist/index.js +++ b/dist/index.js @@ -81,7 +81,14 @@ async function installCLI(python, version) { // Ensure installation tooling is up-to-date across platforms // setuptools and wheel needed for source and binary distributions - await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "pip"]); + await exec.exec(pythonPath, [ + "-m", + "pip", + "install", + "--upgrade", + "pip", + ]); + await exec.exec(pythonPath, [ "-m", "pip", diff --git a/lib/setup.js b/lib/setup.js index 164a54c..896f409 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -56,7 +56,14 @@ async function installCLI(python, version) { // Ensure installation tooling is up-to-date across platforms // setuptools and wheel needed for source and binary distributions - await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "pip"]); + await exec.exec(pythonPath, [ + "-m", + "pip", + "install", + "--upgrade", + "pip", + ]); + await exec.exec(pythonPath, [ "-m", "pip", From 9df6867c72f653eaa53db86350913e353d04eae6 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 18:12:57 +0100 Subject: [PATCH 11/60] Removing Module --- cfn-lint.json | 2 +- dist/index.js | 2 -- lib/setup.js | 2 -- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/cfn-lint.json b/cfn-lint.json index 83c87e6..98d4fbe 100644 --- a/cfn-lint.json +++ b/cfn-lint.json @@ -17,4 +17,4 @@ ] } ] -} \ No newline at end of file +} diff --git a/dist/index.js b/dist/index.js index cf12eef..9741ba5 100644 --- a/dist/index.js +++ b/dist/index.js @@ -115,14 +115,12 @@ async function installCLI(python, version) { // Update to the latest linting specs await exec.exec(pythonPath, [ - "-m", "cfn-lint", "--update-specs", ]); // Update the IAM Polices await exec.exec(pythonPath, [ - "-m", "cfn-lint", "--update-iam-policies", ]); diff --git a/lib/setup.js b/lib/setup.js index 896f409..2349bc8 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -90,14 +90,12 @@ async function installCLI(python, version) { // Update to the latest linting specs await exec.exec(pythonPath, [ - "-m", "cfn-lint", "--update-specs", ]); // Update the IAM Polices await exec.exec(pythonPath, [ - "-m", "cfn-lint", "--update-iam-policies", ]); From 2141f11969f9e7eb624faabceea1f706ce1cd70f Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 18:30:44 +0100 Subject: [PATCH 12/60] Pushing new version --- dist/index.js | 11 ++--------- lib/setup.js | 11 ++--------- 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/dist/index.js b/dist/index.js index 9741ba5..5b088cf 100644 --- a/dist/index.js +++ b/dist/index.js @@ -115,14 +115,8 @@ async function installCLI(python, version) { // Update to the latest linting specs await exec.exec(pythonPath, [ - "cfn-lint", - "--update-specs", - ]); - - // Update the IAM Polices - await exec.exec(pythonPath, [ - "cfn-lint", - "--update-iam-policies", + "echo", + "$PATH", ]); return symlinkPath; @@ -150,7 +144,6 @@ async function setup() { // python3 isn't standard on Windows const defaultPython = isWindows() ? "python" : "python3"; const python = getInput("python", /^.+$/, defaultPython); - const binPath = await installCLI(python, version); core.addPath(binPath); } diff --git a/lib/setup.js b/lib/setup.js index 2349bc8..18d10f2 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -90,14 +90,8 @@ async function installCLI(python, version) { // Update to the latest linting specs await exec.exec(pythonPath, [ - "cfn-lint", - "--update-specs", - ]); - - // Update the IAM Polices - await exec.exec(pythonPath, [ - "cfn-lint", - "--update-iam-policies", + "echo", + "$PATH", ]); return symlinkPath; @@ -125,7 +119,6 @@ async function setup() { // python3 isn't standard on Windows const defaultPython = isWindows() ? "python" : "python3"; const python = getInput("python", /^.+$/, defaultPython); - const binPath = await installCLI(python, version); core.addPath(binPath); } From ab22ae5cc0c2b66492532c6fa58cd4f325087494 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 18:34:38 +0100 Subject: [PATCH 13/60] Pushing new version --- dist/index.js | 1 + lib/setup.js | 1 + 2 files changed, 2 insertions(+) diff --git a/dist/index.js b/dist/index.js index 5b088cf..fd07cbb 100644 --- a/dist/index.js +++ b/dist/index.js @@ -115,6 +115,7 @@ async function installCLI(python, version) { // Update to the latest linting specs await exec.exec(pythonPath, [ + "-m", "echo", "$PATH", ]); diff --git a/lib/setup.js b/lib/setup.js index 18d10f2..94d70a4 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -90,6 +90,7 @@ async function installCLI(python, version) { // Update to the latest linting specs await exec.exec(pythonPath, [ + "-m", "echo", "$PATH", ]); From 96a01d715b5b03145a656c013a42fcd28b3cd894 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 18:38:17 +0100 Subject: [PATCH 14/60] Update Specs --- dist/index.js | 9 ++++----- lib/setup.js | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/dist/index.js b/dist/index.js index fd07cbb..7966dd3 100644 --- a/dist/index.js +++ b/dist/index.js @@ -110,14 +110,13 @@ async function installCLI(python, version) { // Symlink from separate directory so only CFN LINT CLI is added to PATH const symlinkPath = path.join(tempPath, "bin"); fs.mkdirSync(symlinkPath); - const cfnLint = isWindows() ? "cfn.exe" : "cfn-lint"; + const cfnLint = isWindows() ? "cfn-lint.exe" : "cfn-lint"; fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); // Update to the latest linting specs - await exec.exec(pythonPath, [ - "-m", - "echo", - "$PATH", + await exec.exec(binPath, [ + "cfn-lint", + "--update-specs", ]); return symlinkPath; diff --git a/lib/setup.js b/lib/setup.js index 94d70a4..f9e6d0b 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -85,14 +85,13 @@ async function installCLI(python, version) { // Symlink from separate directory so only CFN LINT CLI is added to PATH const symlinkPath = path.join(tempPath, "bin"); fs.mkdirSync(symlinkPath); - const cfnLint = isWindows() ? "cfn.exe" : "cfn-lint"; + const cfnLint = isWindows() ? "cfn-lint.exe" : "cfn-lint"; fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); // Update to the latest linting specs - await exec.exec(pythonPath, [ - "-m", - "echo", - "$PATH", + await exec.exec(binPath, [ + "cfn-lint", + "--update-specs", ]); return symlinkPath; From f98f2d225a8a3134c7fc85ca6bfe92929aff0aa9 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 18:42:48 +0100 Subject: [PATCH 15/60] echo PATH --- dist/index.js | 4 ++-- lib/setup.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/index.js b/dist/index.js index 7966dd3..4dd983b 100644 --- a/dist/index.js +++ b/dist/index.js @@ -115,8 +115,8 @@ async function installCLI(python, version) { // Update to the latest linting specs await exec.exec(binPath, [ - "cfn-lint", - "--update-specs", + "echo", + "$PATH", ]); return symlinkPath; diff --git a/lib/setup.js b/lib/setup.js index f9e6d0b..9c7f849 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -90,8 +90,8 @@ async function installCLI(python, version) { // Update to the latest linting specs await exec.exec(binPath, [ - "cfn-lint", - "--update-specs", + "echo", + "$PATH", ]); return symlinkPath; From ffe9bfb6d4102a88729f68a286c257ebbc435a70 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 18:45:45 +0100 Subject: [PATCH 16/60] Pushing Changes --- dist/index.js | 10 +++++----- lib/setup.js | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/dist/index.js b/dist/index.js index 4dd983b..414fc25 100644 --- a/dist/index.js +++ b/dist/index.js @@ -113,15 +113,14 @@ async function installCLI(python, version) { const cfnLint = isWindows() ? "cfn-lint.exe" : "cfn-lint"; fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); - // Update to the latest linting specs - await exec.exec(binPath, [ - "echo", - "$PATH", - ]); return symlinkPath; } +async function test(binPath) { + console.log(binPath); +} + /** * Gets an input value. * @@ -146,6 +145,7 @@ async function setup() { const python = getInput("python", /^.+$/, defaultPython); const binPath = await installCLI(python, version); core.addPath(binPath); + await test(binPath); } module.exports = setup; diff --git a/lib/setup.js b/lib/setup.js index 9c7f849..2f2d617 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -88,15 +88,14 @@ async function installCLI(python, version) { const cfnLint = isWindows() ? "cfn-lint.exe" : "cfn-lint"; fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); - // Update to the latest linting specs - await exec.exec(binPath, [ - "echo", - "$PATH", - ]); return symlinkPath; } +async function test(binPath) { + console.log(binPath); +} + /** * Gets an input value. * @@ -121,6 +120,7 @@ async function setup() { const python = getInput("python", /^.+$/, defaultPython); const binPath = await installCLI(python, version); core.addPath(binPath); + await test(binPath); } module.exports = setup; From e1aa658e1babf83d4f1b660d37a48dd31f3af904 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Thu, 15 Apr 2021 18:48:38 +0100 Subject: [PATCH 17/60] Testing CFN Lint locally --- dist/index.js | 4 ++-- lib/setup.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist/index.js b/dist/index.js index 414fc25..4b780ae 100644 --- a/dist/index.js +++ b/dist/index.js @@ -117,8 +117,8 @@ async function installCLI(python, version) { return symlinkPath; } -async function test(binPath) { - console.log(binPath); +async function test() { + await exec.exec('cfn-lint --version') } /** diff --git a/lib/setup.js b/lib/setup.js index 2f2d617..86c26f8 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -92,8 +92,8 @@ async function installCLI(python, version) { return symlinkPath; } -async function test(binPath) { - console.log(binPath); +async function test() { + await exec.exec('cfn-lint --version') } /** From daf409db4a6c890e3853f6802a4dac4fc5d00bce Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 09:32:30 +0100 Subject: [PATCH 18/60] Pushing Input Command Test --- .github/workflows/main.yml | 10 ++++- action.yml | 5 ++- examples/template.yml | 79 ++++++++++++++++++++++++++++++++++++++ lib/setup.js | 57 +++++++++++++++++++++------ 4 files changed, 137 insertions(+), 14 deletions(-) create mode 100644 examples/template.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f61e8e5..0848818 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,12 +26,18 @@ jobs: steps: - uses: actions/checkout@v2 - ### Testing specifying a version. + ### Testing pulling latest version. + - uses: ./ + - run: cfn-lint --version + + ### Testing specifying a version - uses: ./ with: version: "0.44.5" - run: cfn-lint --version - ### Testing pulling latest version. + ### Testing specifying a version and command - uses: ./ + with: + command: cfn-lint -t ./examples/template.yml - run: cfn-lint --version diff --git a/action.yml b/action.yml index 4001070..af9ca86 100644 --- a/action.yml +++ b/action.yml @@ -5,11 +5,14 @@ branding: color: "orange" inputs: version: - description: "The AWS CFN LINT version to install" + description: "The version of the AWS Cloud Formation Linter you would like to install" required: false python: description: "The Python interpreter to use for AWS CFN LINT" required: false + command: + description: "The command you would like AWS Cloud Formation Linter to Run" + required: false runs: using: "node12" main: "dist/index.js" diff --git a/examples/template.yml b/examples/template.yml new file mode 100644 index 0000000..986b67b --- /dev/null +++ b/examples/template.yml @@ -0,0 +1,79 @@ +AWSTemplateFormatVersion: '2010-09-09' +Description: Template for Lambda Sample. +Parameters: + EnvName: + Type: String + Description: Name of an environment. 'dev', 'staging', 'prod' and any name. + AllowedPattern: ^.*[^0-9]$ + ConstraintDescription: Must end with non-numeric character. + LambdaHandlerPath: + Type: String + Description: Path of a Lambda Handler. + AllowedPattern: ^.*[^0-9]$ + ConstraintDescription: Must end with non-numeric character. +Outputs: + LambdaRoleARN: + Description: Role for Lambda execution. + Value: + Fn::GetAtt: + - LambdaRole + - Arn + Export: + Name: + Fn::Sub: LambdaRole + LambdaFunctionName: + Value: + Ref: LambdaFunction + LambdaFunctionARN: + Description: Lambda function ARN. + Value: + Fn::GetAtt: + - LambdaFunction + - Arn + Export: + Name: + Fn::Sub: LambdaARN-${EnvName} +Resources: + LambdaRole: + Type: AWS::IAM::Role + Properties: + RoleName: + Fn::Sub: lambda-role + AssumeRolePolicyDocument: + Statement: + - Action: + - sts:AssumeRole + Effect: Allow + Principal: + Service: + - lambda.amazonaws.com + Version: 2012-10-17 + ManagedPolicyArns: + - arn:aws:iam::aws:policy/AWSLambdaExecute + - arn:aws:iam::aws:policy/AmazonS3FullAccess + - arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess + - arn:aws:iam::aws:policy/AmazonKinesisFullAccess + Path: / + LambdaFunction: + Type: AWS::Lambda::Function + Properties: + FunctionName: + Fn::Sub: lambda-function-${EnvName} + Description: LambdaFunctioni of nodejs10.x. + Runtime: nodejs10.x + Code: + ZipFile: + "exports.handler = function(event, context){\n + var sample = sample;" + Handler: ${LambdaHandlerPath} + MemorySize: 128 + Timeout: 10 + Role: + Fn::GetAtt: + - LambdaRole + - Arn + Environment: + Variables: + ENV: + Fn::Sub: ${EnvName} + TZ: UTC diff --git a/lib/setup.js b/lib/setup.js index 86c26f8..66678f4 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -40,7 +40,7 @@ async function createPythonVenv(python, venvPath) { * @param {string} version - The CFN LINT CLI version to install. * @returns {Promise} The directory CFN LINT CLI is installed in. */ -async function installCLI(python, version) { +async function installCLI({ python, version }) { const tempPath = mkdirTemp(); // Create virtual environment @@ -88,12 +88,23 @@ async function installCLI(python, version) { const cfnLint = isWindows() ? "cfn-lint.exe" : "cfn-lint"; fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); - return symlinkPath; } -async function test() { - await exec.exec('cfn-lint --version') +/** + * Runs a Cloud Formation Linter Command. + * + * @param {string} command - The Cloud Formation Linter Command to Run + * @throws {e} Throws if the exec command fails. + */ +async function runCommand(command) { + try{ + await exec.exec(command) + } catch(e){ + core.error(`Error running command: ${command}. Returned error is: ${e.message}`); + throw e; + } + } /** @@ -113,14 +124,38 @@ function getInput(name, pattern, defaultValue) { return value; } +/** + * Collects all the input values and returns them as an object. + * + * @returns {object} Returns Object of Inputs. + * @throws {e} Throws if any of the inputs fail to collect. + */ +function getInputs(){ + const defaultPython = isWindows() ? "python" : "python3"; // python3 isn't standard on Windows + + try { + const version = getInput("version", /^[\d.*]+$/, "0.*"); + const command = getInput("command", /^cfn-lint\s/, null); + const python = getInput("python", /^.+$/, defaultPython); + return { version, command, python } + } catch(e){ + core.error('Failed to Collect Inputs'); + throw e; + } + +} + async function setup() { - const version = getInput("version", /^[\d.*]+$/, "0.*"); - // python3 isn't standard on Windows - const defaultPython = isWindows() ? "python" : "python3"; - const python = getInput("python", /^.+$/, defaultPython); - const binPath = await installCLI(python, version); - core.addPath(binPath); - await test(binPath); + try { + const inputs = await getInputs(); + const binPath = await installCLI(inputs); + core.addPath(binPath); + if(inputs.command) { await runCommand(); } + return { success: true } + } catch(e){ + core.error('Failed to run within setup'); + throw e; + } } module.exports = setup; From 634016cda7847385d8591dbe5d8b4dbecb64d438 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 09:36:41 +0100 Subject: [PATCH 19/60] Pushing Build Update --- .github/workflows/main.yml | 3 ++ dist/index.js | 57 ++++++++++++++++++++++++++++++-------- 2 files changed, 49 insertions(+), 11 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0848818..92e02ab 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,16 +27,19 @@ jobs: - uses: actions/checkout@v2 ### Testing pulling latest version. + - name: Testing GitHub Action Pulling Latest Version of CFN Lint CLI. - uses: ./ - run: cfn-lint --version ### Testing specifying a version + - name: Testing GitHub Action Pulling Specific Version of CFN Lint CLI. - uses: ./ with: version: "0.44.5" - run: cfn-lint --version ### Testing specifying a version and command + - name: Testing GitHub Action Pulling Specific Version of CFN Lint CLI & Runnng Command. - uses: ./ with: command: cfn-lint -t ./examples/template.yml diff --git a/dist/index.js b/dist/index.js index 4b780ae..ea14522 100644 --- a/dist/index.js +++ b/dist/index.js @@ -65,7 +65,7 @@ async function createPythonVenv(python, venvPath) { * @param {string} version - The CFN LINT CLI version to install. * @returns {Promise} The directory CFN LINT CLI is installed in. */ -async function installCLI(python, version) { +async function installCLI({ python, version }) { const tempPath = mkdirTemp(); // Create virtual environment @@ -113,12 +113,23 @@ async function installCLI(python, version) { const cfnLint = isWindows() ? "cfn-lint.exe" : "cfn-lint"; fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); - return symlinkPath; } -async function test() { - await exec.exec('cfn-lint --version') +/** + * Runs a Cloud Formation Linter Command. + * + * @param {string} command - The Cloud Formation Linter Command to Run + * @throws {e} Throws if the exec command fails. + */ +async function runCommand(command) { + try{ + await exec.exec(command) + } catch(e){ + core.error(`Error running command: ${command}. Returned error is: ${e.message}`); + throw e; + } + } /** @@ -138,14 +149,38 @@ function getInput(name, pattern, defaultValue) { return value; } +/** + * Collects all the input values and returns them as an object. + * + * @returns {object} Returns Object of Inputs. + * @throws {e} Throws if any of the inputs fail to collect. + */ +function getInputs(){ + const defaultPython = isWindows() ? "python" : "python3"; // python3 isn't standard on Windows + + try { + const version = getInput("version", /^[\d.*]+$/, "0.*"); + const command = getInput("command", /^cfn-lint\s/, null); + const python = getInput("python", /^.+$/, defaultPython); + return { version, command, python } + } catch(e){ + core.error('Failed to Collect Inputs'); + throw e; + } + +} + async function setup() { - const version = getInput("version", /^[\d.*]+$/, "0.*"); - // python3 isn't standard on Windows - const defaultPython = isWindows() ? "python" : "python3"; - const python = getInput("python", /^.+$/, defaultPython); - const binPath = await installCLI(python, version); - core.addPath(binPath); - await test(binPath); + try { + const inputs = await getInputs(); + const binPath = await installCLI(inputs); + core.addPath(binPath); + if(inputs.command) { await runCommand(); } + return { success: true } + } catch(e){ + core.error('Failed to run within setup'); + throw e; + } } module.exports = setup; From 2e2c33e03800715afc8a21ffda5ef3f2286a804f Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 09:40:39 +0100 Subject: [PATCH 20/60] Update Example Workflow --- .github/workflows/main.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 92e02ab..89407b4 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,13 +26,10 @@ jobs: steps: - uses: actions/checkout@v2 - ### Testing pulling latest version. - - name: Testing GitHub Action Pulling Latest Version of CFN Lint CLI. - uses: ./ - run: cfn-lint --version ### Testing specifying a version - - name: Testing GitHub Action Pulling Specific Version of CFN Lint CLI. - uses: ./ with: version: "0.44.5" @@ -43,4 +40,3 @@ jobs: - uses: ./ with: command: cfn-lint -t ./examples/template.yml - - run: cfn-lint --version From 01ab050de87de8ab51dffe4c7ffdde1a4f8e56ec Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 09:41:18 +0100 Subject: [PATCH 21/60] Update Example Workflow --- .github/workflows/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 89407b4..0848818 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,6 +26,7 @@ jobs: steps: - uses: actions/checkout@v2 + ### Testing pulling latest version. - uses: ./ - run: cfn-lint --version @@ -36,7 +37,7 @@ jobs: - run: cfn-lint --version ### Testing specifying a version and command - - name: Testing GitHub Action Pulling Specific Version of CFN Lint CLI & Runnng Command. - uses: ./ with: command: cfn-lint -t ./examples/template.yml + - run: cfn-lint --version From f11a0505edca20c9007ea97517baa1dfe1392662 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 09:51:41 +0100 Subject: [PATCH 22/60] Allowing Null --- dist/index.js | 2 +- lib/setup.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dist/index.js b/dist/index.js index ea14522..5a43aab 100644 --- a/dist/index.js +++ b/dist/index.js @@ -160,7 +160,7 @@ function getInputs(){ try { const version = getInput("version", /^[\d.*]+$/, "0.*"); - const command = getInput("command", /^cfn-lint\s/, null); + const command = getInput("command", /^cfn-lint\s || null/, null); const python = getInput("python", /^.+$/, defaultPython); return { version, command, python } } catch(e){ diff --git a/lib/setup.js b/lib/setup.js index 66678f4..9bd0de1 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -135,7 +135,7 @@ function getInputs(){ try { const version = getInput("version", /^[\d.*]+$/, "0.*"); - const command = getInput("command", /^cfn-lint\s/, null); + const command = getInput("command", /^cfn-lint\s || null/, null); const python = getInput("python", /^.+$/, defaultPython); return { version, command, python } } catch(e){ From 693d1509d181eb1f09b66d4cde05739d5944b28e Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 09:55:55 +0100 Subject: [PATCH 23/60] Pushing new version --- dist/index.js | 10 ++++++++-- lib/setup.js | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/dist/index.js b/dist/index.js index 5a43aab..a1ac491 100644 --- a/dist/index.js +++ b/dist/index.js @@ -124,7 +124,8 @@ async function installCLI({ python, version }) { */ async function runCommand(command) { try{ - await exec.exec(command) + const exec = await exec.exec(command) + core.info(`Ran command: ${command}. Response is: ${exec}`); } catch(e){ core.error(`Error running command: ${command}. Returned error is: ${e.message}`); throw e; @@ -173,9 +174,14 @@ function getInputs(){ async function setup() { try { const inputs = await getInputs(); + core.info(`inputs found: ${inputs}`) const binPath = await installCLI(inputs); + core.info(`setting binPath: ${binPath}`) core.addPath(binPath); - if(inputs.command) { await runCommand(); } + if(inputs.command) { + core.info('Command Found within Inputs'); + await runCommand(); + } return { success: true } } catch(e){ core.error('Failed to run within setup'); diff --git a/lib/setup.js b/lib/setup.js index 9bd0de1..4765cc9 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -99,7 +99,8 @@ async function installCLI({ python, version }) { */ async function runCommand(command) { try{ - await exec.exec(command) + const exec = await exec.exec(command) + core.info(`Ran command: ${command}. Response is: ${exec}`); } catch(e){ core.error(`Error running command: ${command}. Returned error is: ${e.message}`); throw e; @@ -148,9 +149,14 @@ function getInputs(){ async function setup() { try { const inputs = await getInputs(); + core.info(`inputs found: ${inputs}`) const binPath = await installCLI(inputs); + core.info(`setting binPath: ${binPath}`) core.addPath(binPath); - if(inputs.command) { await runCommand(); } + if(inputs.command) { + core.info('Command Found within Inputs'); + await runCommand(); + } return { success: true } } catch(e){ core.error('Failed to run within setup'); From 5598ce272003987eaa8fa2ee97c7f14b498576b4 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 09:59:01 +0100 Subject: [PATCH 24/60] Parsing Response --- dist/index.js | 8 ++++---- lib/setup.js | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dist/index.js b/dist/index.js index a1ac491..2b3556a 100644 --- a/dist/index.js +++ b/dist/index.js @@ -122,10 +122,10 @@ async function installCLI({ python, version }) { * @param {string} command - The Cloud Formation Linter Command to Run * @throws {e} Throws if the exec command fails. */ -async function runCommand(command) { +async function runCommand({ command }) { try{ - const exec = await exec.exec(command) - core.info(`Ran command: ${command}. Response is: ${exec}`); + const response = await exec.exec(command) + core.info(`Ran command: ${command}. Response is: ${response}`); } catch(e){ core.error(`Error running command: ${command}. Returned error is: ${e.message}`); throw e; @@ -180,7 +180,7 @@ async function setup() { core.addPath(binPath); if(inputs.command) { core.info('Command Found within Inputs'); - await runCommand(); + await runCommand(inputs); } return { success: true } } catch(e){ diff --git a/lib/setup.js b/lib/setup.js index 4765cc9..e3c2544 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -97,10 +97,10 @@ async function installCLI({ python, version }) { * @param {string} command - The Cloud Formation Linter Command to Run * @throws {e} Throws if the exec command fails. */ -async function runCommand(command) { +async function runCommand({ command }) { try{ - const exec = await exec.exec(command) - core.info(`Ran command: ${command}. Response is: ${exec}`); + const response = await exec.exec(command) + core.info(`Ran command: ${command}. Response is: ${response}`); } catch(e){ core.error(`Error running command: ${command}. Returned error is: ${e.message}`); throw e; @@ -155,7 +155,7 @@ async function setup() { core.addPath(binPath); if(inputs.command) { core.info('Command Found within Inputs'); - await runCommand(); + await runCommand(inputs); } return { success: true } } catch(e){ From 9b424e4fb5d757d4f529d0cbbe8464314b11f0c6 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 10:24:00 +0100 Subject: [PATCH 25/60] Decoupled Architecure --- .github/workflows/main.yml | 10 +- dist/index.js | 312 +++++++++++++++++++------------------ lib/setup.js | 168 +++----------------- lib/utils/getInput.js | 11 ++ lib/utils/getInputs.js | 21 +++ lib/utils/helpers.js | 21 +++ lib/utils/installCLI.js | 40 +++++ lib/utils/runCommand.js | 14 ++ 8 files changed, 301 insertions(+), 296 deletions(-) create mode 100644 lib/utils/getInput.js create mode 100644 lib/utils/getInputs.js create mode 100644 lib/utils/helpers.js create mode 100644 lib/utils/installCLI.js create mode 100644 lib/utils/runCommand.js diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0848818..0867fed 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -29,6 +29,7 @@ jobs: ### Testing pulling latest version. - uses: ./ - run: cfn-lint --version + - run: cfn-lint -t ./examples/template.yml ### Testing specifying a version - uses: ./ @@ -37,7 +38,14 @@ jobs: - run: cfn-lint --version ### Testing specifying a version and command + - name: Testing with CFN Lint Version & Command + - uses: ./ + with: + command: cfn-lint -t ./examples/template.yml + version: "0.44.5" + + ### Testing specifying a version and command + - name: Testing with CFN Lint Command - uses: ./ with: command: cfn-lint -t ./examples/template.yml - - run: cfn-lint --version diff --git a/dist/index.js b/dist/index.js index 2b3556a..00f14b0 100644 --- a/dist/index.js +++ b/dist/index.js @@ -23,175 +23,191 @@ const setup = __nccwpck_require__(391); /***/ 391: /***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { -const fs = __nccwpck_require__(747); -const path = __nccwpck_require__(622); -const os = __nccwpck_require__(87); - const core = __nccwpck_require__(186); -const exec = __nccwpck_require__(514); -const io = __nccwpck_require__(436); -/** - * Returns whether the current platform is Windows. - */ -function isWindows() { - return os.platform() === "win32"; -} -/** - * Returns a new temporary directory. - */ -function mkdirTemp() { - return fs.mkdtempSync(path.join(os.tmpdir(), "setup-cfn-lint-")); -} +const { getInputs } = __nccwpck_require__(515) +const { installCLI } = __nccwpck_require__(298) +const { runCommand } = __nccwpck_require__(771) -/** - * Creates a Python virtual environment. - * - * @param {string} python - The Python interpreter to use. - * @param {string} venvPath - The virtual environment directory. - */ -async function createPythonVenv(python, venvPath) { - const pythonPath = await io.which(python, true); - await exec.exec(pythonPath, ["--version"]); - await exec.exec(pythonPath, ["-m", "venv", venvPath]); -} +async function setup() { -/** - * Installs CFN LINT CLI. - * - * @param {string} python - The Python interpreter to use for CFN LINT CLI. - * @param {string} version - The CFN LINT CLI version to install. - * @returns {Promise} The directory CFN LINT CLI is installed in. - */ -async function installCLI({ python, version }) { - const tempPath = mkdirTemp(); - - // Create virtual environment - const venvPath = path.join(tempPath, ".venv"); - await createPythonVenv(python, venvPath); - - // See https://docs.python.org/3/library/venv.html - const binDir = isWindows() ? "Scripts" : "bin"; - const binPath = path.join(venvPath, binDir); - - // Virtual environment Python - const pythonPath = path.join(binPath, "python"); - - // Ensure installation tooling is up-to-date across platforms - // setuptools and wheel needed for source and binary distributions - await exec.exec(pythonPath, [ - "-m", - "pip", - "install", - "--upgrade", - "pip", - ]); - - await exec.exec(pythonPath, [ - "-m", - "pip", - "install", - "--upgrade", - "setuptools", - "wheel", - ]); - - // Install latest compatible version - await exec.exec(pythonPath, [ - "-m", - "pip", - "install", - "--upgrade", - `cfn-lint==${version}`, - ]); - - // Symlink from separate directory so only CFN LINT CLI is added to PATH - const symlinkPath = path.join(tempPath, "bin"); - fs.mkdirSync(symlinkPath); - const cfnLint = isWindows() ? "cfn-lint.exe" : "cfn-lint"; - fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); - - return symlinkPath; -} + let inputs; let binPath; -/** - * Runs a Cloud Formation Linter Command. - * - * @param {string} command - The Cloud Formation Linter Command to Run - * @throws {e} Throws if the exec command fails. - */ -async function runCommand({ command }) { - try{ - const response = await exec.exec(command) - core.info(`Ran command: ${command}. Response is: ${response}`); - } catch(e){ - core.error(`Error running command: ${command}. Returned error is: ${e.message}`); - throw e; + try { + inputs = await getInputs(); + } catch (error){ + return error; } -} - -/** - * Gets an input value. - * - * @param {string} name - The input value name. - * @param {RegExp} pattern - The input value pattern. - * @param {string} defaultValue - The default value if the input value is empty. - * @returns {string} The input value. - * @throws {Error} Throws if the input value doesn't match `pattern`. - */ -function getInput(name, pattern, defaultValue) { - const value = core.getInput(name) || defaultValue; - if (!pattern.test(value)) { - throw new Error(`${name} doesn't match ${pattern}`); + try { + binPath = await installCLI(inputs); + } catch (error){ + return error; } - return value; -} -/** - * Collects all the input values and returns them as an object. - * - * @returns {object} Returns Object of Inputs. - * @throws {e} Throws if any of the inputs fail to collect. - */ -function getInputs(){ - const defaultPython = isWindows() ? "python" : "python3"; // python3 isn't standard on Windows + core.addPath(binPath); - try { - const version = getInput("version", /^[\d.*]+$/, "0.*"); - const command = getInput("command", /^cfn-lint\s || null/, null); - const python = getInput("python", /^.+$/, defaultPython); - return { version, command, python } - } catch(e){ - core.error('Failed to Collect Inputs'); - throw e; + if(!inputs.command){ + return; } -} - -async function setup() { try { - const inputs = await getInputs(); - core.info(`inputs found: ${inputs}`) - const binPath = await installCLI(inputs); - core.info(`setting binPath: ${binPath}`) - core.addPath(binPath); - if(inputs.command) { - core.info('Command Found within Inputs'); - await runCommand(inputs); - } - return { success: true } - } catch(e){ - core.error('Failed to run within setup'); - throw e; + await runCommand(inputs); + } catch (error){ + return error; } + + return; + } module.exports = setup; +/***/ }), + +/***/ 719: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const core = __nccwpck_require__(186); + +module.exports = { + getInput: (name, pattern, defaultValue) => { + const value = core.getInput(name) || defaultValue; + if (!pattern.test(value)) { + throw new Error(`${name} doesn't match ${pattern}`); + } + return value; + }, +}; + + +/***/ }), + +/***/ 515: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const core = __nccwpck_require__(186); + +const { getInput } = __nccwpck_require__(719); +const { isWindows } = __nccwpck_require__(604); + +module.exports = { + getInputs: () => { + // python3 isn't standard on Windows + const defaultPython = isWindows() ? "python" : "python3"; + + try { + const version = getInput("version", /^[\d.*]+$/, "0.*"); + const command = getInput("command", /^cfn-lint\s || null/, null); + const python = getInput("python", /^.+$/, defaultPython); + return { version, command, python } + } catch(e){ + core.error('Failed to Collect Inputs'); + throw e; + } + }, +}; + + +/***/ }), + +/***/ 604: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const fs = __nccwpck_require__(747); +const path = __nccwpck_require__(622); +const os = __nccwpck_require__(87); + +const exec = __nccwpck_require__(514); +const io = __nccwpck_require__(436); + +module.exports = { + isWindows: () => { + return os.platform() === "win32"; + }, + mkdirTemp: () => { + return fs.mkdtempSync(path.join(os.tmpdir(), "setup-cfn-lint-")); + }, + createPythonVenv: async (python, venvPath) => { + const pythonPath = await io.which(python, true); + + await exec.exec(pythonPath, ["--version"]); + await exec.exec(pythonPath, ["-m", "venv", venvPath]); + }, +}; + + +/***/ }), + +/***/ 298: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const fs = __nccwpck_require__(747); +const path = __nccwpck_require__(622); + +const exec = __nccwpck_require__(514); + +const { mkdirTemp, createPythonVenv, isWindows} = __nccwpck_require__(604); + + +module.exports = { + installCLI: async ({ python, version }) => { + const tempPath = mkdirTemp(); + + // Create virtual environment + const venvPath = path.join(tempPath, ".venv"); + await createPythonVenv(python, venvPath); + + // See https://docs.python.org/3/library/venv.html + const binDir = isWindows() ? "Scripts" : "bin"; + const binPath = path.join(venvPath, binDir); + + // Virtual environment running Python + const pythonPath = path.join(binPath, "python"); + + // Ensure installation tooling is up-to-date across platforms + await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "pip"]); + // setuptools and wheel needed for source and binary distributions + await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "setuptools", "wheel" ]); + // Install latest compatible version + await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", `cfn-lint==${version}` ]); + + // Symlink from separate directory so only CFN LINT CLI is added to PATH + const symlinkPath = path.join(tempPath, "bin"); + fs.mkdirSync(symlinkPath); + const cfnLint = isWindows() ? "cfn-lint.exe" : "cfn-lint"; + fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); + + return symlinkPath; + }, + +}; + + +/***/ }), + +/***/ 771: +/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => { + +const exec = __nccwpck_require__(514); +const core = __nccwpck_require__(186); + +module.exports = { + runCommand: async ({ command }) => { + try{ + const response = await exec.exec(command) + core.info(`Ran command: ${command}. Response is: ${response}`); + } catch(e){ + core.error(`Error running command: ${command}. Returned error is: ${e.message}`); + throw e; + } + }, +}; + + /***/ }), /***/ 351: diff --git a/lib/setup.js b/lib/setup.js index e3c2544..0be482d 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -1,167 +1,41 @@ -const fs = require("fs"); -const path = require("path"); -const os = require("os"); - const core = require("@actions/core"); -const exec = require("@actions/exec"); -const io = require("@actions/io"); - -/** - * Returns whether the current platform is Windows. - */ -function isWindows() { - return os.platform() === "win32"; -} - -/** - * Returns a new temporary directory. - */ -function mkdirTemp() { - return fs.mkdtempSync(path.join(os.tmpdir(), "setup-cfn-lint-")); -} - -/** - * Creates a Python virtual environment. - * - * @param {string} python - The Python interpreter to use. - * @param {string} venvPath - The virtual environment directory. - */ -async function createPythonVenv(python, venvPath) { - const pythonPath = await io.which(python, true); - await exec.exec(pythonPath, ["--version"]); - await exec.exec(pythonPath, ["-m", "venv", venvPath]); -} - -/** - * Installs CFN LINT CLI. - * - * @param {string} python - The Python interpreter to use for CFN LINT CLI. - * @param {string} version - The CFN LINT CLI version to install. - * @returns {Promise} The directory CFN LINT CLI is installed in. - */ -async function installCLI({ python, version }) { - const tempPath = mkdirTemp(); - - // Create virtual environment - const venvPath = path.join(tempPath, ".venv"); - await createPythonVenv(python, venvPath); - // See https://docs.python.org/3/library/venv.html - const binDir = isWindows() ? "Scripts" : "bin"; - const binPath = path.join(venvPath, binDir); +const { getInputs } = require('./utils/getInputs.js') +const { installCLI } = require('./utils/installCLI.js') +const { runCommand } = require('./utils/runCommand.js') - // Virtual environment Python - const pythonPath = path.join(binPath, "python"); - // Ensure installation tooling is up-to-date across platforms - // setuptools and wheel needed for source and binary distributions - await exec.exec(pythonPath, [ - "-m", - "pip", - "install", - "--upgrade", - "pip", - ]); - - await exec.exec(pythonPath, [ - "-m", - "pip", - "install", - "--upgrade", - "setuptools", - "wheel", - ]); - - // Install latest compatible version - await exec.exec(pythonPath, [ - "-m", - "pip", - "install", - "--upgrade", - `cfn-lint==${version}`, - ]); +async function setup() { - // Symlink from separate directory so only CFN LINT CLI is added to PATH - const symlinkPath = path.join(tempPath, "bin"); - fs.mkdirSync(symlinkPath); - const cfnLint = isWindows() ? "cfn-lint.exe" : "cfn-lint"; - fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); + let inputs; let binPath; - return symlinkPath; -} + try { + inputs = await getInputs(); + } catch (error){ + return error; + } -/** - * Runs a Cloud Formation Linter Command. - * - * @param {string} command - The Cloud Formation Linter Command to Run - * @throws {e} Throws if the exec command fails. - */ -async function runCommand({ command }) { - try{ - const response = await exec.exec(command) - core.info(`Ran command: ${command}. Response is: ${response}`); - } catch(e){ - core.error(`Error running command: ${command}. Returned error is: ${e.message}`); - throw e; + try { + binPath = await installCLI(inputs); + } catch (error){ + return error; } -} + core.addPath(binPath); -/** - * Gets an input value. - * - * @param {string} name - The input value name. - * @param {RegExp} pattern - The input value pattern. - * @param {string} defaultValue - The default value if the input value is empty. - * @returns {string} The input value. - * @throws {Error} Throws if the input value doesn't match `pattern`. - */ -function getInput(name, pattern, defaultValue) { - const value = core.getInput(name) || defaultValue; - if (!pattern.test(value)) { - throw new Error(`${name} doesn't match ${pattern}`); + if(!inputs.command){ + return; } - return value; -} - -/** - * Collects all the input values and returns them as an object. - * - * @returns {object} Returns Object of Inputs. - * @throws {e} Throws if any of the inputs fail to collect. - */ -function getInputs(){ - const defaultPython = isWindows() ? "python" : "python3"; // python3 isn't standard on Windows try { - const version = getInput("version", /^[\d.*]+$/, "0.*"); - const command = getInput("command", /^cfn-lint\s || null/, null); - const python = getInput("python", /^.+$/, defaultPython); - return { version, command, python } - } catch(e){ - core.error('Failed to Collect Inputs'); - throw e; + await runCommand(inputs); + } catch (error){ + return error; } -} + return; -async function setup() { - try { - const inputs = await getInputs(); - core.info(`inputs found: ${inputs}`) - const binPath = await installCLI(inputs); - core.info(`setting binPath: ${binPath}`) - core.addPath(binPath); - if(inputs.command) { - core.info('Command Found within Inputs'); - await runCommand(inputs); - } - return { success: true } - } catch(e){ - core.error('Failed to run within setup'); - throw e; - } } module.exports = setup; diff --git a/lib/utils/getInput.js b/lib/utils/getInput.js new file mode 100644 index 0000000..e888af6 --- /dev/null +++ b/lib/utils/getInput.js @@ -0,0 +1,11 @@ +const core = require("@actions/core"); + +module.exports = { + getInput: (name, pattern, defaultValue) => { + const value = core.getInput(name) || defaultValue; + if (!pattern.test(value)) { + throw new Error(`${name} doesn't match ${pattern}`); + } + return value; + }, +}; diff --git a/lib/utils/getInputs.js b/lib/utils/getInputs.js new file mode 100644 index 0000000..c4465d9 --- /dev/null +++ b/lib/utils/getInputs.js @@ -0,0 +1,21 @@ +const core = require("@actions/core"); + +const { getInput } = require('./getInput.js'); +const { isWindows } = require('./helpers.js'); + +module.exports = { + getInputs: () => { + // python3 isn't standard on Windows + const defaultPython = isWindows() ? "python" : "python3"; + + try { + const version = getInput("version", /^[\d.*]+$/, "0.*"); + const command = getInput("command", /^cfn-lint\s || null/, null); + const python = getInput("python", /^.+$/, defaultPython); + return { version, command, python } + } catch(e){ + core.error('Failed to Collect Inputs'); + throw e; + } + }, +}; diff --git a/lib/utils/helpers.js b/lib/utils/helpers.js new file mode 100644 index 0000000..0e74f30 --- /dev/null +++ b/lib/utils/helpers.js @@ -0,0 +1,21 @@ +const fs = require("fs"); +const path = require("path"); +const os = require("os"); + +const exec = require("@actions/exec"); +const io = require("@actions/io"); + +module.exports = { + isWindows: () => { + return os.platform() === "win32"; + }, + mkdirTemp: () => { + return fs.mkdtempSync(path.join(os.tmpdir(), "setup-cfn-lint-")); + }, + createPythonVenv: async (python, venvPath) => { + const pythonPath = await io.which(python, true); + + await exec.exec(pythonPath, ["--version"]); + await exec.exec(pythonPath, ["-m", "venv", venvPath]); + }, +}; diff --git a/lib/utils/installCLI.js b/lib/utils/installCLI.js new file mode 100644 index 0000000..25ca820 --- /dev/null +++ b/lib/utils/installCLI.js @@ -0,0 +1,40 @@ +const fs = require("fs"); +const path = require("path"); + +const exec = require("@actions/exec"); + +const { mkdirTemp, createPythonVenv, isWindows} = require('./helpers.js'); + + +module.exports = { + installCLI: async ({ python, version }) => { + const tempPath = mkdirTemp(); + + // Create virtual environment + const venvPath = path.join(tempPath, ".venv"); + await createPythonVenv(python, venvPath); + + // See https://docs.python.org/3/library/venv.html + const binDir = isWindows() ? "Scripts" : "bin"; + const binPath = path.join(venvPath, binDir); + + // Virtual environment running Python + const pythonPath = path.join(binPath, "python"); + + // Ensure installation tooling is up-to-date across platforms + await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "pip"]); + // setuptools and wheel needed for source and binary distributions + await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "setuptools", "wheel" ]); + // Install latest compatible version + await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", `cfn-lint==${version}` ]); + + // Symlink from separate directory so only CFN LINT CLI is added to PATH + const symlinkPath = path.join(tempPath, "bin"); + fs.mkdirSync(symlinkPath); + const cfnLint = isWindows() ? "cfn-lint.exe" : "cfn-lint"; + fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); + + return symlinkPath; + }, + +}; diff --git a/lib/utils/runCommand.js b/lib/utils/runCommand.js new file mode 100644 index 0000000..66f0744 --- /dev/null +++ b/lib/utils/runCommand.js @@ -0,0 +1,14 @@ +const exec = require("@actions/exec"); +const core = require("@actions/core"); + +module.exports = { + runCommand: async ({ command }) => { + try{ + const response = await exec.exec(command) + core.info(`Ran command: ${command}. Response is: ${response}`); + } catch(e){ + core.error(`Error running command: ${command}. Returned error is: ${e.message}`); + throw e; + } + }, +}; From 5109933cd9f960c834000767bba97c204da0e3d5 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 10:30:10 +0100 Subject: [PATCH 26/60] Pushing new GitHub Workflow --- .github/workflows/main.yml | 19 +++++++++++++------ dist/index.js | 2 -- lib/setup.js | 2 -- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 0867fed..4d436d9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -24,26 +24,33 @@ jobs: name: ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: + # Step 1 + - name: Git Checkout - uses: actions/checkout@v2 - - ### Testing pulling latest version. + # Step 2 + - name: Setup Cloud Formation Linter with Latest Version - uses: ./ + # Step 3 + - name: Print the Cloud Formation Linter Version & run Linter. - run: cfn-lint --version - run: cfn-lint -t ./examples/template.yml - - ### Testing specifying a version + # Step 4 + - name: Setup Cloud Formation Linter with Specific Version - uses: ./ with: version: "0.44.5" + # Step 5 + - name: Print the Cloud Formation Linter Version & run Linter. - run: cfn-lint --version - + - run: cfn-lint -t ./examples/template.yml + # Step 6 ### Testing specifying a version and command - name: Testing with CFN Lint Version & Command - uses: ./ with: command: cfn-lint -t ./examples/template.yml version: "0.44.5" - + # Step 7 ### Testing specifying a version and command - name: Testing with CFN Lint Command - uses: ./ diff --git a/dist/index.js b/dist/index.js index 00f14b0..43fbba1 100644 --- a/dist/index.js +++ b/dist/index.js @@ -25,12 +25,10 @@ const setup = __nccwpck_require__(391); const core = __nccwpck_require__(186); - const { getInputs } = __nccwpck_require__(515) const { installCLI } = __nccwpck_require__(298) const { runCommand } = __nccwpck_require__(771) - async function setup() { let inputs; let binPath; diff --git a/lib/setup.js b/lib/setup.js index 0be482d..2b9107b 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -1,11 +1,9 @@ const core = require("@actions/core"); - const { getInputs } = require('./utils/getInputs.js') const { installCLI } = require('./utils/installCLI.js') const { runCommand } = require('./utils/runCommand.js') - async function setup() { let inputs; let binPath; From 7d663b593adbeac62394687eb07035e4ec9bb7af Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 10:33:21 +0100 Subject: [PATCH 27/60] Pushing New Workflows --- .github/workflows/main.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4d436d9..065d6fe 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -26,33 +26,33 @@ jobs: steps: # Step 1 - name: Git Checkout - - uses: actions/checkout@v2 + uses: actions/checkout@v2 # Step 2 - name: Setup Cloud Formation Linter with Latest Version - - uses: ./ + uses: ./ # Step 3 - name: Print the Cloud Formation Linter Version & run Linter. - - run: cfn-lint --version - - run: cfn-lint -t ./examples/template.yml + run: cfn-lint --version + run: cfn-lint -t ./examples/template.yml # Step 4 - name: Setup Cloud Formation Linter with Specific Version - - uses: ./ + uses: ./ with: version: "0.44.5" # Step 5 - name: Print the Cloud Formation Linter Version & run Linter. - - run: cfn-lint --version - - run: cfn-lint -t ./examples/template.yml + run: cfn-lint --version + run: cfn-lint -t ./examples/template.yml # Step 6 ### Testing specifying a version and command - name: Testing with CFN Lint Version & Command - - uses: ./ + uses: ./ with: command: cfn-lint -t ./examples/template.yml version: "0.44.5" # Step 7 ### Testing specifying a version and command - name: Testing with CFN Lint Command - - uses: ./ + uses: ./ with: command: cfn-lint -t ./examples/template.yml From 4596cf9bef6906101f26979e3957bb9526e405e9 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 10:37:10 +0100 Subject: [PATCH 28/60] Updated Workflow --- .github/workflows/main.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 065d6fe..d210184 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -32,8 +32,9 @@ jobs: uses: ./ # Step 3 - name: Print the Cloud Formation Linter Version & run Linter. - run: cfn-lint --version - run: cfn-lint -t ./examples/template.yml + run: | + cfn-lint --version + cfn-lint -t ./examples/template.yml # Step 4 - name: Setup Cloud Formation Linter with Specific Version uses: ./ @@ -41,8 +42,9 @@ jobs: version: "0.44.5" # Step 5 - name: Print the Cloud Formation Linter Version & run Linter. - run: cfn-lint --version - run: cfn-lint -t ./examples/template.yml + run: | + cfn-lint --version + cfn-lint -t ./examples/template.yml # Step 6 ### Testing specifying a version and command - name: Testing with CFN Lint Version & Command From 94f4ec4338b21d59b9fa3fb71682e0effceed7cf Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 10:46:28 +0100 Subject: [PATCH 29/60] Update Template --- .github/workflows/main.yml | 1 - examples/template.yml | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d210184..680b70b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,7 +13,6 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 - run: npm ci - integ: strategy: fail-fast: false diff --git a/examples/template.yml b/examples/template.yml index 986b67b..6fa3ac6 100644 --- a/examples/template.yml +++ b/examples/template.yml @@ -20,7 +20,7 @@ Outputs: - Arn Export: Name: - Fn::Sub: LambdaRole + Fn::Sub: LambdaRole-${EnvName} LambdaFunctionName: Value: Ref: LambdaFunction @@ -38,7 +38,7 @@ Resources: Type: AWS::IAM::Role Properties: RoleName: - Fn::Sub: lambda-role + Fn::Sub: lambda-role-${EnvName} AssumeRolePolicyDocument: Statement: - Action: @@ -65,7 +65,7 @@ Resources: ZipFile: "exports.handler = function(event, context){\n var sample = sample;" - Handler: ${LambdaHandlerPath} + Handler: !Ref LambdaHandlerPath MemorySize: 128 Timeout: 10 Role: From 4cb059b66c9acb4dbd5b0908c51e8b7b47597477 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 10:53:17 +0100 Subject: [PATCH 30/60] Pushing different versions --- .github/workflows/main.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 680b70b..87ecd73 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -20,6 +20,9 @@ jobs: os: - ubuntu-18.04 - ubuntu-20.04 + - windows-2016 + - windows-2019 + - macos-10.15 name: ${{ matrix.os }} runs-on: ${{ matrix.os }} steps: From 84573b5d760260d84e83970515789b7a42d79a41 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 11:58:29 +0100 Subject: [PATCH 31/60] Adding Unit Tests --- coverage/clover.xml | 108 +++++++++ coverage/coverage-final.json | 7 + coverage/lcov-report/base.css | 224 ++++++++++++++++++ coverage/lcov-report/block-navigation.js | 79 ++++++ coverage/lcov-report/favicon.png | Bin 0 -> 540 bytes coverage/lcov-report/getInput.js.html | 113 +++++++++ coverage/lcov-report/helpers.js.html | 143 +++++++++++ coverage/lcov-report/index.html | 126 ++++++++++ coverage/lcov-report/lib/index.html | 111 +++++++++ coverage/lcov-report/lib/setup.js.html | 206 ++++++++++++++++ .../lcov-report/lib/utils/getInput.js.html | 113 +++++++++ .../lcov-report/lib/utils/getInputs.js.html | 143 +++++++++++ .../lcov-report/lib/utils/helpers.js.html | 143 +++++++++++ coverage/lcov-report/lib/utils/index.html | 171 +++++++++++++ .../lcov-report/lib/utils/installCLI.js.html | 200 ++++++++++++++++ .../lcov-report/lib/utils/runCommand.js.html | 125 ++++++++++ coverage/lcov-report/prettify.css | 1 + coverage/lcov-report/prettify.js | 2 + coverage/lcov-report/runCommand.js.html | 125 ++++++++++ coverage/lcov-report/sort-arrow-sprite.png | Bin 0 -> 209 bytes coverage/lcov-report/sorter.js | 170 +++++++++++++ coverage/lcov.info | 160 +++++++++++++ dist/index.js | 10 +- lib/setup.js | 9 +- lib/utils/runCommand.js | 1 + package.json | 2 +- tests/getInput.test.js | 56 +++++ tests/getInputs.test.js | 0 tests/helpers.test.js | 45 ++++ tests/runCommand.test.js | 45 ++++ tests/setup.test.js | 79 ++++++ 31 files changed, 2710 insertions(+), 7 deletions(-) create mode 100644 coverage/clover.xml create mode 100644 coverage/coverage-final.json create mode 100644 coverage/lcov-report/base.css create mode 100644 coverage/lcov-report/block-navigation.js create mode 100644 coverage/lcov-report/favicon.png create mode 100644 coverage/lcov-report/getInput.js.html create mode 100644 coverage/lcov-report/helpers.js.html create mode 100644 coverage/lcov-report/index.html create mode 100644 coverage/lcov-report/lib/index.html create mode 100644 coverage/lcov-report/lib/setup.js.html create mode 100644 coverage/lcov-report/lib/utils/getInput.js.html create mode 100644 coverage/lcov-report/lib/utils/getInputs.js.html create mode 100644 coverage/lcov-report/lib/utils/helpers.js.html create mode 100644 coverage/lcov-report/lib/utils/index.html create mode 100644 coverage/lcov-report/lib/utils/installCLI.js.html create mode 100644 coverage/lcov-report/lib/utils/runCommand.js.html create mode 100644 coverage/lcov-report/prettify.css create mode 100644 coverage/lcov-report/prettify.js create mode 100644 coverage/lcov-report/runCommand.js.html create mode 100644 coverage/lcov-report/sort-arrow-sprite.png create mode 100644 coverage/lcov-report/sorter.js create mode 100644 coverage/lcov.info create mode 100644 tests/getInput.test.js create mode 100644 tests/getInputs.test.js create mode 100644 tests/helpers.test.js create mode 100644 tests/runCommand.test.js create mode 100644 tests/setup.test.js diff --git a/coverage/clover.xml b/coverage/clover.xml new file mode 100644 index 0000000..d438df8 --- /dev/null +++ b/coverage/clover.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json new file mode 100644 index 0000000..cd7b0c2 --- /dev/null +++ b/coverage/coverage-final.json @@ -0,0 +1,7 @@ +{"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/setup.js": {"path":"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/setup.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":37}},"1":{"start":{"line":3,"column":22},"end":{"line":3,"column":53}},"2":{"start":{"line":4,"column":23},"end":{"line":4,"column":55}},"3":{"start":{"line":5,"column":23},"end":{"line":5,"column":55}},"4":{"start":{"line":11,"column":2},"end":{"line":16,"column":3}},"5":{"start":{"line":12,"column":4},"end":{"line":12,"column":31}},"6":{"start":{"line":14,"column":4},"end":{"line":14,"column":29}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":16}},"8":{"start":{"line":18,"column":2},"end":{"line":23,"column":3}},"9":{"start":{"line":19,"column":4},"end":{"line":19,"column":39}},"10":{"start":{"line":21,"column":4},"end":{"line":21,"column":29}},"11":{"start":{"line":22,"column":4},"end":{"line":22,"column":16}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":24}},"13":{"start":{"line":27,"column":2},"end":{"line":29,"column":3}},"14":{"start":{"line":28,"column":4},"end":{"line":28,"column":11}},"15":{"start":{"line":31,"column":2},"end":{"line":36,"column":3}},"16":{"start":{"line":32,"column":4},"end":{"line":32,"column":29}},"17":{"start":{"line":34,"column":4},"end":{"line":34,"column":29}},"18":{"start":{"line":35,"column":4},"end":{"line":35,"column":16}},"19":{"start":{"line":38,"column":2},"end":{"line":38,"column":9}},"20":{"start":{"line":42,"column":0},"end":{"line":42,"column":23}}},"fnMap":{"0":{"name":"setup","decl":{"start":{"line":7,"column":15},"end":{"line":7,"column":20}},"loc":{"start":{"line":7,"column":23},"end":{"line":40,"column":1}},"line":7}},"branchMap":{"0":{"loc":{"start":{"line":27,"column":2},"end":{"line":29,"column":3}},"type":"if","locations":[{"start":{"line":27,"column":2},"end":{"line":29,"column":3}},{"start":{"line":27,"column":2},"end":{"line":29,"column":3}}],"line":27}},"s":{"0":1,"1":1,"2":1,"3":1,"4":8,"5":8,"6":2,"7":2,"8":6,"9":6,"10":0,"11":0,"12":6,"13":6,"14":4,"15":2,"16":2,"17":0,"18":0,"19":2,"20":1},"f":{"0":8},"b":{"0":[4,2]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"6f7e9494afcb7bc81fbc7c12800c8632604d2fd2"} +,"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/getInput.js": {"path":"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/getInput.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":37}},"1":{"start":{"line":3,"column":0},"end":{"line":11,"column":2}},"2":{"start":{"line":5,"column":18},"end":{"line":5,"column":53}},"3":{"start":{"line":6,"column":4},"end":{"line":8,"column":5}},"4":{"start":{"line":7,"column":6},"end":{"line":7,"column":58}},"5":{"start":{"line":9,"column":4},"end":{"line":9,"column":17}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":12},"end":{"line":4,"column":13}},"loc":{"start":{"line":4,"column":45},"end":{"line":10,"column":3}},"line":4}},"branchMap":{"0":{"loc":{"start":{"line":5,"column":18},"end":{"line":5,"column":53}},"type":"binary-expr","locations":[{"start":{"line":5,"column":18},"end":{"line":5,"column":37}},{"start":{"line":5,"column":41},"end":{"line":5,"column":53}}],"line":5},"1":{"loc":{"start":{"line":6,"column":4},"end":{"line":8,"column":5}},"type":"if","locations":[{"start":{"line":6,"column":4},"end":{"line":8,"column":5}},{"start":{"line":6,"column":4},"end":{"line":8,"column":5}}],"line":6}},"s":{"0":2,"1":2,"2":23,"3":23,"4":3,"5":20},"f":{"0":23},"b":{"0":[23,15],"1":[3,20]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"5aa611ca0d11d479afc1186b5b320a020f3225d0"} +,"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/getInputs.js": {"path":"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/getInputs.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":37}},"1":{"start":{"line":3,"column":21},"end":{"line":3,"column":45}},"2":{"start":{"line":4,"column":22},"end":{"line":4,"column":45}},"3":{"start":{"line":6,"column":0},"end":{"line":21,"column":2}},"4":{"start":{"line":9,"column":26},"end":{"line":9,"column":60}},"5":{"start":{"line":11,"column":4},"end":{"line":19,"column":5}},"6":{"start":{"line":12,"column":22},"end":{"line":12,"column":61}},"7":{"start":{"line":13,"column":22},"end":{"line":13,"column":70}},"8":{"start":{"line":14,"column":21},"end":{"line":14,"column":62}},"9":{"start":{"line":15,"column":6},"end":{"line":15,"column":41}},"10":{"start":{"line":17,"column":6},"end":{"line":17,"column":45}},"11":{"start":{"line":18,"column":6},"end":{"line":18,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":7,"column":13},"end":{"line":7,"column":14}},"loc":{"start":{"line":7,"column":19},"end":{"line":20,"column":3}},"line":7}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":26},"end":{"line":9,"column":60}},"type":"cond-expr","locations":[{"start":{"line":9,"column":40},"end":{"line":9,"column":48}},{"start":{"line":9,"column":51},"end":{"line":9,"column":60}}],"line":9}},"s":{"0":1,"1":1,"2":1,"3":1,"4":8,"5":8,"6":8,"7":6,"8":6,"9":6,"10":2,"11":2},"f":{"0":8},"b":{"0":[1,7]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"fffc45d4a0bc0a9d63f145c730398a0a972beea6"} +,"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/helpers.js": {"path":"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/helpers.js","statementMap":{"0":{"start":{"line":1,"column":11},"end":{"line":1,"column":24}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":28}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":24}},"3":{"start":{"line":5,"column":13},"end":{"line":5,"column":37}},"4":{"start":{"line":6,"column":11},"end":{"line":6,"column":33}},"5":{"start":{"line":8,"column":0},"end":{"line":21,"column":2}},"6":{"start":{"line":10,"column":4},"end":{"line":10,"column":37}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":69}},"8":{"start":{"line":16,"column":23},"end":{"line":16,"column":51}},"9":{"start":{"line":18,"column":4},"end":{"line":18,"column":47}},"10":{"start":{"line":19,"column":4},"end":{"line":19,"column":58}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":9,"column":13},"end":{"line":9,"column":14}},"loc":{"start":{"line":9,"column":19},"end":{"line":11,"column":3}},"line":9},"1":{"name":"(anonymous_1)","decl":{"start":{"line":12,"column":13},"end":{"line":12,"column":14}},"loc":{"start":{"line":12,"column":19},"end":{"line":14,"column":3}},"line":12},"2":{"name":"(anonymous_2)","decl":{"start":{"line":15,"column":20},"end":{"line":15,"column":21}},"loc":{"start":{"line":15,"column":48},"end":{"line":20,"column":3}},"line":15}},"branchMap":{},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":23,"7":7,"8":7,"9":7,"10":7},"f":{"0":23,"1":7,"2":7},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"50b126e7f5c5e4016bc4a25c8da3528bdcf8e28e"} +,"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/installCLI.js": {"path":"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/installCLI.js","statementMap":{"0":{"start":{"line":1,"column":11},"end":{"line":1,"column":24}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":28}},"2":{"start":{"line":4,"column":13},"end":{"line":4,"column":37}},"3":{"start":{"line":6,"column":50},"end":{"line":6,"column":73}},"4":{"start":{"line":9,"column":0},"end":{"line":40,"column":2}},"5":{"start":{"line":11,"column":21},"end":{"line":11,"column":32}},"6":{"start":{"line":14,"column":21},"end":{"line":14,"column":49}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":45}},"8":{"start":{"line":18,"column":19},"end":{"line":18,"column":50}},"9":{"start":{"line":19,"column":20},"end":{"line":19,"column":47}},"10":{"start":{"line":22,"column":23},"end":{"line":22,"column":51}},"11":{"start":{"line":25,"column":4},"end":{"line":25,"column":78}},"12":{"start":{"line":27,"column":4},"end":{"line":27,"column":95}},"13":{"start":{"line":29,"column":4},"end":{"line":29,"column":96}},"14":{"start":{"line":32,"column":24},"end":{"line":32,"column":50}},"15":{"start":{"line":33,"column":4},"end":{"line":33,"column":30}},"16":{"start":{"line":34,"column":20},"end":{"line":34,"column":61}},"17":{"start":{"line":35,"column":4},"end":{"line":35,"column":81}},"18":{"start":{"line":37,"column":4},"end":{"line":37,"column":23}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":10,"column":14},"end":{"line":10,"column":15}},"loc":{"start":{"line":10,"column":45},"end":{"line":38,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":19},"end":{"line":18,"column":50}},"type":"cond-expr","locations":[{"start":{"line":18,"column":33},"end":{"line":18,"column":42}},{"start":{"line":18,"column":45},"end":{"line":18,"column":50}}],"line":18},"1":{"loc":{"start":{"line":34,"column":20},"end":{"line":34,"column":61}},"type":"cond-expr","locations":[{"start":{"line":34,"column":34},"end":{"line":34,"column":48}},{"start":{"line":34,"column":51},"end":{"line":34,"column":61}}],"line":34}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":6,"6":6,"7":6,"8":6,"9":6,"10":6,"11":6,"12":6,"13":6,"14":6,"15":6,"16":6,"17":6,"18":6},"f":{"0":6},"b":{"0":[1,5],"1":[1,5]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"5d67dd469ae103fcf6da30c673eceaa93bf16f87"} +,"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/runCommand.js": {"path":"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/runCommand.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":37}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":37}},"2":{"start":{"line":4,"column":0},"end":{"line":15,"column":2}},"3":{"start":{"line":6,"column":4},"end":{"line":13,"column":5}},"4":{"start":{"line":7,"column":23},"end":{"line":7,"column":47}},"5":{"start":{"line":8,"column":6},"end":{"line":8,"column":69}},"6":{"start":{"line":9,"column":6},"end":{"line":9,"column":22}},"7":{"start":{"line":11,"column":6},"end":{"line":11,"column":87}},"8":{"start":{"line":12,"column":6},"end":{"line":12,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":14},"end":{"line":5,"column":15}},"loc":{"start":{"line":5,"column":37},"end":{"line":14,"column":3}},"line":5}},"branchMap":{},"s":{"0":2,"1":2,"2":2,"3":4,"4":4,"5":3,"6":3,"7":1,"8":1},"f":{"0":4},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"ec14100b7312a2969bbccb1b475c708bdd0c7ec9"} +} diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css new file mode 100644 index 0000000..f418035 --- /dev/null +++ b/coverage/lcov-report/base.css @@ -0,0 +1,224 @@ +body, html { + margin:0; padding: 0; + height: 100%; +} +body { + font-family: Helvetica Neue, Helvetica, Arial; + font-size: 14px; + color:#333; +} +.small { font-size: 12px; } +*, *:after, *:before { + -webkit-box-sizing:border-box; + -moz-box-sizing:border-box; + box-sizing:border-box; + } +h1 { font-size: 20px; margin: 0;} +h2 { font-size: 14px; } +pre { + font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; + margin: 0; + padding: 0; + -moz-tab-size: 2; + -o-tab-size: 2; + tab-size: 2; +} +a { color:#0074D9; text-decoration:none; } +a:hover { text-decoration:underline; } +.strong { font-weight: bold; } +.space-top1 { padding: 10px 0 0 0; } +.pad2y { padding: 20px 0; } +.pad1y { padding: 10px 0; } +.pad2x { padding: 0 20px; } +.pad2 { padding: 20px; } +.pad1 { padding: 10px; } +.space-left2 { padding-left:55px; } +.space-right2 { padding-right:20px; } +.center { text-align:center; } +.clearfix { display:block; } +.clearfix:after { + content:''; + display:block; + height:0; + clear:both; + visibility:hidden; + } +.fl { float: left; } +@media only screen and (max-width:640px) { + .col3 { width:100%; max-width:100%; } + .hide-mobile { display:none!important; } +} + +.quiet { + color: #7f7f7f; + color: rgba(0,0,0,0.5); +} +.quiet a { opacity: 0.7; } + +.fraction { + font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; + font-size: 10px; + color: #555; + background: #E8E8E8; + padding: 4px 5px; + border-radius: 3px; + vertical-align: middle; +} + +div.path a:link, div.path a:visited { color: #333; } +table.coverage { + border-collapse: collapse; + margin: 10px 0 0 0; + padding: 0; +} + +table.coverage td { + margin: 0; + padding: 0; + vertical-align: top; +} +table.coverage td.line-count { + text-align: right; + padding: 0 5px 0 20px; +} +table.coverage td.line-coverage { + text-align: right; + padding-right: 10px; + min-width:20px; +} + +table.coverage td span.cline-any { + display: inline-block; + padding: 0 5px; + width: 100%; +} +.missing-if-branch { + display: inline-block; + margin-right: 5px; + border-radius: 3px; + position: relative; + padding: 0 4px; + background: #333; + color: yellow; +} + +.skip-if-branch { + display: none; + margin-right: 10px; + position: relative; + padding: 0 4px; + background: #ccc; + color: white; +} +.missing-if-branch .typ, .skip-if-branch .typ { + color: inherit !important; +} +.coverage-summary { + border-collapse: collapse; + width: 100%; +} +.coverage-summary tr { border-bottom: 1px solid #bbb; } +.keyline-all { border: 1px solid #ddd; } +.coverage-summary td, .coverage-summary th { padding: 10px; } +.coverage-summary tbody { border: 1px solid #bbb; } +.coverage-summary td { border-right: 1px solid #bbb; } +.coverage-summary td:last-child { border-right: none; } +.coverage-summary th { + text-align: left; + font-weight: normal; + white-space: nowrap; +} +.coverage-summary th.file { border-right: none !important; } +.coverage-summary th.pct { } +.coverage-summary th.pic, +.coverage-summary th.abs, +.coverage-summary td.pct, +.coverage-summary td.abs { text-align: right; } +.coverage-summary td.file { white-space: nowrap; } +.coverage-summary td.pic { min-width: 120px !important; } +.coverage-summary tfoot td { } + +.coverage-summary .sorter { + height: 10px; + width: 7px; + display: inline-block; + margin-left: 0.5em; + background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; +} +.coverage-summary .sorted .sorter { + background-position: 0 -20px; +} +.coverage-summary .sorted-desc .sorter { + background-position: 0 -10px; +} +.status-line { height: 10px; } +/* yellow */ +.cbranch-no { background: yellow !important; color: #111; } +/* dark red */ +.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } +.low .chart { border:1px solid #C21F39 } +.highlighted, +.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ + background: #C21F39 !important; +} +/* medium red */ +.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } +/* light red */ +.low, .cline-no { background:#FCE1E5 } +/* light green */ +.high, .cline-yes { background:rgb(230,245,208) } +/* medium green */ +.cstat-yes { background:rgb(161,215,106) } +/* dark green */ +.status-line.high, .high .cover-fill { background:rgb(77,146,33) } +.high .chart { border:1px solid rgb(77,146,33) } +/* dark yellow (gold) */ +.status-line.medium, .medium .cover-fill { background: #f9cd0b; } +.medium .chart { border:1px solid #f9cd0b; } +/* light yellow */ +.medium { background: #fff4c2; } + +.cstat-skip { background: #ddd; color: #111; } +.fstat-skip { background: #ddd; color: #111 !important; } +.cbranch-skip { background: #ddd !important; color: #111; } + +span.cline-neutral { background: #eaeaea; } + +.coverage-summary td.empty { + opacity: .5; + padding-top: 4px; + padding-bottom: 4px; + line-height: 1; + color: #888; +} + +.cover-fill, .cover-empty { + display:inline-block; + height: 12px; +} +.chart { + line-height: 0; +} +.cover-empty { + background: white; +} +.cover-full { + border-right: none !important; +} +pre.prettyprint { + border: none !important; + padding: 0 !important; + margin: 0 !important; +} +.com { color: #999 !important; } +.ignore-none { color: #999; font-weight: normal; } + +.wrapper { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -48px; +} +.footer, .push { + height: 48px; +} diff --git a/coverage/lcov-report/block-navigation.js b/coverage/lcov-report/block-navigation.js new file mode 100644 index 0000000..c7ff5a5 --- /dev/null +++ b/coverage/lcov-report/block-navigation.js @@ -0,0 +1,79 @@ +/* eslint-disable */ +var jumpToCode = (function init() { + // Classes of code we would like to highlight in the file view + var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; + + // Elements to highlight in the file listing view + var fileListingElements = ['td.pct.low']; + + // We don't want to select elements that are direct descendants of another match + var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` + + // Selecter that finds elements on the page to which we can jump + var selector = + fileListingElements.join(', ') + + ', ' + + notSelector + + missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` + + // The NodeList of matching elements + var missingCoverageElements = document.querySelectorAll(selector); + + var currentIndex; + + function toggleClass(index) { + missingCoverageElements + .item(currentIndex) + .classList.remove('highlighted'); + missingCoverageElements.item(index).classList.add('highlighted'); + } + + function makeCurrent(index) { + toggleClass(index); + currentIndex = index; + missingCoverageElements.item(index).scrollIntoView({ + behavior: 'smooth', + block: 'center', + inline: 'center' + }); + } + + function goToPrevious() { + var nextIndex = 0; + if (typeof currentIndex !== 'number' || currentIndex === 0) { + nextIndex = missingCoverageElements.length - 1; + } else if (missingCoverageElements.length > 1) { + nextIndex = currentIndex - 1; + } + + makeCurrent(nextIndex); + } + + function goToNext() { + var nextIndex = 0; + + if ( + typeof currentIndex === 'number' && + currentIndex < missingCoverageElements.length - 1 + ) { + nextIndex = currentIndex + 1; + } + + makeCurrent(nextIndex); + } + + return function jump(event) { + switch (event.which) { + case 78: // n + case 74: // j + goToNext(); + break; + case 66: // b + case 75: // k + case 80: // p + goToPrevious(); + break; + } + }; +})(); +window.addEventListener('keydown', jumpToCode); diff --git a/coverage/lcov-report/favicon.png b/coverage/lcov-report/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..6691817834a957c938e7f09640a37a645fb31457 GIT binary patch literal 540 zcmV+%0^|LOP)wSzy{h>9elhJ=8GnBQmf?)AI(^#wDA_`!QTxaXXE&bjxo zTGCc%V|W`}Lwz0rDO*qBbGY-M@aNENIZ1rK?nOAibaC*vb%CF;I_~lkJawax%_+1J zLn(#pv_v{f0`v`Cfp6()7MB(>IoTAiQdKxgxX?VyV&KVZ7b$vn<8|Z<9$35C+G_8SH0x6Y(xB&~bmn%r}ceRwbc0000 + + + + Code coverage report for getInput.js + + + + + + + + + +
+
+

All files getInput.js

+
+ +
+ 100% + Statements + 6/6 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 6/6 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +121x +  +1x +  +3x +3x +1x +  +2x +  +  + 
const core = require("@actions/core");
+ 
+module.exports = {
+  getInput: (name, pattern, defaultValue) => {
+    const value = core.getInput(name) || defaultValue;
+    if (!pattern.test(value)) {
+      throw new Error(`${name} doesn't match ${pattern}`);
+    }
+    return value;
+  },
+};
+ 
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/helpers.js.html b/coverage/lcov-report/helpers.js.html new file mode 100644 index 0000000..8733b3e --- /dev/null +++ b/coverage/lcov-report/helpers.js.html @@ -0,0 +1,143 @@ + + + + + + Code coverage report for helpers.js + + + + + + + + + +
+
+

All files helpers.js

+
+ +
+ 100% + Statements + 11/11 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 11/11 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +221x +1x +1x +  +1x +1x +  +1x +  +3x +  +  +1x +  +  +1x +  +1x +1x +  +  + 
const fs = require("fs");
+const path = require("path");
+const os = require("os");
+ 
+const exec = require("@actions/exec");
+const io = require("@actions/io");
+ 
+module.exports = {
+  isWindows: () => {
+    return os.platform() === "win32";
+  },
+  mkdirTemp: () => {
+    return fs.mkdtempSync(path.join(os.tmpdir(), "setup-cfn-lint-"));
+  },
+  createPythonVenv: async (python, venvPath) => {
+    const pythonPath = await io.which(python, true);
+ 
+    await exec.exec(pythonPath, ["--version"]);
+    await exec.exec(pythonPath, ["-m", "venv", venvPath]);
+  },
+};
+ 
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html new file mode 100644 index 0000000..6390d18 --- /dev/null +++ b/coverage/lcov-report/index.html @@ -0,0 +1,126 @@ + + + + + + Code coverage report for All files + + + + + + + + + +
+
+

All files

+
+ +
+ 94.87% + Statements + 74/78 +
+ + +
+ 100% + Branches + 12/12 +
+ + +
+ 100% + Functions + 8/8 +
+ + +
+ 94.87% + Lines + 74/78 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
lib +
+
80.95%17/21100%2/2100%1/180.95%17/21
lib/utils +
+
100%57/57100%10/10100%7/7100%57/57
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/lib/index.html b/coverage/lcov-report/lib/index.html new file mode 100644 index 0000000..409d22a --- /dev/null +++ b/coverage/lcov-report/lib/index.html @@ -0,0 +1,111 @@ + + + + + + Code coverage report for lib + + + + + + + + + +
+
+

All files lib

+
+ +
+ 80.95% + Statements + 17/21 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 80.95% + Lines + 17/21 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
setup.js +
+
80.95%17/21100%2/2100%1/180.95%17/21
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/lib/setup.js.html b/coverage/lcov-report/lib/setup.js.html new file mode 100644 index 0000000..08762be --- /dev/null +++ b/coverage/lcov-report/lib/setup.js.html @@ -0,0 +1,206 @@ + + + + + + Code coverage report for lib/setup.js + + + + + + + + + +
+
+

All files / lib setup.js

+
+ +
+ 80.95% + Statements + 17/21 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 80.95% + Lines + 17/21 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +41 +42 +431x +  +1x +1x +1x +  +  +  +  +  +8x +8x +  +2x +2x +  +  +6x +6x +  +  +  +  +  +6x +  +6x +4x +  +  +2x +2x +  +  +  +  +  +2x +  +  +  +1x + 
const core = require("@actions/core");
+ 
+const { getInputs } = require('./utils/getInputs.js')
+const { installCLI } = require('./utils/installCLI.js')
+const { runCommand } = require('./utils/runCommand.js')
+ 
+async function setup() {
+ 
+  let inputs; let binPath;
+ 
+  try {
+    inputs = await getInputs();
+  } catch (error){
+    core.error(error.message)
+    throw error;
+  }
+ 
+  try {
+    binPath = await installCLI(inputs);
+  } catch (error){
+    core.error(error.message)
+    throw error;
+  }
+ 
+  core.addPath(binPath);
+ 
+  if(!inputs.command){
+    return;
+  }
+ 
+  try {
+    await runCommand(inputs);
+  } catch (error){
+    core.error(error.message)
+    throw error;
+  }
+ 
+  return;
+ 
+}
+ 
+module.exports = setup;
+ 
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/lib/utils/getInput.js.html b/coverage/lcov-report/lib/utils/getInput.js.html new file mode 100644 index 0000000..bf267f8 --- /dev/null +++ b/coverage/lcov-report/lib/utils/getInput.js.html @@ -0,0 +1,113 @@ + + + + + + Code coverage report for lib/utils/getInput.js + + + + + + + + + +
+
+

All files / lib/utils getInput.js

+
+ +
+ 100% + Statements + 6/6 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 6/6 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +122x +  +2x +  +23x +23x +3x +  +20x +  +  + 
const core = require("@actions/core");
+ 
+module.exports = {
+  getInput: (name, pattern, defaultValue) => {
+    const value = core.getInput(name) || defaultValue;
+    if (!pattern.test(value)) {
+      throw new Error(`${name} doesn't match ${pattern}`);
+    }
+    return value;
+  },
+};
+ 
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/lib/utils/getInputs.js.html b/coverage/lcov-report/lib/utils/getInputs.js.html new file mode 100644 index 0000000..24539c0 --- /dev/null +++ b/coverage/lcov-report/lib/utils/getInputs.js.html @@ -0,0 +1,143 @@ + + + + + + Code coverage report for lib/utils/getInputs.js + + + + + + + + + +
+
+

All files / lib/utils getInputs.js

+
+ +
+ 100% + Statements + 12/12 +
+ + +
+ 100% + Branches + 2/2 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 12/12 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +221x +  +1x +1x +  +1x +  +  +8x +  +8x +8x +6x +6x +6x +  +2x +2x +  +  +  + 
const core = require("@actions/core");
+ 
+const { getInput } = require('./getInput.js');
+const { isWindows } = require('./helpers.js');
+ 
+module.exports = {
+  getInputs: () => {
+     // python3 isn't standard on Windows
+    const defaultPython = isWindows() ? "python" : "python3";
+ 
+    try {
+      const version = getInput("version", /^[\d.*]+$/, "0.*");
+      const command = getInput("command", /^cfn-lint\s || null/, null);
+      const python = getInput("python", /^.+$/, defaultPython);
+      return { version, command, python }
+    } catch(e){
+      core.error('Failed to Collect Inputs');
+      throw e;
+    }
+  },
+};
+ 
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/lib/utils/helpers.js.html b/coverage/lcov-report/lib/utils/helpers.js.html new file mode 100644 index 0000000..343ff83 --- /dev/null +++ b/coverage/lcov-report/lib/utils/helpers.js.html @@ -0,0 +1,143 @@ + + + + + + Code coverage report for lib/utils/helpers.js + + + + + + + + + +
+
+

All files / lib/utils helpers.js

+
+ +
+ 100% + Statements + 11/11 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 3/3 +
+ + +
+ 100% + Lines + 11/11 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +222x +2x +2x +  +2x +2x +  +2x +  +23x +  +  +7x +  +  +7x +  +7x +7x +  +  + 
const fs = require("fs");
+const path = require("path");
+const os = require("os");
+ 
+const exec = require("@actions/exec");
+const io = require("@actions/io");
+ 
+module.exports = {
+  isWindows: () => {
+    return os.platform() === "win32";
+  },
+  mkdirTemp: () => {
+    return fs.mkdtempSync(path.join(os.tmpdir(), "setup-cfn-lint-"));
+  },
+  createPythonVenv: async (python, venvPath) => {
+    const pythonPath = await io.which(python, true);
+ 
+    await exec.exec(pythonPath, ["--version"]);
+    await exec.exec(pythonPath, ["-m", "venv", venvPath]);
+  },
+};
+ 
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/lib/utils/index.html b/coverage/lcov-report/lib/utils/index.html new file mode 100644 index 0000000..181fe59 --- /dev/null +++ b/coverage/lcov-report/lib/utils/index.html @@ -0,0 +1,171 @@ + + + + + + Code coverage report for lib/utils + + + + + + + + + +
+
+

All files lib/utils

+
+ +
+ 100% + Statements + 57/57 +
+ + +
+ 100% + Branches + 10/10 +
+ + +
+ 100% + Functions + 7/7 +
+ + +
+ 100% + Lines + 57/57 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FileStatementsBranchesFunctionsLines
getInput.js +
+
100%6/6100%4/4100%1/1100%6/6
getInputs.js +
+
100%12/12100%2/2100%1/1100%12/12
helpers.js +
+
100%11/11100%0/0100%3/3100%11/11
installCLI.js +
+
100%19/19100%4/4100%1/1100%19/19
runCommand.js +
+
100%9/9100%0/0100%1/1100%9/9
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/lib/utils/installCLI.js.html b/coverage/lcov-report/lib/utils/installCLI.js.html new file mode 100644 index 0000000..ae3f009 --- /dev/null +++ b/coverage/lcov-report/lib/utils/installCLI.js.html @@ -0,0 +1,200 @@ + + + + + + Code coverage report for lib/utils/installCLI.js + + + + + + + + + +
+
+

All files / lib/utils installCLI.js

+
+ +
+ 100% + Statements + 19/19 +
+ + +
+ 100% + Branches + 4/4 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 19/19 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +37 +38 +39 +40 +411x +1x +  +1x +  +1x +  +  +1x +  +6x +  +  +6x +6x +  +  +6x +6x +  +  +6x +  +  +6x +  +6x +  +6x +  +  +6x +6x +6x +6x +  +6x +  +  +  + 
const fs = require("fs");
+const path = require("path");
+ 
+const exec = require("@actions/exec");
+ 
+const { mkdirTemp, createPythonVenv, isWindows} = require('./helpers.js');
+ 
+ 
+module.exports = {
+  installCLI: async ({ python, version }) => {
+    const tempPath = mkdirTemp();
+ 
+    // Create virtual environment
+    const venvPath = path.join(tempPath, ".venv");
+    await createPythonVenv(python, venvPath);
+ 
+    // See https://docs.python.org/3/library/venv.html
+    const binDir = isWindows() ? "Scripts" : "bin";
+    const binPath = path.join(venvPath, binDir);
+ 
+    // Virtual environment running Python
+    const pythonPath = path.join(binPath, "python");
+ 
+    // Ensure installation tooling is up-to-date across platforms
+    await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "pip"]);
+    // setuptools and wheel needed for source and binary distributions
+    await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "setuptools", "wheel" ]);
+    // Install latest compatible version
+    await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", `cfn-lint==${version}` ]);
+ 
+    // Symlink from separate directory so only CFN LINT CLI is added to PATH
+    const symlinkPath = path.join(tempPath, "bin");
+    fs.mkdirSync(symlinkPath);
+    const cfnLint = isWindows() ? "cfn-lint.exe" : "cfn-lint";
+    fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint));
+ 
+    return symlinkPath;
+  },
+ 
+};
+ 
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/lib/utils/runCommand.js.html b/coverage/lcov-report/lib/utils/runCommand.js.html new file mode 100644 index 0000000..38fc304 --- /dev/null +++ b/coverage/lcov-report/lib/utils/runCommand.js.html @@ -0,0 +1,125 @@ + + + + + + Code coverage report for lib/utils/runCommand.js + + + + + + + + + +
+
+

All files / lib/utils runCommand.js

+
+ +
+ 100% + Statements + 9/9 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 9/9 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +162x +2x +  +2x +  +4x +4x +3x +3x +  +1x +1x +  +  +  + 
const exec = require("@actions/exec");
+const core = require("@actions/core");
+ 
+module.exports = {
+  runCommand: async ({ command }) => {
+    try{
+      const response = await exec.exec(command)
+      core.info(`Ran command: ${command}. Response is: ${response}`);
+      return response;
+    } catch(e){
+      core.error(`Error running command: ${command}. Returned error is: ${e.message}`);
+      throw e;
+    }
+  },
+};
+ 
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/prettify.css b/coverage/lcov-report/prettify.css new file mode 100644 index 0000000..b317a7c --- /dev/null +++ b/coverage/lcov-report/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/lcov-report/prettify.js b/coverage/lcov-report/prettify.js new file mode 100644 index 0000000..b322523 --- /dev/null +++ b/coverage/lcov-report/prettify.js @@ -0,0 +1,2 @@ +/* eslint-disable */ +window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/lcov-report/runCommand.js.html b/coverage/lcov-report/runCommand.js.html new file mode 100644 index 0000000..f34ff04 --- /dev/null +++ b/coverage/lcov-report/runCommand.js.html @@ -0,0 +1,125 @@ + + + + + + Code coverage report for runCommand.js + + + + + + + + + +
+
+

All files runCommand.js

+
+ +
+ 100% + Statements + 9/9 +
+ + +
+ 100% + Branches + 0/0 +
+ + +
+ 100% + Functions + 1/1 +
+ + +
+ 100% + Lines + 9/9 +
+ + +
+

+ Press n or j to go to the next uncovered block, b, p or k for the previous block. +

+
+
+

+
1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +161x +1x +  +1x +  +2x +2x +1x +1x +  +1x +1x +  +  +  + 
const exec = require("@actions/exec");
+const core = require("@actions/core");
+ 
+module.exports = {
+  runCommand: async ({ command }) => {
+    try{
+      const response = await exec.exec(command)
+      core.info(`Ran command: ${command}. Response is: ${response}`);
+      return response;
+    } catch(e){
+      core.error(`Error running command: ${command}. Returned error is: ${e.message}`);
+      throw e;
+    }
+  },
+};
+ 
+ +
+
+ + + + + + + + + \ No newline at end of file diff --git a/coverage/lcov-report/sort-arrow-sprite.png b/coverage/lcov-report/sort-arrow-sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..03f704a609c6fd0dbfdac63466a7d7c958b5cbf3 GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; + } + } + return cols; + } + // attaches a data attribute to every tr element with an object + // of data values keyed by column name + function loadRowData(tableRow) { + var tableCols = tableRow.querySelectorAll('td'), + colNode, + col, + data = {}, + i, + val; + for (i = 0; i < tableCols.length; i += 1) { + colNode = tableCols[i]; + col = cols[i]; + val = colNode.getAttribute('data-value'); + if (col.type === 'number') { + val = Number(val); + } + data[col.key] = val; + } + return data; + } + // loads all row data + function loadData() { + var rows = getTableBody().querySelectorAll('tr'), + i; + + for (i = 0; i < rows.length; i += 1) { + rows[i].data = loadRowData(rows[i]); + } + } + // sorts the table using the data for the ith column + function sortByIndex(index, desc) { + var key = cols[index].key, + sorter = function(a, b) { + a = a.data[key]; + b = b.data[key]; + return a < b ? -1 : a > b ? 1 : 0; + }, + finalSorter = sorter, + tableBody = document.querySelector('.coverage-summary tbody'), + rowNodes = tableBody.querySelectorAll('tr'), + rows = [], + i; + + if (desc) { + finalSorter = function(a, b) { + return -1 * sorter(a, b); + }; + } + + for (i = 0; i < rowNodes.length; i += 1) { + rows.push(rowNodes[i]); + tableBody.removeChild(rowNodes[i]); + } + + rows.sort(finalSorter); + + for (i = 0; i < rows.length; i += 1) { + tableBody.appendChild(rows[i]); + } + } + // removes sort indicators for current column being sorted + function removeSortIndicators() { + var col = getNthColumn(currentSort.index), + cls = col.className; + + cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); + col.className = cls; + } + // adds sort indicators for current column being sorted + function addSortIndicators() { + getNthColumn(currentSort.index).className += currentSort.desc + ? ' sorted-desc' + : ' sorted'; + } + // adds event listeners for all sorter widgets + function enableUI() { + var i, + el, + ithSorter = function ithSorter(i) { + var col = cols[i]; + + return function() { + var desc = col.defaultDescSort; + + if (currentSort.index === i) { + desc = !currentSort.desc; + } + sortByIndex(i, desc); + removeSortIndicators(); + currentSort.index = i; + currentSort.desc = desc; + addSortIndicators(); + }; + }; + for (i = 0; i < cols.length; i += 1) { + if (cols[i].sortable) { + // add the click event handler on the th so users + // dont have to click on those tiny arrows + el = getNthColumn(i).querySelector('.sorter').parentElement; + if (el.addEventListener) { + el.addEventListener('click', ithSorter(i)); + } else { + el.attachEvent('onclick', ithSorter(i)); + } + } + } + } + // adds sorting functionality to the UI + return function() { + if (!getTable()) { + return; + } + cols = loadColumns(); + loadData(); + addSortIndicators(); + enableUI(); + }; +})(); + +window.addEventListener('load', addSorting); diff --git a/coverage/lcov.info b/coverage/lcov.info new file mode 100644 index 0000000..a03c62c --- /dev/null +++ b/coverage/lcov.info @@ -0,0 +1,160 @@ +TN: +SF:lib/setup.js +FN:7,setup +FNF:1 +FNH:1 +FNDA:8,setup +DA:1,1 +DA:3,1 +DA:4,1 +DA:5,1 +DA:11,8 +DA:12,8 +DA:14,2 +DA:15,2 +DA:18,6 +DA:19,6 +DA:21,0 +DA:22,0 +DA:25,6 +DA:27,6 +DA:28,4 +DA:31,2 +DA:32,2 +DA:34,0 +DA:35,0 +DA:38,2 +DA:42,1 +LF:21 +LH:17 +BRDA:27,0,0,4 +BRDA:27,0,1,2 +BRF:2 +BRH:2 +end_of_record +TN: +SF:lib/utils/getInput.js +FN:4,(anonymous_0) +FNF:1 +FNH:1 +FNDA:23,(anonymous_0) +DA:1,2 +DA:3,2 +DA:5,23 +DA:6,23 +DA:7,3 +DA:9,20 +LF:6 +LH:6 +BRDA:5,0,0,23 +BRDA:5,0,1,15 +BRDA:6,1,0,3 +BRDA:6,1,1,20 +BRF:4 +BRH:4 +end_of_record +TN: +SF:lib/utils/getInputs.js +FN:7,(anonymous_0) +FNF:1 +FNH:1 +FNDA:8,(anonymous_0) +DA:1,1 +DA:3,1 +DA:4,1 +DA:6,1 +DA:9,8 +DA:11,8 +DA:12,8 +DA:13,6 +DA:14,6 +DA:15,6 +DA:17,2 +DA:18,2 +LF:12 +LH:12 +BRDA:9,0,0,1 +BRDA:9,0,1,7 +BRF:2 +BRH:2 +end_of_record +TN: +SF:lib/utils/helpers.js +FN:9,(anonymous_0) +FN:12,(anonymous_1) +FN:15,(anonymous_2) +FNF:3 +FNH:3 +FNDA:23,(anonymous_0) +FNDA:7,(anonymous_1) +FNDA:7,(anonymous_2) +DA:1,2 +DA:2,2 +DA:3,2 +DA:5,2 +DA:6,2 +DA:8,2 +DA:10,23 +DA:13,7 +DA:16,7 +DA:18,7 +DA:19,7 +LF:11 +LH:11 +BRF:0 +BRH:0 +end_of_record +TN: +SF:lib/utils/installCLI.js +FN:10,(anonymous_0) +FNF:1 +FNH:1 +FNDA:6,(anonymous_0) +DA:1,1 +DA:2,1 +DA:4,1 +DA:6,1 +DA:9,1 +DA:11,6 +DA:14,6 +DA:15,6 +DA:18,6 +DA:19,6 +DA:22,6 +DA:25,6 +DA:27,6 +DA:29,6 +DA:32,6 +DA:33,6 +DA:34,6 +DA:35,6 +DA:37,6 +LF:19 +LH:19 +BRDA:18,0,0,1 +BRDA:18,0,1,5 +BRDA:34,1,0,1 +BRDA:34,1,1,5 +BRF:4 +BRH:4 +end_of_record +TN: +SF:lib/utils/runCommand.js +FN:5,(anonymous_0) +FNF:1 +FNH:1 +FNDA:4,(anonymous_0) +DA:1,2 +DA:2,2 +DA:4,2 +DA:6,4 +DA:7,4 +DA:8,3 +DA:9,3 +DA:11,1 +DA:12,1 +LF:9 +LH:9 +BRF:0 +BRH:0 +end_of_record diff --git a/dist/index.js b/dist/index.js index 43fbba1..1233895 100644 --- a/dist/index.js +++ b/dist/index.js @@ -36,13 +36,15 @@ async function setup() { try { inputs = await getInputs(); } catch (error){ - return error; + core.error(error.message) + throw error; } try { binPath = await installCLI(inputs); } catch (error){ - return error; + core.error(error.message) + throw error; } core.addPath(binPath); @@ -54,7 +56,8 @@ async function setup() { try { await runCommand(inputs); } catch (error){ - return error; + core.error(error.message) + throw error; } return; @@ -198,6 +201,7 @@ module.exports = { try{ const response = await exec.exec(command) core.info(`Ran command: ${command}. Response is: ${response}`); + return response; } catch(e){ core.error(`Error running command: ${command}. Returned error is: ${e.message}`); throw e; diff --git a/lib/setup.js b/lib/setup.js index 2b9107b..c6e116c 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -11,13 +11,15 @@ async function setup() { try { inputs = await getInputs(); } catch (error){ - return error; + core.error(error.message) + throw error; } try { binPath = await installCLI(inputs); } catch (error){ - return error; + core.error(error.message) + throw error; } core.addPath(binPath); @@ -29,7 +31,8 @@ async function setup() { try { await runCommand(inputs); } catch (error){ - return error; + core.error(error.message) + throw error; } return; diff --git a/lib/utils/runCommand.js b/lib/utils/runCommand.js index 66f0744..7efaafe 100644 --- a/lib/utils/runCommand.js +++ b/lib/utils/runCommand.js @@ -6,6 +6,7 @@ module.exports = { try{ const response = await exec.exec(command) core.info(`Ran command: ${command}. Response is: ${response}`); + return response; } catch(e){ core.error(`Error running command: ${command}. Returned error is: ${e.message}`); throw e; diff --git a/package.json b/package.json index ef09657..b99b97e 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "description": "Action to setup Cloud Formation to the the PATH", "main": "index.js", "scripts": { - "test": "jest && eslint . && prettier --check .", + "test": "jest --coverage --verbose && eslint . && prettier --check .", "build": "ncc build index.js --out dist --license licenses.txt", "format": "prettier --write .", "all": "npm run format && npm test && npm run build" diff --git a/tests/getInput.test.js b/tests/getInput.test.js new file mode 100644 index 0000000..e36af79 --- /dev/null +++ b/tests/getInput.test.js @@ -0,0 +1,56 @@ +const core = require("@actions/core"); +const { getInput } = require('../lib/utils/getInput.js'); + + +describe('getInput Test', () => { + + it('Returns Valid Value', async () => { + + const name = "version"; + const pattern = /^[\d.*]+$/; + const defaultValue = "0.*"; + const expectedReturnValue = '0.44.4'; + + jest.spyOn(core, 'getInput').mockImplementation(() => { + return expectedReturnValue; + }); + const userInputs = await getInput(name, pattern, defaultValue); + expect(userInputs).toStrictEqual('0.44.4'); + }); + + it('Handles Unsuccessul Value', async () => { + + const name = "version"; + const pattern = /^[\d.*]+$/; + const defaultValue = "0.*"; + const expectedReturnValue = 'bbgerbgreiugbreiugbire'; + + jest.spyOn(core, 'getInput').mockImplementation(() => { + return expectedReturnValue; + }); + + try{ + await getInput(name, pattern, defaultValue); + } catch(e){ + expect(e.message).toStrictEqual(`${name} doesn't match ${pattern}`) + } + }); + + it('Handles Default Value', async () => { + + const name = "version"; + const pattern = /^[\d.*]+$/; + const defaultValue = "0.*"; + const expectedReturnValue = undefined; + + jest.spyOn(core, 'getInput').mockImplementation(() => { + return expectedReturnValue; + }); + + try{ + await getInput(name, pattern, defaultValue); + } catch(e){ + expect(e.message).toStrictEqual('0.*') + } + }); +}); diff --git a/tests/getInputs.test.js b/tests/getInputs.test.js new file mode 100644 index 0000000..e69de29 diff --git a/tests/helpers.test.js b/tests/helpers.test.js new file mode 100644 index 0000000..9618da4 --- /dev/null +++ b/tests/helpers.test.js @@ -0,0 +1,45 @@ +jest.mock("@actions/exec"); +jest.mock("@actions/io"); + +const os = require("os"); +const exec = require("@actions/exec"); +const io = require("@actions/io"); + +const { isWindows, mkdirTemp, createPythonVenv } = require('../lib/utils/helpers.js'); + +describe('helpers Test', () => { + + it('Returns Valid OS for Linux', async () => { + jest.spyOn(os, "platform").mockReturnValue('linux'); + const res = await isWindows(); + expect(res).toStrictEqual(false); + }); + + it('Returns Valid OS for MacOS', async () => { + jest.spyOn(os, "platform").mockReturnValue('darwin'); + const res = await isWindows(); + expect(res).toStrictEqual(false); + }); + + it('Returns Valid OS for Windows', async () => { + jest.spyOn(os, "platform").mockReturnValue('win32'); + const res = await isWindows(); + expect(res).toStrictEqual(true); + }); + + it('Temporary Directory Contains String(s)', async () => { + jest.spyOn(os, "platform").mockReturnValue('linux'); + const res = await mkdirTemp(); + expect(res).toMatch(/setup-cfn-lint-/); + expect(res).toMatch("/var/folders/ls/"); + }); + + it('Ensures Exec & IO which get called', async () => { + const python = '3.7.0'; + const venvPath = '/path/.venv'; + await createPythonVenv(python, venvPath); + expect(exec.exec).toHaveBeenCalledTimes(2); + expect(io.which).toHaveBeenCalledTimes(1); + }); + +}); diff --git a/tests/runCommand.test.js b/tests/runCommand.test.js new file mode 100644 index 0000000..633a122 --- /dev/null +++ b/tests/runCommand.test.js @@ -0,0 +1,45 @@ +const exec = require("@actions/exec"); +const core = require("@actions/core"); + +const { runCommand } = require('../lib/utils/runCommand.js'); + +describe('runCommand Test', () => { + + it('Successfully handles passed CFN-Lint Command', async () => { + + const command = { command: 'cfn-lint -t ./template.yml' }; + const expectedReturnValue = '' + + jest.spyOn(exec, 'exec').mockImplementation(() => { + return expectedReturnValue; + }); + + const log = jest.spyOn(core, 'info'); + + const res = await runCommand(command); + expect(res).toStrictEqual(''); + expect(log).toHaveBeenCalledTimes(1); + }); + + it('Successfully handles failure CFN-Lint Command', async () => { + + const command = { command: 'cfn-lint -t ./template.yml' }; + const expectedReturnValue = new Error('You have Errors in your Cloud Formation'); + + jest.spyOn(exec, 'exec').mockImplementation(() => { + throw expectedReturnValue; + }); + + const log = jest.spyOn(core, 'error'); + + try{ + await runCommand(command); + } catch(e){ + expect(e.message).toStrictEqual('You have Errors in your Cloud Formation'); + expect(log).toHaveBeenCalledTimes(1); + } + + + }); + +}); diff --git a/tests/setup.test.js b/tests/setup.test.js new file mode 100644 index 0000000..ae72d1d --- /dev/null +++ b/tests/setup.test.js @@ -0,0 +1,79 @@ +jest.mock("@actions/core"); +jest.mock("@actions/exec"); +jest.mock("@actions/io"); + +const os = require("os"); + +const core = require("@actions/core"); +const exec = require("@actions/exec"); +const io = require("@actions/io"); + +const setup = require("../lib/setup.js"); + +afterEach(() => { + jest.clearAllMocks(); +}); + +test.each([ + { + platform: "linux", + input: {}, + expected: { version: "0.*", python: "python3" }, + }, + { + platform: "darwin", + input: {}, + expected: { version: "0.*", python: "python3" }, + }, + { + platform: "win32", + input: {}, + expected: { version: "0.*", python: "python" }, + }, + { + platform: "linux", + input: { version: "0.44.4" }, + expected: { version: "0.44.4", python: "python3" }, + }, + { + platform: "linux", + input: { python: "python3" }, + expected: { version: "0.*", python: "python3" }, + }, + { + platform: "linux", + input: { version: "0.44.4", python: "python3" }, + expected: { version: "0.44.4", python: "python3" }, + }, +])("setup %o", async (test) => { + jest.spyOn(os, "platform").mockReturnValue(test.platform); + + core.getInput = jest + .fn() + .mockReturnValueOnce(test.input.version) + .mockReturnValueOnce(test.input.python); + + await setup(); + + expect(io.which).toHaveBeenCalledWith(test.expected.python, true); + expect(exec.exec).toHaveBeenCalledWith( + expect.anything(), + expect.arrayContaining(["install", `cfn-lint==${test.expected.version}`]) + ); + expect(core.addPath).toHaveBeenCalledTimes(1); +}); + +test.each([ + { + version: "not valid", + }, + { + version: "not|valid", + }, +])("invalid input %o", async (input) => { + core.getInput = jest + .fn() + .mockReturnValueOnce(input.version) + .mockReturnValueOnce(input.python); + await expect(setup).rejects.toThrow(Error); +}); From 33e97f933c71714f8a05838dd125b4f40d64db19 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 11:59:06 +0100 Subject: [PATCH 32/60] Adding Coverage to GitIgnore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 3c3629e..ba2a97b 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules +coverage From 4041173ff41ea59d6f04b99c016e7b7e76f7f671 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 12:00:52 +0100 Subject: [PATCH 33/60] Removing Coverage --- coverage/clover.xml | 108 --------- coverage/coverage-final.json | 7 - coverage/lcov-report/base.css | 224 ------------------ coverage/lcov-report/block-navigation.js | 79 ------ coverage/lcov-report/favicon.png | Bin 540 -> 0 bytes coverage/lcov-report/getInput.js.html | 113 --------- coverage/lcov-report/helpers.js.html | 143 ----------- coverage/lcov-report/index.html | 126 ---------- coverage/lcov-report/lib/index.html | 111 --------- coverage/lcov-report/lib/setup.js.html | 206 ---------------- .../lcov-report/lib/utils/getInput.js.html | 113 --------- .../lcov-report/lib/utils/getInputs.js.html | 143 ----------- .../lcov-report/lib/utils/helpers.js.html | 143 ----------- coverage/lcov-report/lib/utils/index.html | 171 ------------- .../lcov-report/lib/utils/installCLI.js.html | 200 ---------------- .../lcov-report/lib/utils/runCommand.js.html | 125 ---------- coverage/lcov-report/prettify.css | 1 - coverage/lcov-report/prettify.js | 2 - coverage/lcov-report/runCommand.js.html | 125 ---------- coverage/lcov-report/sort-arrow-sprite.png | Bin 209 -> 0 bytes coverage/lcov-report/sorter.js | 170 ------------- coverage/lcov.info | 160 ------------- 22 files changed, 2470 deletions(-) delete mode 100644 coverage/clover.xml delete mode 100644 coverage/coverage-final.json delete mode 100644 coverage/lcov-report/base.css delete mode 100644 coverage/lcov-report/block-navigation.js delete mode 100644 coverage/lcov-report/favicon.png delete mode 100644 coverage/lcov-report/getInput.js.html delete mode 100644 coverage/lcov-report/helpers.js.html delete mode 100644 coverage/lcov-report/index.html delete mode 100644 coverage/lcov-report/lib/index.html delete mode 100644 coverage/lcov-report/lib/setup.js.html delete mode 100644 coverage/lcov-report/lib/utils/getInput.js.html delete mode 100644 coverage/lcov-report/lib/utils/getInputs.js.html delete mode 100644 coverage/lcov-report/lib/utils/helpers.js.html delete mode 100644 coverage/lcov-report/lib/utils/index.html delete mode 100644 coverage/lcov-report/lib/utils/installCLI.js.html delete mode 100644 coverage/lcov-report/lib/utils/runCommand.js.html delete mode 100644 coverage/lcov-report/prettify.css delete mode 100644 coverage/lcov-report/prettify.js delete mode 100644 coverage/lcov-report/runCommand.js.html delete mode 100644 coverage/lcov-report/sort-arrow-sprite.png delete mode 100644 coverage/lcov-report/sorter.js delete mode 100644 coverage/lcov.info diff --git a/coverage/clover.xml b/coverage/clover.xml deleted file mode 100644 index d438df8..0000000 --- a/coverage/clover.xml +++ /dev/null @@ -1,108 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/coverage/coverage-final.json b/coverage/coverage-final.json deleted file mode 100644 index cd7b0c2..0000000 --- a/coverage/coverage-final.json +++ /dev/null @@ -1,7 +0,0 @@ -{"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/setup.js": {"path":"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/setup.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":37}},"1":{"start":{"line":3,"column":22},"end":{"line":3,"column":53}},"2":{"start":{"line":4,"column":23},"end":{"line":4,"column":55}},"3":{"start":{"line":5,"column":23},"end":{"line":5,"column":55}},"4":{"start":{"line":11,"column":2},"end":{"line":16,"column":3}},"5":{"start":{"line":12,"column":4},"end":{"line":12,"column":31}},"6":{"start":{"line":14,"column":4},"end":{"line":14,"column":29}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":16}},"8":{"start":{"line":18,"column":2},"end":{"line":23,"column":3}},"9":{"start":{"line":19,"column":4},"end":{"line":19,"column":39}},"10":{"start":{"line":21,"column":4},"end":{"line":21,"column":29}},"11":{"start":{"line":22,"column":4},"end":{"line":22,"column":16}},"12":{"start":{"line":25,"column":2},"end":{"line":25,"column":24}},"13":{"start":{"line":27,"column":2},"end":{"line":29,"column":3}},"14":{"start":{"line":28,"column":4},"end":{"line":28,"column":11}},"15":{"start":{"line":31,"column":2},"end":{"line":36,"column":3}},"16":{"start":{"line":32,"column":4},"end":{"line":32,"column":29}},"17":{"start":{"line":34,"column":4},"end":{"line":34,"column":29}},"18":{"start":{"line":35,"column":4},"end":{"line":35,"column":16}},"19":{"start":{"line":38,"column":2},"end":{"line":38,"column":9}},"20":{"start":{"line":42,"column":0},"end":{"line":42,"column":23}}},"fnMap":{"0":{"name":"setup","decl":{"start":{"line":7,"column":15},"end":{"line":7,"column":20}},"loc":{"start":{"line":7,"column":23},"end":{"line":40,"column":1}},"line":7}},"branchMap":{"0":{"loc":{"start":{"line":27,"column":2},"end":{"line":29,"column":3}},"type":"if","locations":[{"start":{"line":27,"column":2},"end":{"line":29,"column":3}},{"start":{"line":27,"column":2},"end":{"line":29,"column":3}}],"line":27}},"s":{"0":1,"1":1,"2":1,"3":1,"4":8,"5":8,"6":2,"7":2,"8":6,"9":6,"10":0,"11":0,"12":6,"13":6,"14":4,"15":2,"16":2,"17":0,"18":0,"19":2,"20":1},"f":{"0":8},"b":{"0":[4,2]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"6f7e9494afcb7bc81fbc7c12800c8632604d2fd2"} -,"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/getInput.js": {"path":"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/getInput.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":37}},"1":{"start":{"line":3,"column":0},"end":{"line":11,"column":2}},"2":{"start":{"line":5,"column":18},"end":{"line":5,"column":53}},"3":{"start":{"line":6,"column":4},"end":{"line":8,"column":5}},"4":{"start":{"line":7,"column":6},"end":{"line":7,"column":58}},"5":{"start":{"line":9,"column":4},"end":{"line":9,"column":17}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":4,"column":12},"end":{"line":4,"column":13}},"loc":{"start":{"line":4,"column":45},"end":{"line":10,"column":3}},"line":4}},"branchMap":{"0":{"loc":{"start":{"line":5,"column":18},"end":{"line":5,"column":53}},"type":"binary-expr","locations":[{"start":{"line":5,"column":18},"end":{"line":5,"column":37}},{"start":{"line":5,"column":41},"end":{"line":5,"column":53}}],"line":5},"1":{"loc":{"start":{"line":6,"column":4},"end":{"line":8,"column":5}},"type":"if","locations":[{"start":{"line":6,"column":4},"end":{"line":8,"column":5}},{"start":{"line":6,"column":4},"end":{"line":8,"column":5}}],"line":6}},"s":{"0":2,"1":2,"2":23,"3":23,"4":3,"5":20},"f":{"0":23},"b":{"0":[23,15],"1":[3,20]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"5aa611ca0d11d479afc1186b5b320a020f3225d0"} -,"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/getInputs.js": {"path":"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/getInputs.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":37}},"1":{"start":{"line":3,"column":21},"end":{"line":3,"column":45}},"2":{"start":{"line":4,"column":22},"end":{"line":4,"column":45}},"3":{"start":{"line":6,"column":0},"end":{"line":21,"column":2}},"4":{"start":{"line":9,"column":26},"end":{"line":9,"column":60}},"5":{"start":{"line":11,"column":4},"end":{"line":19,"column":5}},"6":{"start":{"line":12,"column":22},"end":{"line":12,"column":61}},"7":{"start":{"line":13,"column":22},"end":{"line":13,"column":70}},"8":{"start":{"line":14,"column":21},"end":{"line":14,"column":62}},"9":{"start":{"line":15,"column":6},"end":{"line":15,"column":41}},"10":{"start":{"line":17,"column":6},"end":{"line":17,"column":45}},"11":{"start":{"line":18,"column":6},"end":{"line":18,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":7,"column":13},"end":{"line":7,"column":14}},"loc":{"start":{"line":7,"column":19},"end":{"line":20,"column":3}},"line":7}},"branchMap":{"0":{"loc":{"start":{"line":9,"column":26},"end":{"line":9,"column":60}},"type":"cond-expr","locations":[{"start":{"line":9,"column":40},"end":{"line":9,"column":48}},{"start":{"line":9,"column":51},"end":{"line":9,"column":60}}],"line":9}},"s":{"0":1,"1":1,"2":1,"3":1,"4":8,"5":8,"6":8,"7":6,"8":6,"9":6,"10":2,"11":2},"f":{"0":8},"b":{"0":[1,7]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"fffc45d4a0bc0a9d63f145c730398a0a972beea6"} -,"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/helpers.js": {"path":"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/helpers.js","statementMap":{"0":{"start":{"line":1,"column":11},"end":{"line":1,"column":24}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":28}},"2":{"start":{"line":3,"column":11},"end":{"line":3,"column":24}},"3":{"start":{"line":5,"column":13},"end":{"line":5,"column":37}},"4":{"start":{"line":6,"column":11},"end":{"line":6,"column":33}},"5":{"start":{"line":8,"column":0},"end":{"line":21,"column":2}},"6":{"start":{"line":10,"column":4},"end":{"line":10,"column":37}},"7":{"start":{"line":13,"column":4},"end":{"line":13,"column":69}},"8":{"start":{"line":16,"column":23},"end":{"line":16,"column":51}},"9":{"start":{"line":18,"column":4},"end":{"line":18,"column":47}},"10":{"start":{"line":19,"column":4},"end":{"line":19,"column":58}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":9,"column":13},"end":{"line":9,"column":14}},"loc":{"start":{"line":9,"column":19},"end":{"line":11,"column":3}},"line":9},"1":{"name":"(anonymous_1)","decl":{"start":{"line":12,"column":13},"end":{"line":12,"column":14}},"loc":{"start":{"line":12,"column":19},"end":{"line":14,"column":3}},"line":12},"2":{"name":"(anonymous_2)","decl":{"start":{"line":15,"column":20},"end":{"line":15,"column":21}},"loc":{"start":{"line":15,"column":48},"end":{"line":20,"column":3}},"line":15}},"branchMap":{},"s":{"0":2,"1":2,"2":2,"3":2,"4":2,"5":2,"6":23,"7":7,"8":7,"9":7,"10":7},"f":{"0":23,"1":7,"2":7},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"50b126e7f5c5e4016bc4a25c8da3528bdcf8e28e"} -,"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/installCLI.js": {"path":"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/installCLI.js","statementMap":{"0":{"start":{"line":1,"column":11},"end":{"line":1,"column":24}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":28}},"2":{"start":{"line":4,"column":13},"end":{"line":4,"column":37}},"3":{"start":{"line":6,"column":50},"end":{"line":6,"column":73}},"4":{"start":{"line":9,"column":0},"end":{"line":40,"column":2}},"5":{"start":{"line":11,"column":21},"end":{"line":11,"column":32}},"6":{"start":{"line":14,"column":21},"end":{"line":14,"column":49}},"7":{"start":{"line":15,"column":4},"end":{"line":15,"column":45}},"8":{"start":{"line":18,"column":19},"end":{"line":18,"column":50}},"9":{"start":{"line":19,"column":20},"end":{"line":19,"column":47}},"10":{"start":{"line":22,"column":23},"end":{"line":22,"column":51}},"11":{"start":{"line":25,"column":4},"end":{"line":25,"column":78}},"12":{"start":{"line":27,"column":4},"end":{"line":27,"column":95}},"13":{"start":{"line":29,"column":4},"end":{"line":29,"column":96}},"14":{"start":{"line":32,"column":24},"end":{"line":32,"column":50}},"15":{"start":{"line":33,"column":4},"end":{"line":33,"column":30}},"16":{"start":{"line":34,"column":20},"end":{"line":34,"column":61}},"17":{"start":{"line":35,"column":4},"end":{"line":35,"column":81}},"18":{"start":{"line":37,"column":4},"end":{"line":37,"column":23}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":10,"column":14},"end":{"line":10,"column":15}},"loc":{"start":{"line":10,"column":45},"end":{"line":38,"column":3}},"line":10}},"branchMap":{"0":{"loc":{"start":{"line":18,"column":19},"end":{"line":18,"column":50}},"type":"cond-expr","locations":[{"start":{"line":18,"column":33},"end":{"line":18,"column":42}},{"start":{"line":18,"column":45},"end":{"line":18,"column":50}}],"line":18},"1":{"loc":{"start":{"line":34,"column":20},"end":{"line":34,"column":61}},"type":"cond-expr","locations":[{"start":{"line":34,"column":34},"end":{"line":34,"column":48}},{"start":{"line":34,"column":51},"end":{"line":34,"column":61}}],"line":34}},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":6,"6":6,"7":6,"8":6,"9":6,"10":6,"11":6,"12":6,"13":6,"14":6,"15":6,"16":6,"17":6,"18":6},"f":{"0":6},"b":{"0":[1,5],"1":[1,5]},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"5d67dd469ae103fcf6da30c673eceaa93bf16f87"} -,"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/runCommand.js": {"path":"/Users/nicholasliffen/Documents/code/cfn-lint-action/lib/utils/runCommand.js","statementMap":{"0":{"start":{"line":1,"column":13},"end":{"line":1,"column":37}},"1":{"start":{"line":2,"column":13},"end":{"line":2,"column":37}},"2":{"start":{"line":4,"column":0},"end":{"line":15,"column":2}},"3":{"start":{"line":6,"column":4},"end":{"line":13,"column":5}},"4":{"start":{"line":7,"column":23},"end":{"line":7,"column":47}},"5":{"start":{"line":8,"column":6},"end":{"line":8,"column":69}},"6":{"start":{"line":9,"column":6},"end":{"line":9,"column":22}},"7":{"start":{"line":11,"column":6},"end":{"line":11,"column":87}},"8":{"start":{"line":12,"column":6},"end":{"line":12,"column":14}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":5,"column":14},"end":{"line":5,"column":15}},"loc":{"start":{"line":5,"column":37},"end":{"line":14,"column":3}},"line":5}},"branchMap":{},"s":{"0":2,"1":2,"2":2,"3":4,"4":4,"5":3,"6":3,"7":1,"8":1},"f":{"0":4},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"ec14100b7312a2969bbccb1b475c708bdd0c7ec9"} -} diff --git a/coverage/lcov-report/base.css b/coverage/lcov-report/base.css deleted file mode 100644 index f418035..0000000 --- a/coverage/lcov-report/base.css +++ /dev/null @@ -1,224 +0,0 @@ -body, html { - margin:0; padding: 0; - height: 100%; -} -body { - font-family: Helvetica Neue, Helvetica, Arial; - font-size: 14px; - color:#333; -} -.small { font-size: 12px; } -*, *:after, *:before { - -webkit-box-sizing:border-box; - -moz-box-sizing:border-box; - box-sizing:border-box; - } -h1 { font-size: 20px; margin: 0;} -h2 { font-size: 14px; } -pre { - font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace; - margin: 0; - padding: 0; - -moz-tab-size: 2; - -o-tab-size: 2; - tab-size: 2; -} -a { color:#0074D9; text-decoration:none; } -a:hover { text-decoration:underline; } -.strong { font-weight: bold; } -.space-top1 { padding: 10px 0 0 0; } -.pad2y { padding: 20px 0; } -.pad1y { padding: 10px 0; } -.pad2x { padding: 0 20px; } -.pad2 { padding: 20px; } -.pad1 { padding: 10px; } -.space-left2 { padding-left:55px; } -.space-right2 { padding-right:20px; } -.center { text-align:center; } -.clearfix { display:block; } -.clearfix:after { - content:''; - display:block; - height:0; - clear:both; - visibility:hidden; - } -.fl { float: left; } -@media only screen and (max-width:640px) { - .col3 { width:100%; max-width:100%; } - .hide-mobile { display:none!important; } -} - -.quiet { - color: #7f7f7f; - color: rgba(0,0,0,0.5); -} -.quiet a { opacity: 0.7; } - -.fraction { - font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; - font-size: 10px; - color: #555; - background: #E8E8E8; - padding: 4px 5px; - border-radius: 3px; - vertical-align: middle; -} - -div.path a:link, div.path a:visited { color: #333; } -table.coverage { - border-collapse: collapse; - margin: 10px 0 0 0; - padding: 0; -} - -table.coverage td { - margin: 0; - padding: 0; - vertical-align: top; -} -table.coverage td.line-count { - text-align: right; - padding: 0 5px 0 20px; -} -table.coverage td.line-coverage { - text-align: right; - padding-right: 10px; - min-width:20px; -} - -table.coverage td span.cline-any { - display: inline-block; - padding: 0 5px; - width: 100%; -} -.missing-if-branch { - display: inline-block; - margin-right: 5px; - border-radius: 3px; - position: relative; - padding: 0 4px; - background: #333; - color: yellow; -} - -.skip-if-branch { - display: none; - margin-right: 10px; - position: relative; - padding: 0 4px; - background: #ccc; - color: white; -} -.missing-if-branch .typ, .skip-if-branch .typ { - color: inherit !important; -} -.coverage-summary { - border-collapse: collapse; - width: 100%; -} -.coverage-summary tr { border-bottom: 1px solid #bbb; } -.keyline-all { border: 1px solid #ddd; } -.coverage-summary td, .coverage-summary th { padding: 10px; } -.coverage-summary tbody { border: 1px solid #bbb; } -.coverage-summary td { border-right: 1px solid #bbb; } -.coverage-summary td:last-child { border-right: none; } -.coverage-summary th { - text-align: left; - font-weight: normal; - white-space: nowrap; -} -.coverage-summary th.file { border-right: none !important; } -.coverage-summary th.pct { } -.coverage-summary th.pic, -.coverage-summary th.abs, -.coverage-summary td.pct, -.coverage-summary td.abs { text-align: right; } -.coverage-summary td.file { white-space: nowrap; } -.coverage-summary td.pic { min-width: 120px !important; } -.coverage-summary tfoot td { } - -.coverage-summary .sorter { - height: 10px; - width: 7px; - display: inline-block; - margin-left: 0.5em; - background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent; -} -.coverage-summary .sorted .sorter { - background-position: 0 -20px; -} -.coverage-summary .sorted-desc .sorter { - background-position: 0 -10px; -} -.status-line { height: 10px; } -/* yellow */ -.cbranch-no { background: yellow !important; color: #111; } -/* dark red */ -.red.solid, .status-line.low, .low .cover-fill { background:#C21F39 } -.low .chart { border:1px solid #C21F39 } -.highlighted, -.highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{ - background: #C21F39 !important; -} -/* medium red */ -.cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE } -/* light red */ -.low, .cline-no { background:#FCE1E5 } -/* light green */ -.high, .cline-yes { background:rgb(230,245,208) } -/* medium green */ -.cstat-yes { background:rgb(161,215,106) } -/* dark green */ -.status-line.high, .high .cover-fill { background:rgb(77,146,33) } -.high .chart { border:1px solid rgb(77,146,33) } -/* dark yellow (gold) */ -.status-line.medium, .medium .cover-fill { background: #f9cd0b; } -.medium .chart { border:1px solid #f9cd0b; } -/* light yellow */ -.medium { background: #fff4c2; } - -.cstat-skip { background: #ddd; color: #111; } -.fstat-skip { background: #ddd; color: #111 !important; } -.cbranch-skip { background: #ddd !important; color: #111; } - -span.cline-neutral { background: #eaeaea; } - -.coverage-summary td.empty { - opacity: .5; - padding-top: 4px; - padding-bottom: 4px; - line-height: 1; - color: #888; -} - -.cover-fill, .cover-empty { - display:inline-block; - height: 12px; -} -.chart { - line-height: 0; -} -.cover-empty { - background: white; -} -.cover-full { - border-right: none !important; -} -pre.prettyprint { - border: none !important; - padding: 0 !important; - margin: 0 !important; -} -.com { color: #999 !important; } -.ignore-none { color: #999; font-weight: normal; } - -.wrapper { - min-height: 100%; - height: auto !important; - height: 100%; - margin: 0 auto -48px; -} -.footer, .push { - height: 48px; -} diff --git a/coverage/lcov-report/block-navigation.js b/coverage/lcov-report/block-navigation.js deleted file mode 100644 index c7ff5a5..0000000 --- a/coverage/lcov-report/block-navigation.js +++ /dev/null @@ -1,79 +0,0 @@ -/* eslint-disable */ -var jumpToCode = (function init() { - // Classes of code we would like to highlight in the file view - var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no']; - - // Elements to highlight in the file listing view - var fileListingElements = ['td.pct.low']; - - // We don't want to select elements that are direct descendants of another match - var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > ` - - // Selecter that finds elements on the page to which we can jump - var selector = - fileListingElements.join(', ') + - ', ' + - notSelector + - missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b` - - // The NodeList of matching elements - var missingCoverageElements = document.querySelectorAll(selector); - - var currentIndex; - - function toggleClass(index) { - missingCoverageElements - .item(currentIndex) - .classList.remove('highlighted'); - missingCoverageElements.item(index).classList.add('highlighted'); - } - - function makeCurrent(index) { - toggleClass(index); - currentIndex = index; - missingCoverageElements.item(index).scrollIntoView({ - behavior: 'smooth', - block: 'center', - inline: 'center' - }); - } - - function goToPrevious() { - var nextIndex = 0; - if (typeof currentIndex !== 'number' || currentIndex === 0) { - nextIndex = missingCoverageElements.length - 1; - } else if (missingCoverageElements.length > 1) { - nextIndex = currentIndex - 1; - } - - makeCurrent(nextIndex); - } - - function goToNext() { - var nextIndex = 0; - - if ( - typeof currentIndex === 'number' && - currentIndex < missingCoverageElements.length - 1 - ) { - nextIndex = currentIndex + 1; - } - - makeCurrent(nextIndex); - } - - return function jump(event) { - switch (event.which) { - case 78: // n - case 74: // j - goToNext(); - break; - case 66: // b - case 75: // k - case 80: // p - goToPrevious(); - break; - } - }; -})(); -window.addEventListener('keydown', jumpToCode); diff --git a/coverage/lcov-report/favicon.png b/coverage/lcov-report/favicon.png deleted file mode 100644 index 6691817834a957c938e7f09640a37a645fb31457..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 540 zcmV+%0^|LOP)wSzy{h>9elhJ=8GnBQmf?)AI(^#wDA_`!QTxaXXE&bjxo zTGCc%V|W`}Lwz0rDO*qBbGY-M@aNENIZ1rK?nOAibaC*vb%CF;I_~lkJawax%_+1J zLn(#pv_v{f0`v`Cfp6()7MB(>IoTAiQdKxgxX?VyV&KVZ7b$vn<8|Z<9$35C+G_8SH0x6Y(xB&~bmn%r}ceRwbc0000 - - - - Code coverage report for getInput.js - - - - - - - - - -
-
-

All files getInput.js

-
- -
- 100% - Statements - 6/6 -
- - -
- 100% - Branches - 4/4 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 6/6 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

-
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -121x -  -1x -  -3x -3x -1x -  -2x -  -  - 
const core = require("@actions/core");
- 
-module.exports = {
-  getInput: (name, pattern, defaultValue) => {
-    const value = core.getInput(name) || defaultValue;
-    if (!pattern.test(value)) {
-      throw new Error(`${name} doesn't match ${pattern}`);
-    }
-    return value;
-  },
-};
- 
- -
-
- - - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/helpers.js.html b/coverage/lcov-report/helpers.js.html deleted file mode 100644 index 8733b3e..0000000 --- a/coverage/lcov-report/helpers.js.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - Code coverage report for helpers.js - - - - - - - - - -
-
-

All files helpers.js

-
- -
- 100% - Statements - 11/11 -
- - -
- 100% - Branches - 0/0 -
- - -
- 100% - Functions - 3/3 -
- - -
- 100% - Lines - 11/11 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

-
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -221x -1x -1x -  -1x -1x -  -1x -  -3x -  -  -1x -  -  -1x -  -1x -1x -  -  - 
const fs = require("fs");
-const path = require("path");
-const os = require("os");
- 
-const exec = require("@actions/exec");
-const io = require("@actions/io");
- 
-module.exports = {
-  isWindows: () => {
-    return os.platform() === "win32";
-  },
-  mkdirTemp: () => {
-    return fs.mkdtempSync(path.join(os.tmpdir(), "setup-cfn-lint-"));
-  },
-  createPythonVenv: async (python, venvPath) => {
-    const pythonPath = await io.which(python, true);
- 
-    await exec.exec(pythonPath, ["--version"]);
-    await exec.exec(pythonPath, ["-m", "venv", venvPath]);
-  },
-};
- 
- -
-
- - - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/index.html b/coverage/lcov-report/index.html deleted file mode 100644 index 6390d18..0000000 --- a/coverage/lcov-report/index.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - Code coverage report for All files - - - - - - - - - -
-
-

All files

-
- -
- 94.87% - Statements - 74/78 -
- - -
- 100% - Branches - 12/12 -
- - -
- 100% - Functions - 8/8 -
- - -
- 94.87% - Lines - 74/78 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
lib -
-
80.95%17/21100%2/2100%1/180.95%17/21
lib/utils -
-
100%57/57100%10/10100%7/7100%57/57
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/lib/index.html b/coverage/lcov-report/lib/index.html deleted file mode 100644 index 409d22a..0000000 --- a/coverage/lcov-report/lib/index.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - Code coverage report for lib - - - - - - - - - -
-
-

All files lib

-
- -
- 80.95% - Statements - 17/21 -
- - -
- 100% - Branches - 2/2 -
- - -
- 100% - Functions - 1/1 -
- - -
- 80.95% - Lines - 17/21 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
setup.js -
-
80.95%17/21100%2/2100%1/180.95%17/21
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/lib/setup.js.html b/coverage/lcov-report/lib/setup.js.html deleted file mode 100644 index 08762be..0000000 --- a/coverage/lcov-report/lib/setup.js.html +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - Code coverage report for lib/setup.js - - - - - - - - - -
-
-

All files / lib setup.js

-
- -
- 80.95% - Statements - 17/21 -
- - -
- 100% - Branches - 2/2 -
- - -
- 100% - Functions - 1/1 -
- - -
- 80.95% - Lines - 17/21 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

-
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -41 -42 -431x -  -1x -1x -1x -  -  -  -  -  -8x -8x -  -2x -2x -  -  -6x -6x -  -  -  -  -  -6x -  -6x -4x -  -  -2x -2x -  -  -  -  -  -2x -  -  -  -1x - 
const core = require("@actions/core");
- 
-const { getInputs } = require('./utils/getInputs.js')
-const { installCLI } = require('./utils/installCLI.js')
-const { runCommand } = require('./utils/runCommand.js')
- 
-async function setup() {
- 
-  let inputs; let binPath;
- 
-  try {
-    inputs = await getInputs();
-  } catch (error){
-    core.error(error.message)
-    throw error;
-  }
- 
-  try {
-    binPath = await installCLI(inputs);
-  } catch (error){
-    core.error(error.message)
-    throw error;
-  }
- 
-  core.addPath(binPath);
- 
-  if(!inputs.command){
-    return;
-  }
- 
-  try {
-    await runCommand(inputs);
-  } catch (error){
-    core.error(error.message)
-    throw error;
-  }
- 
-  return;
- 
-}
- 
-module.exports = setup;
- 
- -
-
- - - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/lib/utils/getInput.js.html b/coverage/lcov-report/lib/utils/getInput.js.html deleted file mode 100644 index bf267f8..0000000 --- a/coverage/lcov-report/lib/utils/getInput.js.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - Code coverage report for lib/utils/getInput.js - - - - - - - - - -
-
-

All files / lib/utils getInput.js

-
- -
- 100% - Statements - 6/6 -
- - -
- 100% - Branches - 4/4 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 6/6 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

-
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -122x -  -2x -  -23x -23x -3x -  -20x -  -  - 
const core = require("@actions/core");
- 
-module.exports = {
-  getInput: (name, pattern, defaultValue) => {
-    const value = core.getInput(name) || defaultValue;
-    if (!pattern.test(value)) {
-      throw new Error(`${name} doesn't match ${pattern}`);
-    }
-    return value;
-  },
-};
- 
- -
-
- - - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/lib/utils/getInputs.js.html b/coverage/lcov-report/lib/utils/getInputs.js.html deleted file mode 100644 index 24539c0..0000000 --- a/coverage/lcov-report/lib/utils/getInputs.js.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - Code coverage report for lib/utils/getInputs.js - - - - - - - - - -
-
-

All files / lib/utils getInputs.js

-
- -
- 100% - Statements - 12/12 -
- - -
- 100% - Branches - 2/2 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 12/12 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

-
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -221x -  -1x -1x -  -1x -  -  -8x -  -8x -8x -6x -6x -6x -  -2x -2x -  -  -  - 
const core = require("@actions/core");
- 
-const { getInput } = require('./getInput.js');
-const { isWindows } = require('./helpers.js');
- 
-module.exports = {
-  getInputs: () => {
-     // python3 isn't standard on Windows
-    const defaultPython = isWindows() ? "python" : "python3";
- 
-    try {
-      const version = getInput("version", /^[\d.*]+$/, "0.*");
-      const command = getInput("command", /^cfn-lint\s || null/, null);
-      const python = getInput("python", /^.+$/, defaultPython);
-      return { version, command, python }
-    } catch(e){
-      core.error('Failed to Collect Inputs');
-      throw e;
-    }
-  },
-};
- 
- -
-
- - - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/lib/utils/helpers.js.html b/coverage/lcov-report/lib/utils/helpers.js.html deleted file mode 100644 index 343ff83..0000000 --- a/coverage/lcov-report/lib/utils/helpers.js.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - Code coverage report for lib/utils/helpers.js - - - - - - - - - -
-
-

All files / lib/utils helpers.js

-
- -
- 100% - Statements - 11/11 -
- - -
- 100% - Branches - 0/0 -
- - -
- 100% - Functions - 3/3 -
- - -
- 100% - Lines - 11/11 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

-
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -222x -2x -2x -  -2x -2x -  -2x -  -23x -  -  -7x -  -  -7x -  -7x -7x -  -  - 
const fs = require("fs");
-const path = require("path");
-const os = require("os");
- 
-const exec = require("@actions/exec");
-const io = require("@actions/io");
- 
-module.exports = {
-  isWindows: () => {
-    return os.platform() === "win32";
-  },
-  mkdirTemp: () => {
-    return fs.mkdtempSync(path.join(os.tmpdir(), "setup-cfn-lint-"));
-  },
-  createPythonVenv: async (python, venvPath) => {
-    const pythonPath = await io.which(python, true);
- 
-    await exec.exec(pythonPath, ["--version"]);
-    await exec.exec(pythonPath, ["-m", "venv", venvPath]);
-  },
-};
- 
- -
-
- - - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/lib/utils/index.html b/coverage/lcov-report/lib/utils/index.html deleted file mode 100644 index 181fe59..0000000 --- a/coverage/lcov-report/lib/utils/index.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - Code coverage report for lib/utils - - - - - - - - - -
-
-

All files lib/utils

-
- -
- 100% - Statements - 57/57 -
- - -
- 100% - Branches - 10/10 -
- - -
- 100% - Functions - 7/7 -
- - -
- 100% - Lines - 57/57 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileStatementsBranchesFunctionsLines
getInput.js -
-
100%6/6100%4/4100%1/1100%6/6
getInputs.js -
-
100%12/12100%2/2100%1/1100%12/12
helpers.js -
-
100%11/11100%0/0100%3/3100%11/11
installCLI.js -
-
100%19/19100%4/4100%1/1100%19/19
runCommand.js -
-
100%9/9100%0/0100%1/1100%9/9
-
-
-
- - - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/lib/utils/installCLI.js.html b/coverage/lcov-report/lib/utils/installCLI.js.html deleted file mode 100644 index ae3f009..0000000 --- a/coverage/lcov-report/lib/utils/installCLI.js.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - Code coverage report for lib/utils/installCLI.js - - - - - - - - - -
-
-

All files / lib/utils installCLI.js

-
- -
- 100% - Statements - 19/19 -
- - -
- 100% - Branches - 4/4 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 19/19 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

-
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25 -26 -27 -28 -29 -30 -31 -32 -33 -34 -35 -36 -37 -38 -39 -40 -411x -1x -  -1x -  -1x -  -  -1x -  -6x -  -  -6x -6x -  -  -6x -6x -  -  -6x -  -  -6x -  -6x -  -6x -  -  -6x -6x -6x -6x -  -6x -  -  -  - 
const fs = require("fs");
-const path = require("path");
- 
-const exec = require("@actions/exec");
- 
-const { mkdirTemp, createPythonVenv, isWindows} = require('./helpers.js');
- 
- 
-module.exports = {
-  installCLI: async ({ python, version }) => {
-    const tempPath = mkdirTemp();
- 
-    // Create virtual environment
-    const venvPath = path.join(tempPath, ".venv");
-    await createPythonVenv(python, venvPath);
- 
-    // See https://docs.python.org/3/library/venv.html
-    const binDir = isWindows() ? "Scripts" : "bin";
-    const binPath = path.join(venvPath, binDir);
- 
-    // Virtual environment running Python
-    const pythonPath = path.join(binPath, "python");
- 
-    // Ensure installation tooling is up-to-date across platforms
-    await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "pip"]);
-    // setuptools and wheel needed for source and binary distributions
-    await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "setuptools", "wheel" ]);
-    // Install latest compatible version
-    await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", `cfn-lint==${version}` ]);
- 
-    // Symlink from separate directory so only CFN LINT CLI is added to PATH
-    const symlinkPath = path.join(tempPath, "bin");
-    fs.mkdirSync(symlinkPath);
-    const cfnLint = isWindows() ? "cfn-lint.exe" : "cfn-lint";
-    fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint));
- 
-    return symlinkPath;
-  },
- 
-};
- 
- -
-
- - - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/lib/utils/runCommand.js.html b/coverage/lcov-report/lib/utils/runCommand.js.html deleted file mode 100644 index 38fc304..0000000 --- a/coverage/lcov-report/lib/utils/runCommand.js.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - Code coverage report for lib/utils/runCommand.js - - - - - - - - - -
-
-

All files / lib/utils runCommand.js

-
- -
- 100% - Statements - 9/9 -
- - -
- 100% - Branches - 0/0 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 9/9 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

-
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -162x -2x -  -2x -  -4x -4x -3x -3x -  -1x -1x -  -  -  - 
const exec = require("@actions/exec");
-const core = require("@actions/core");
- 
-module.exports = {
-  runCommand: async ({ command }) => {
-    try{
-      const response = await exec.exec(command)
-      core.info(`Ran command: ${command}. Response is: ${response}`);
-      return response;
-    } catch(e){
-      core.error(`Error running command: ${command}. Returned error is: ${e.message}`);
-      throw e;
-    }
-  },
-};
- 
- -
-
- - - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/prettify.css b/coverage/lcov-report/prettify.css deleted file mode 100644 index b317a7c..0000000 --- a/coverage/lcov-report/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} diff --git a/coverage/lcov-report/prettify.js b/coverage/lcov-report/prettify.js deleted file mode 100644 index b322523..0000000 --- a/coverage/lcov-report/prettify.js +++ /dev/null @@ -1,2 +0,0 @@ -/* eslint-disable */ -window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;arat[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]); diff --git a/coverage/lcov-report/runCommand.js.html b/coverage/lcov-report/runCommand.js.html deleted file mode 100644 index f34ff04..0000000 --- a/coverage/lcov-report/runCommand.js.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - Code coverage report for runCommand.js - - - - - - - - - -
-
-

All files runCommand.js

-
- -
- 100% - Statements - 9/9 -
- - -
- 100% - Branches - 0/0 -
- - -
- 100% - Functions - 1/1 -
- - -
- 100% - Lines - 9/9 -
- - -
-

- Press n or j to go to the next uncovered block, b, p or k for the previous block. -

-
-
-

-
1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -161x -1x -  -1x -  -2x -2x -1x -1x -  -1x -1x -  -  -  - 
const exec = require("@actions/exec");
-const core = require("@actions/core");
- 
-module.exports = {
-  runCommand: async ({ command }) => {
-    try{
-      const response = await exec.exec(command)
-      core.info(`Ran command: ${command}. Response is: ${response}`);
-      return response;
-    } catch(e){
-      core.error(`Error running command: ${command}. Returned error is: ${e.message}`);
-      throw e;
-    }
-  },
-};
- 
- -
-
- - - - - - - - - \ No newline at end of file diff --git a/coverage/lcov-report/sort-arrow-sprite.png b/coverage/lcov-report/sort-arrow-sprite.png deleted file mode 100644 index 03f704a609c6fd0dbfdac63466a7d7c958b5cbf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^>_9Bd!3HEZxJ@+%Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii$m5978H@?Fn+^JD|Y9yzj{W`447Gxa{7*dM7nnnD-Lb z6^}Hx2)'; - } - } - return cols; - } - // attaches a data attribute to every tr element with an object - // of data values keyed by column name - function loadRowData(tableRow) { - var tableCols = tableRow.querySelectorAll('td'), - colNode, - col, - data = {}, - i, - val; - for (i = 0; i < tableCols.length; i += 1) { - colNode = tableCols[i]; - col = cols[i]; - val = colNode.getAttribute('data-value'); - if (col.type === 'number') { - val = Number(val); - } - data[col.key] = val; - } - return data; - } - // loads all row data - function loadData() { - var rows = getTableBody().querySelectorAll('tr'), - i; - - for (i = 0; i < rows.length; i += 1) { - rows[i].data = loadRowData(rows[i]); - } - } - // sorts the table using the data for the ith column - function sortByIndex(index, desc) { - var key = cols[index].key, - sorter = function(a, b) { - a = a.data[key]; - b = b.data[key]; - return a < b ? -1 : a > b ? 1 : 0; - }, - finalSorter = sorter, - tableBody = document.querySelector('.coverage-summary tbody'), - rowNodes = tableBody.querySelectorAll('tr'), - rows = [], - i; - - if (desc) { - finalSorter = function(a, b) { - return -1 * sorter(a, b); - }; - } - - for (i = 0; i < rowNodes.length; i += 1) { - rows.push(rowNodes[i]); - tableBody.removeChild(rowNodes[i]); - } - - rows.sort(finalSorter); - - for (i = 0; i < rows.length; i += 1) { - tableBody.appendChild(rows[i]); - } - } - // removes sort indicators for current column being sorted - function removeSortIndicators() { - var col = getNthColumn(currentSort.index), - cls = col.className; - - cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, ''); - col.className = cls; - } - // adds sort indicators for current column being sorted - function addSortIndicators() { - getNthColumn(currentSort.index).className += currentSort.desc - ? ' sorted-desc' - : ' sorted'; - } - // adds event listeners for all sorter widgets - function enableUI() { - var i, - el, - ithSorter = function ithSorter(i) { - var col = cols[i]; - - return function() { - var desc = col.defaultDescSort; - - if (currentSort.index === i) { - desc = !currentSort.desc; - } - sortByIndex(i, desc); - removeSortIndicators(); - currentSort.index = i; - currentSort.desc = desc; - addSortIndicators(); - }; - }; - for (i = 0; i < cols.length; i += 1) { - if (cols[i].sortable) { - // add the click event handler on the th so users - // dont have to click on those tiny arrows - el = getNthColumn(i).querySelector('.sorter').parentElement; - if (el.addEventListener) { - el.addEventListener('click', ithSorter(i)); - } else { - el.attachEvent('onclick', ithSorter(i)); - } - } - } - } - // adds sorting functionality to the UI - return function() { - if (!getTable()) { - return; - } - cols = loadColumns(); - loadData(); - addSortIndicators(); - enableUI(); - }; -})(); - -window.addEventListener('load', addSorting); diff --git a/coverage/lcov.info b/coverage/lcov.info deleted file mode 100644 index a03c62c..0000000 --- a/coverage/lcov.info +++ /dev/null @@ -1,160 +0,0 @@ -TN: -SF:lib/setup.js -FN:7,setup -FNF:1 -FNH:1 -FNDA:8,setup -DA:1,1 -DA:3,1 -DA:4,1 -DA:5,1 -DA:11,8 -DA:12,8 -DA:14,2 -DA:15,2 -DA:18,6 -DA:19,6 -DA:21,0 -DA:22,0 -DA:25,6 -DA:27,6 -DA:28,4 -DA:31,2 -DA:32,2 -DA:34,0 -DA:35,0 -DA:38,2 -DA:42,1 -LF:21 -LH:17 -BRDA:27,0,0,4 -BRDA:27,0,1,2 -BRF:2 -BRH:2 -end_of_record -TN: -SF:lib/utils/getInput.js -FN:4,(anonymous_0) -FNF:1 -FNH:1 -FNDA:23,(anonymous_0) -DA:1,2 -DA:3,2 -DA:5,23 -DA:6,23 -DA:7,3 -DA:9,20 -LF:6 -LH:6 -BRDA:5,0,0,23 -BRDA:5,0,1,15 -BRDA:6,1,0,3 -BRDA:6,1,1,20 -BRF:4 -BRH:4 -end_of_record -TN: -SF:lib/utils/getInputs.js -FN:7,(anonymous_0) -FNF:1 -FNH:1 -FNDA:8,(anonymous_0) -DA:1,1 -DA:3,1 -DA:4,1 -DA:6,1 -DA:9,8 -DA:11,8 -DA:12,8 -DA:13,6 -DA:14,6 -DA:15,6 -DA:17,2 -DA:18,2 -LF:12 -LH:12 -BRDA:9,0,0,1 -BRDA:9,0,1,7 -BRF:2 -BRH:2 -end_of_record -TN: -SF:lib/utils/helpers.js -FN:9,(anonymous_0) -FN:12,(anonymous_1) -FN:15,(anonymous_2) -FNF:3 -FNH:3 -FNDA:23,(anonymous_0) -FNDA:7,(anonymous_1) -FNDA:7,(anonymous_2) -DA:1,2 -DA:2,2 -DA:3,2 -DA:5,2 -DA:6,2 -DA:8,2 -DA:10,23 -DA:13,7 -DA:16,7 -DA:18,7 -DA:19,7 -LF:11 -LH:11 -BRF:0 -BRH:0 -end_of_record -TN: -SF:lib/utils/installCLI.js -FN:10,(anonymous_0) -FNF:1 -FNH:1 -FNDA:6,(anonymous_0) -DA:1,1 -DA:2,1 -DA:4,1 -DA:6,1 -DA:9,1 -DA:11,6 -DA:14,6 -DA:15,6 -DA:18,6 -DA:19,6 -DA:22,6 -DA:25,6 -DA:27,6 -DA:29,6 -DA:32,6 -DA:33,6 -DA:34,6 -DA:35,6 -DA:37,6 -LF:19 -LH:19 -BRDA:18,0,0,1 -BRDA:18,0,1,5 -BRDA:34,1,0,1 -BRDA:34,1,1,5 -BRF:4 -BRH:4 -end_of_record -TN: -SF:lib/utils/runCommand.js -FN:5,(anonymous_0) -FNF:1 -FNH:1 -FNDA:4,(anonymous_0) -DA:1,2 -DA:2,2 -DA:4,2 -DA:6,4 -DA:7,4 -DA:8,3 -DA:9,3 -DA:11,1 -DA:12,1 -LF:9 -LH:9 -BRF:0 -BRH:0 -end_of_record From a1dbce489ed8a6968ca6113707bac9a505d50ca6 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 12:02:24 +0100 Subject: [PATCH 34/60] adding unit testing to workflow --- .github/workflows/main.yml | 1 + tests/getInputs.test.js | 0 2 files changed, 1 insertion(+) delete mode 100644 tests/getInputs.test.js diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 87ecd73..59a7cd2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,6 +13,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 - run: npm ci + - run: npm test integ: strategy: fail-fast: false diff --git a/tests/getInputs.test.js b/tests/getInputs.test.js deleted file mode 100644 index e69de29..0000000 From a4a2de2ec493694e20d95d64dcefc2313ce4ae1c Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 12:26:51 +0100 Subject: [PATCH 35/60] Updated README.md & CHANGLOG.md --- .github/dependabot.yml | 2 +- CHANGELOG.md | 16 +++++++++ README.md | 82 +++++++++++++++++++++++++++++++++++++----- cfn-lint.json | 20 ----------- 4 files changed, 90 insertions(+), 30 deletions(-) create mode 100644 CHANGELOG.md delete mode 100644 cfn-lint.json diff --git a/.github/dependabot.yml b/.github/dependabot.yml index e581725..0a8d896 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -12,7 +12,7 @@ updates: interval: "weekly" # Enable version updates for Docker - - package-ecosystem: "docker" + - package-ecosystem: "npm" # Look for a `Dockerfile` in the `root` directory directory: "/" # Check for updates once a week diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..33073df --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,16 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [2.0.0](https://github.com/EliLillyCo/edat-services-github/releases/tag/v2.0.0) + +### Added +- GitHub Action is now written in JavaScript. +- Unit Tests (90% Coverage). +- User can now specify any command they need to run. + +### Removed + +- The default functionality to run a command. diff --git a/README.md b/README.md index 7b2b6e0..382060e 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,13 @@ This Action for [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) enables arbitrary actions for interacting with CloudFormation Linter to validate CloudFormation yaml/json templates against the CloudFormation spec and additional checks. Includes checking valid values for resource properties and best practices. -![screenshot](screenshot.png) +The actions primary purpose is to set the [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) to the runners $PATH so you can access the linter throughout the workflow, and use in a way that suits your application. There is a way to run a [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) command in this workflow though if you like. ## Usage -An example workflow for testing CloudFormation templates for correct properties and their values - run the `cfn-lint` command with the path to the files you want to test as `args`. +There are multiple ways to consume this GitHub Action. +The recommended approach would be to to use this action to add the [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) to the runners $PATH and run commands throughout the rest of the workflow. An example of that can be found below: ```yaml name: Lint CloudFormation Templates @@ -23,16 +24,79 @@ jobs: - name: Checkout uses: actions/checkout@v2 - - name: cfn-lint - uses: docker://ghcr.io/scottbrenner/cfn-lint-action:master + - name: Setup Cloud Formation Linter with Latest Version + uses: scottbrenner/cfn-lint-action@v2 + # Step 3 + - name: Print the Cloud Formation Linter Version & run Linter. + run: | + cfn-lint --version + cfn-lint -t ./template.yml +``` + +Within the `run |` section, you specify the required Cloud Formation Linter commands. + +However, if you would rather run the Cloud Cloud Formation Linter commands within this action. That is also possible. An example of that can be found below: + +```yaml +name: Lint CloudFormation Templates + +on: [push] + +jobs: + cloudformation-linter: + + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Testing with CFN Lint Version & Command + uses: ./ with: - args: "**/*.yaml" + command: cfn-lint -t ./template.yml ``` -See [Basic Usage](https://github.com/aws-cloudformation/cfn-python-lint#basic-usage) for full usage details. +Further, you can configure this action to download a specific version of the [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/), as well as the Python interpreter. See the table below for all the `INPUTS` this action can take. -## License +| Input Name | Input Description | Default Value | Required? | +|------------ |---------------------------------------------------- |----------------------------------------------------------- |----------- | +| version | The Lilly JWT | Latest Version of CFN PyPi Package | false | +| python | Python Version | Defaults to `python` on Windows, and `python3` otherwise. | false | +| command | Cloud Formation Linter Command to Run Afer Install | N/A | false | + +This GitHub Action does not directly output any values. + +## How to use the Cloud Formation Linter? + +See [Cloud Formation Linter Usage](https://github.com/aws-cloudformation/cfn-python-lint#basic-usage) for full usage details. + +## Upgrading from Version 1? + +The main difference between Version 1 and Version 2 is the fact Version 2 by default doesn't run any linting commands. The primary purpose of this action is now to provide the underlying [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) package and enable you to run your commands. To do this, follow the steps below: + +#### Step One + +Change the action in your Workflow to be: + +``` +- name: Setup Cloud Formation Linter with Latest Version + uses: scottbrenner/cfn-lint-action@v2 +``` + +#### Step Two -The Dockerfile and associated scripts and documentation in this project are released under the [MIT License](LICENSE). +Below the above include the following: + +``` +- name: Print the Cloud Formation Linter Version & run Linter. + run: | + cfn-lint --version + cfn-lint -t ./**/*.yaml +``` + +This should give you the same experience as before. + +## License -Container images built with this project include third party materials. See [THIRD_PARTY_NOTICE.md](THIRD_PARTY_NOTICE.md) for details. +Please see the [LICENSE](https://github.com/ScottBrenner/cfn-lint-action/blob/master/LICENSE). diff --git a/cfn-lint.json b/cfn-lint.json deleted file mode 100644 index 98d4fbe..0000000 --- a/cfn-lint.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "problemMatcher": [ - { - "owner": "cfn-lint", - "pattern": [ - { - "regexp": "^([EWI](\\d{4}))\\s(.+)$", - "code": 1, - "message": 3 - }, - { - "regexp": "^(\\S+):(\\d+):(\\d+)$", - "file": 1, - "line": 2, - "column": 3 - } - ] - } - ] -} From f61e3bd80dbeaa00cf9a1b97c41e074fb2413c88 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 12:28:31 +0100 Subject: [PATCH 36/60] Remove one test --- tests/helpers.test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/helpers.test.js b/tests/helpers.test.js index 9618da4..57408e0 100644 --- a/tests/helpers.test.js +++ b/tests/helpers.test.js @@ -31,7 +31,6 @@ describe('helpers Test', () => { jest.spyOn(os, "platform").mockReturnValue('linux'); const res = await mkdirTemp(); expect(res).toMatch(/setup-cfn-lint-/); - expect(res).toMatch("/var/folders/ls/"); }); it('Ensures Exec & IO which get called', async () => { From 45e78bb6cfa3cc109c6ed0772582cad425236f86 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Fri, 16 Apr 2021 12:29:46 +0100 Subject: [PATCH 37/60] Removing Step from README.md --- README.md | 2 +- screenshot.png | Bin 136927 -> 0 bytes 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 screenshot.png diff --git a/README.md b/README.md index 382060e..3ece086 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ jobs: - name: Setup Cloud Formation Linter with Latest Version uses: scottbrenner/cfn-lint-action@v2 - # Step 3 + - name: Print the Cloud Formation Linter Version & run Linter. run: | cfn-lint --version diff --git a/screenshot.png b/screenshot.png deleted file mode 100644 index e7f727ad8da91b7d3e6990b9ba3412ed1715aa5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136927 zcmeFZcUV)~);@|zQ>2L$>4FM~fJzTtkRsB14T92((g{sKL_~@rARVRm-U(5VrqZhf z5~M?b&_W;~$q(6QpL4#uzb*UT=ehs=c%Bu)TCt3^yXtRl@&nSvq<9kU zt&ve=6U)w?E%gg*dYAE@nLPUfoWSqyrr^wHJY!%%$Rq$e6}aB*o>91XrJu3qFoKqo zh)8%@32nE6On&8){PRlEv+r=E+MDu{HL8;StBwEPtPGGdZ#j!#`NFx@CCgC}-TblFHxNJZ}{ID96}Y@_}(c;Iv-T6N>vwLEd!V8$XN*2D_>pea(?Ri zhVPonx09YmDaM`Sav$;UW|8B4_H zWC|JuEQEK{GKHDw5QPYgTD^Va;5h4BNJkI=a4wkt_uT{9ZSOMur27d_RBx13vbc^d=3snJ@$S~$ zclAr_!p>dnTqQIdvE)j@JuxCrMP^?Fbf~$=To6GBR8ufL) z^4(|dTy@sAWU|bnV>Hx;tjAxUSbx*zp<>q-J8<}MgxD_*H+9iGY@@s1nzzz(@?j}M zWu>hNs}G&@$9A5Q6<^d1me{1+eqPR!qOEumtl`nF5{0dQEqvj z$awl5sa(pY7#U^Io8%tyOG=J~bWWjw?0KD#cQIWb`By|mnKB}hJ}$0!)RMU>_~r<% zoZBM?u^WCI7(8>q8o*3n(=~l7l72}>m7{Ni6&y>&%|suwnExo@mI;M%W8eO zEJ^7bE+9#!-FbL$Gw@8?g^Et!Il%+|qZ@cyWVby13W;Z!z?Jw<*B)G7xM)XzgJSIY z#`Ey!BU_GZS6Z)JjC$~qXNX2F=JFSrIg7bFb1HKjb5CuUs?sDCxZgZbFVD5sBaTwN z!EG2X9`BP7`=&e|q=xJPJQAqpm3oz~o)rJBXKcZ8A!k8gfp%|{7Dg9|joPg_uF0+mu(PwXW)Nkl18g$x0mJ|S-u-Jb zqyE|=xlMzTwMC+&u2Qb#8X@?_Y0DRzCYI&p3cerQ zGTfp!8D^G2mt+HE>tSACJ+KoP2TI<FDZcw!s?r-YF}kzZgY;~+an7D4vy zg3sl25kDujJ6^Y5i(X<*Vs#Ufah&Y?#9V)YI(*>ZMODnx)FE4CQ4i5Mmc`44mvN6q z9Y@_=9M)aa?JR68>;u1;^nQ6y{XnSZSyNb3oPYS?!*`v0`+PqO^Kw#EEia?SAJwYA zj~dJ!eiYa1oj{X+b3|<C+@;nf`nqXV#nZNhp+&4omhBrGt3tqMPEOVoO+NtS_4|8^krxw^H+#u%AZdo#za18FrLj-WdhFW16DH@O>A5KwB@n zeh!+F(GBYh=Gf#AqLgRGC(-w$3`lW=-cwdJQ1Mb>QOQ>sSCM;J9rZQF>D5}?epDuF zkjx8Ode)j7OV=mDzAcM;V0jNT-^>3rxG5+uRWH7;o34?5vpk3!@U;Dl7(KER+O08X zPOm^L@ldlJr`-L;Gz#*7TkC$hfyC<5x2nUfxgx!<7cTd&uLZi(ea6ybpi+;;n0astUXJ16ZYs`sUy^peb}wfW{MTJOd8D& zuJTISd-sn_&rXXqfj{c#))i`hr<-^MTFg3*#yee*g>VijJSZ2nI81`;ohf##o|Id9t8hYV|jwvqt3t%jRMomXGvWeJcb zE|*M~6qm>e%?nEtz};vuIE~|@z}+snv{v)G=oj9lIl0U$KmD0-6Wt^b+{4gUh2jE+>8Pi91E*& z3es%oxj26+$X9zN=&;~r)>P_DYQy@&&7vvF{TuuEZO`!miT%z^#3T{|Iedl-#e}~O zPZU)9mY#$+(k-bL%qc?*K38JjP~0F7xs3f5+c6%Ah-Kz9efkbmd$clGHEesfJFgq7 zwUD{8`F`jrdSM}9LQ4}c<`3B4`vJ@emi2!Tv^4o+wkC3bG*j9OMhHZZ!YKurf`mAZ z`j#8QGuko)laGYzEU6o(VPb8FmBc{--f|TS9Et@!6@l2EXmQJhHF|rlX)X$WE-PrD zbb~bN2ik9KehhdXkcdVhjpc8J3~q5Q6V`PxH{xVo`}u9_?&P%09BtY|zJ(Ab_3`iV zjhLvhgsy^2Z5p%+$_j7$l~Z;gcYq9g121||gKrwyJsT2%^R5c<2pORK5&a?gn^j8N z)bzL-CczqK61BtEad0<(@p6{sHqq4KQgZir%q1oyDs+om?mQP4myE|FJAj_D%D<`~|0T=q;N|rMAS~?b z>nr3dBINF2FML}{N=o?F9pO871dmGydiuM0J@gZF^W^!Xkw4o}e(Y)M;rPVM(cO*f zSGx~w+`YYIxw(IJ^zWZPti?1<38l>+`4m1=A^=39{s1w|Eg;GpQ=)~#s9nJe?9qEO&Q@|Blxco{Q=j> z-DAAu&dUh@8+*C)!+N#d$Le5nRMs{){!RQ#H^-X$di=rn$M56sXU^4|I{GLQ5h)O< zD=QlKomrm=c+W5fUMA2?S+J~#KRd4+`cg1z<91K>N0mL2r?l_Cu!=(uUN4ir193&>8SU9&}t{|~=>2x`kcu(Xw0$mfl`}^@7KQ((s6e<%MNV(FL zPJFr?M<;Tm0V{Ivovw6BTCRBBc=t0i@AXf?`B;wBtP?qQ5s9@FztzdF5jmV8CfOm` z5zJ=wJb$_zyYwe=1cTo)UO81Uf(j?bMCxU$b>?(Af=}e=t1uqs{+%72Xd#=F;+HY~ zzcOk$&x)gA@gP%yI>1-_w^mkj>Ni9a^R$ZkRHx`FhUb?JaBivtjY^IOp?%I{s?!xKmF zB(A5@pao42-dh6Nn#VQpBd~WK2ay#i)ubYHwU>j;MNuD~f&>u{b3}dHsc!K1H;)+m z+145Lv*cekRMBw=Jt`yF0sid&RK)Z5Hm(qRVy~+$_ciN^i)p6n%?vkSMKpL!s89F) zQFH&{gubCcJpR_W__3MgJggiu-(g-7&OPvvtAh>|LxS_YB`zfQykU4P&4p0-ku+dNyk~H&80PT z7km=kK3}eSHZ(&acqdUnbmdV&>)Lt2!$pU_U6o*{{Z8V*4kj{F{iox|Lb z2^c0nCM{rq*KHcp|L~Q?Tz61$MteOklh-%)0S&P170ow8(?L_&0PoSHu@Zy*A6DK1 zQs#NQ=4o=m6RGmajuUulfUUK>w_8>z_kqpE^bVeU%B9;sD;9{z*Vhu%?e1w~NNX@L zpDMIf%uABFZKYuo5H~dKy#ARqKJJp2{FSGS=8ZLn;c ze*Ys7?K)zPs8`>3HCBOa7!_~Mc>KG0&82-}c(s-V#Ybns`xBNo#xuY499TCb;1}5v zy%4mev*rnuPh?rt)=75gA%yf7!6IyA#t?!ul{tXdNS!a0x zE!T}U1x6MkyAT`gRjGbQAlXKLLl0zcc!6`@G5hp`XimU=a716FH;5$LW(+9`x_14F85l)DrBD@in(>h-(bT(b$HTdDz*3O)*RTilx1Jt;U4aiqc5xD#8JwVdKTyLmYCx=BG zrUdXAG^G%{agoYgPT0up7(rqic3B0bxH?_v*rHiAV(by?eXW$TrW}ogZ)2S0qm}S} zH6bjpUx=l!0Zr09b1N`K1%*Oow5b@*j z4NuOSlFe7^$157vXNd$GgGxb|0YG4zRYHir{*E`1y)S!7aOW6kHN3Oe^Tw(-B&HU* z%=A#7grtIz!s!0Bh_ho&Yh#a0uN9blk^@joeoN9CIzZzhFWwieMG$${OgOzm3XSXr z7_F|4FgbMPMMYki4g({BE~DDmm_g1X)Y$^3nO3^jZ_%;`(Z7k~s4o6m&Ig*#ju{1i zOom~cT?h&N%!O}laSMXW+>=#wq>UV?PhMd#uh63;xP0N$kYG8Z*+;C3@;#i2K=UH8 zir{P^I6zaj1%L~(Pg&~Id;s4hTQs_RpDUzR6N#U%y0L1*Dgnvg)_xE}Iy}S`@~zmg zSZ@DP;^f|5Z`>HfW7AdK0~WnV?y#?2P%@eZnvvp+F7YNDG_CFIh{goS(-kvmj(N@p zIQ8S^ZE{8umMzRbL_nC!I;+mVaN0bG+V=7PCY~Bp9b*?FUB5vlSfh)=&l6V}ivK*i zAK+m90zIhk^O3ACg3JDSNFWUwE(T#Kg}O5OAw`BbUv!I2gQQaC|Qaszi~0M71>L)cN&WJkYJ15R#b#I>nF$$7oz^xq*eYqg6YXE{fr4& z;ZQH+YDeuS;C2Vlse}D2?i!x^?-vdt;(wtIK0CHKG?nO%(3cKVkn^p-4oyJ3kuIa( zYtHF3G%u@`7aTfhV7&hIK9h1mh21x#AQ7R4=^0IJ(G*fkYmDRkf-4Bc>&Bkr)_W6v zt}ZUKaCwt0RcthN%!Ox@oL6Oun7|kL za!gQ~R!EUVM%yKh51i(CuacJ>_sn7Db3BUvE;V&Q^`tuiE+2Y`57VkicEoEw8KmjK zOQ7z+QVK$rYlY)hMSfROmsRxxTMX~Vkmc4^@dtz<3o6Oa@@i8%>z888mt&rDS}%>z zFEN+}B3G1kvfKdJ*@M?`AJ!e%O4^vuPB zvNH&^i7*FeY=z6%M(T3J2xE_Mr2;IZz@N6KfU+)6Y(Qu{OQ3k{FgM!kN5mV)(UKCw zHpl4t5Jmw>Bkjc{d$Eo1gC1Xb6B?DbS2DMfr7hE;R)~Q%>D7JXy+qGO9RXKb$!$P zr@{wNCWm7Aj8@N#F6#R1V1-Ao@sTC92V*EB9SJHh$YDn@(r}mD`75vDVUAWtX*4GD zLng1c5v!a2nG5jWWHGbxCt+Bm^vq|cjWR&txT|@|ET3?1v0)#RVe!ENry2T#gg6YF zo=YjbRwiCHr*Q;*ejLYkefAE6)siyC4&jVn>q6*Tvtfsmdusw&nK_r!==DEKr-fCd z5Fc(~tO6v#Hz@;wVJ1eL!xY8rQd$z0pH=^i;FQ*IIZP8Kp2=3H~g$*b};CmXxaU3^Alut~DsV zH(JEvb(g%CwQ8nZZ3Z%=KhvxncA#9h888UuA5}#)tI0;Yj@D~Bwgu0GgJ1#f{#|rC ziYA$SLi1U#CYYS|Lb~AVn;Txi6IE-ztudQM=7zz0wM(6_E1V>V&lHE*v5zJ<dZ1qIfb(K2X>CVgYGMFwS#G zmm2`9AW&u@eY3aT8J>Ce_xZT5D2J;+-t^4C#q(4EsYs8F_eJP#_~-KWb07>{NZ;Q6 zop+}O%@lS#t062*XIen)eYISxoM(*IpzGtAkeQjaiLoD0e>mt)u2!bDj_Mtk0hS(e zBpCRlMY9IEw4s%_3IS~Fss1d0>u$b7(L*42l^`h(yI0m0{H16(mC?PA{jpC%-+7eWKWtOA4&Mxxuw0RMes5>subS+zvvrxp%SqMH1*8qZ;x^3K%#p61D*n6!yoJ)q3RcB~ z?W;M9+OZ)%6}>F-dx5C+M~W!ClcAAe@f>HG;bEP=0m#GYd1h(Hl-{u8$LoZK&^4n; zmBfIrhE{F}47%2Fe?Du_ix6QehOPc)Fx4SYV>V_uR?G+gxRIDKRsq?~R@!Mz_tbos zyshn;XC&AVNuniruONL=)3sEV9jcz#@)fnu$>h{!hddK@bCG?zFe_8;ZpfAZ^8sa9 zn#6Z2#!tUZbsQQ`;=+yqx@%m6)1)_7Pz6~7K?`*v9k(dOiBs>;wrqGgJegkZZ;`uErnt&JZB`R zrf4-;Xmmrovl%PZQX&xsE~tCh+A5e(QB{wwuK%U{oTEY{&Cig z2GX-qab}c*K~Rw3;f#&o>vZGR&5JRzA;n!5E3YklSqyRNDM>P@XN;Ttp5q{32X$2p z_D1b+KVr3SK%lvy0e57Dc3u<1*|c=w)iaYboRj#M!q2X!Wh~DDt#Tsz9}xF$sL~8l z;ks6;ujDDNWKFMx9NrZs3~;V=$KeF)=aLSES9zD&5$+4Wr4k0YPVgf0=Au@a6}VD4 zknbt4<67V}@`1^eE7*WO!@EwxwbeLo%wSU2)g$m&`{O1-u)Xan5$DH=b z358OT^Toc##TX4Je9ckcny|Q+eOI=>biDfTzVk@(Imq~uaU7s+vZi}5dNiqN4H4R3 z{yQZmpO~U$(DRMol=?FS^#6lU8FG~*`CZ=g2d|ecbTZy%34XA{bL+VB58(4Y;f*K8R3~Hql6+o9 zInj(vGgai@_y4EPDMqjTf)8lS`B3^FXollNGyYzz)QW$~_V?l!YMjuj<#O#l|3EV` zCz{z^5oZfK9X_4^YuNu2(*G}p-PZ4>U*(@+lsvIESr05Un;ETe*RFFkTzv)nrwNRa9jItqW#1+<06;+9g@MmF`qRX)*z^gRXS&U1Cg zn2@=BnJf8L=QnNup308~6bSkhz{)uaPx4#W;muF?e~VZsBln57$`>$p-Yqt+dl=VH zR3O9__=?&s1Xuw^SN-bgjPsn~Nl(*rXxE|RXl}KxG%v|vQ_$0JSPr4(qWs&bC)s|2 zrhfC56(t=0G6Ff=KxR?MagX%;`0-xcGqLSgpE40cUq)l}15u2!egsKbWTKI%A{yxT zs+JJ_> z95c{r2%PW_*D{REnM<2dz^5w~l<-x-q~2G=2p#V|VUl6P_1xyuJnYz*1VaOJfkU1JLX~h(&3ag>@r z>TlF&^FLM{sTjflAmMg<8=JuK!p_Ury&^Dp?3l*<>op(CcVvBqv9pJ?=!zFjYLWGWKU>PGm&>IwXa?H(|M2>sls%ClreMH)}6Mel>XfBIsJ4^~96mFNHB zQvZ8B<#In+%9WRk4Db0j6}QQl@u#F~Y6DI2#>bmxDBkoP;WdjVI3A6n#>R^SJT58+*B4_hisKZJtyN-PK^pPL=i8iL?k={NC{R}udfpKRR|U+1}|6VL#ukbq$)_hqe?F90m>Mfn;o zd)<;2Yd+r78d7JiP~eT1C%h(2#elzHXGKQiHMo$m@jz>yg#gA;_MR4=1>RtS6cx@c z?Si1S*lz;XgpA?cUfp6~ImsMW|j+#e^$H-=N@E$LDf&1R$>ts9oqyxQnoJ-T!IJd0vNK6u_n4kZP6r zWjF^M=G|;$A@Rwlbo6b2@I-4kO!2HJwqV2%^cp=wFmTug=hWS*4>}Ac3z+(&y03#oL7b450y_4M$R+Hm~;pMo8vX5o?!^i zc`!gA%!|2eA7#HDS>pUxLaz3%EEF=>?BAh$6&b$u`>mS)O39xoa9M{Qjbghy@9yn- z9-{J4~z*o_MXiwdq39#;7@7okkX+I*m1l z9Ha$LAzyLD6UGh7%mHBvF!aygr-l?KQFF{-4BxRiza?hu8K_YRjw)jYEfH(74U07K zBa&wp&6>P2?OX!HTA@QqVuy28ETa%lzaW<)Gv{E4@-DvhmRw$tN8A~ffFx_%C8{ z8J@U~I^#;R-_G)rrm{bufJn8eeCgl0%ipIr@i$JwtSJGL@Y9otLF*GQOXkac{`5?i zR*m5ogR8y4P-`ZF29P@cgTgE~PfTQ1OZm+2wEZt+i%t|%1P&AX2ZgB^PtN5$;r&STTQ72A z5TOR46@gsvX4gmqhJOMH*Pue^S>Sq1;vn`G)g^cDt=Z4Q=5%wG_$5{Cwc zuk!yDoWDTA74ykhE?(Y3n>)9OvGnuH2c?{ zhmR>2&ip3Khy|t5>F1OvYX2aa7)LXt7*2&R`|yO%k;sCnX`CubDC5-=org7x6r7%a zi*laKn57X`$8*13EPt8EVAx5-Yp&zFbUGxVODBhz;DI0>!PDoL*&kc*lxzLz=TDa- z@I;O@ZTH-3r&_84!V=Zk?}n8oR$S zRX=pQ`_gKoPzFoc?O!8`8BgIm{T!d<#)=d1 zi=%JJGA{l)i5U){B|n|&6x6hy!O++gc!5^=sQ_ZXj*_0x&3|<({|`ybQi(zX7hZuz zNJp1POtiU6n-{7}$Ef{&`u;PGXZs(AysG8op@AgN@15#*h(cSBCmN3n$qpSYCH3TJ6ozc!6 z%~Vq}%?Vlp8z0(bG~_SRl-z(9qU(){zx4)r>DgmUIw~H%kQ?6$i_5;qvJLa&>rch5 zf6&RN{@)#fBR%3mCnUaB`YpQ}``eOAUm1S657o=Uj~L8KJg$({7I4)n@`Rr^E)`=I!j3giod`KK?bhzjx&SO-zG23N*{v6y&5^P z8cA9`lFQv}M!{IU^>XBD-`0;ag74^aIuG$~q+86xSTn-Xww$-H%W}}?-!H}d@8%Y% z_=#o#N4Gh&*qmwr$02SAPi(x7k5i-TiB!BpiuiH&FfjJq#MHCADRwjbBoC;n^t#5C zdo01YII-L~5fA9T9CsKmB^$Cv0Y=&1V#Y%@lu!5U0{iek)qJTBT{0k$3zH-7I zKAOtXm~Ypz1joG`52kykKb>P>AB>PR3~Dw+md@}=7%ro=y#FNMqM~fH(D{#c>2fe-arLb@FU{~jLSK?A5%_)ZN}ldyYGgpHC?l+J(Y|k zc`k!}RpTI7l?lK3xt991*#{yw)p$=D-K9#-PXl0E}dg4 zTi+?;G(W`J=B!elj~*>kjoVu`vfY@pe2hFJY*3}I)sq!V&KEt$i`G-kg-iZiF7xIthdeb zmfSXF@;qb+k<|CaX~wdu8x{>S>&%eu!VLBA#N4PTj6zj}QFj;l_C7_WW_;SH3GdP# zdU=sx5!T#nV%Zz#+edJ8-C_qjHxHGs!Vbg)*QZ9lr{faH0l-#Ip_(?cMf4b^0m?6k zuk&f)$k=;12d*@juOKup$lFVgj3gL*L`RZs#w0?GtMwl|v?c2c_v#-SO0Aos3f zGhXa#JLa~uv!N$Ln(#iYO6bkO7k$#D?p@#b*QYImKqMkwjd=o7Mrl87=j~xZJywc? zCV+#rG6#~e7xf}l(xWWC##ODk6|Rr(*H z(0?N3Sgtej@o3dX)#RLlIrq47blmZkYz(eZ;dGhKbuMRKt#BFys`RKHFkj(36Lr(> z{31_FCnJq1vwK|=^1Bdt?mBLvbbeTjzs(Ivrr8wmMswLUi=#sfv2>>DiRdL6%co7n z_}T~V!7PILEx~?J$&AbAKwxn3SHj0b&m@O%k;iQzUT}@>wPwm;NOw!%#`!+eJ&#sd z{Fx|7P^4wa?Qjgq71w%&Hm4E}FrrGikRNr~KjC_M@{i9M0DxYZU^8;FeCUO75@N{S zm^W;F3zo+O%tO3*_kzPR+6lqB0s_ ztH`vyFVQZ{95bvb-UkU-6+zvu*gDI=TK8y(8{8z;S24>RVA)BPGm1X&>w(wW^%vP4 zfM!Qfsf4Wrv#cfjbRE*#(swMP*Vvf^lHe6_ufjc$6aD_d@e7~e;FSEEFM$=F-I_yV zc^h{jy}HJGW6|1WFOMME3QFY=r4EhtpnV#dx1a$BsQEmvRmli|oaSLJWFTLfY5eav zCDo*7oR!$)MOF$Vj^AGa5e`;B?msB!v;3SKT}GbOV8rh89luKU=KAp#damjBYwzUW zJ#1waR|k6|z_#9c@tV0(XDQ#h)H)cJQSk{@>b{EF>!r$^4nIG|Shz$f@np@-dz!g8 z$7%N)<1^41n-R<7!uQ#Aioa*41pQ8!*;^S4G;hC+6H9laQ3Ce+=W$I)XoBIfJjXy<0&jN_T7w z=sd5P3bUtN0M;tBl~@w8{3qo1pJLwEG^{t24Z2IOuWYUb%U7ZvJA3BC1AH|ru}WE! zvOQ}-lN_{@YaHx2t6ao&Z9RBD9&^DJC9!;fo_^|UGK-Msdeij%9agjVNgta$*I^n} z`Modsb|p*GhbAk&iBrjaa~w650WKq{k5$!uL$p?RZ;ZW5F)m7zeLtV+>C}4}lj}ci z&%xwtHy zsT0>tm0$_}eh9W5p+mx&&En)*Z*mMz?$b5Qlqt^GsAm{dnbF(b)Tn=$t;r-mSISXE zYrniSCO!p|FIOK)xYxTAi;<&R5ZX&&TeobU?*W zR#%=_$61c3hC7>0ye1Ad-z&0gNWpsx3}%;mZk^vKUyVbxs2~MaZRi+c#NwaK7RyN2O$NrL3~Y z!#nZ)M)u?ISoTIwR6;7|Q6P7)J7eTIg6(sRUxiwwV=p{#e*)9T8U+v}$$EUnFHj{y z%{*?^J!d5n$_EOFcrl}G2gO~*r$slcTeP^pel;Vp@7(eATI#OF+)#oJ9~=J&HC1fF zSBchgsW@;vTZ-%!hM#4ooAXCoJBK(($|wap*sUsHk7!$-tGVEXQW*zgHV#JDsyxlD zmy;%awo&_)u^|l+#>j)Jo5ObGdtM zTb*{_=#g*hj|;CvgQu=$*i{Uv1*gM96yds{l_~db@p~Z&%dxcx|4dv+cD)`_2wTU2 z#=dN5=(Bo?&=wj}A7^Td0F4c&!{Y5dCY88n{fhn=AR+iacQelq==4*YbNeAyy?DW`EgzaVhwFNc0Uo* zeg}Xr`JXs5{djRx_ZUU5=WB94t&uet=GoR!|ERd=esg#)Z=0(TY1pvVd<@K6Uwhz+ zb46;S&~|ZDcE-S)xWmc^c0|B@!OSIU4KV)pZ#dq}*bnaGxG`3;DFf>YIabzBkz5L7EPl*4*)n!1;dS_=}qrK(~>x zZcdA*A?9xELn$h`_Yq3yYnXWH-Mg)A#Z=$KR;&C{Ho?-kAaVT?)4%&)4s24y!Cc5= z?#UxxWD9n@A^*fz-fAn;Ekj-t+~RKgeA~*OWT(71=+`N`;}C(d3){juth=KXZ|Z`i z%G!iTOuIjb4Vkh2LM0K_5w7!%Dn%SDX8vUA992OwcGS1lO5M)j1J)lIror(QHbI*R%)$; zP#wNYUIp)c(KHqvS8Q~EgDPmrhE_T8nZ3HI)%@_B_MdQC)@|8V<3N(4mVp=c_RxS8 z`UxaQOK`;I_=+#OIieuS2Yn$w-)9OzvcpT=GGu46vdLisXD6p5vxgmJ08|~xg?@gz zWr7@a7b8LB{bVeqi6TM3UQ^&}p`ZDJmeWQ06do>%FZM@N(T(>SlPdQMJ$`x;|LX=C z_~cIivZsP~Z>qU(d4=TYLcKjUHQ1~&Rs#2)S zWBR;i$C+w} zul!5M-%y#K-U!T+Z#9wZthOI`*~8xP%;PW=3qes|fX5`f+N0aaw_x%MgAqI88z@=v z4ezgoI*@BkII6HWqCd?_UvjZMRm!(cwSg9up@p`$3cxXmungwU9IxA`R0hToSBQB> zsmAmGUtuDgS;SJca*+|u1JL|hA#60P_RS7wB2wpY6F1cW`3jTb;GE&C;ATs|e)fY7 z-wN5vCO*_zQuzW4XYG(|KfmzB6^!a;?a&u}`kW}&w|)V@7Ra^ji8R?GPl8PQW7Yi! zH_1ZH>u06>@orp87Sg`YU39c(s6V%DyN7Bt4v--_mM@jk}K9E0uBhUD;qg} zS%PN|O8NDHgvi}iQXiL{56?fzItPih)b7U^f^2ar$MkMa@qplDJvNLGz4Mg{7zvol zYDftoD+)xM#c+pmYtLoYijIgI6?7Oy=3VVr5DL?-K%Fe zalA?arhmguQn0BX`v;(LTF%2(rsj~!rwOg7&1Icqw-9vf7Mf4of@E|``*Ds~4MHX^4pDz#oC&IhT&LJ-6QIq|wnLR9M9)8EN z#Tu*+VSnowRBcfZ(<`@`?&$%!2|VwT^eS@geIECF)6Z!Dd2gd=>wrd_X|blu`3ngf zajw0!a(uUc*eeBzOlEGH&!&I|o~S|!q{W+s{M-Zf>+MQL1VsEfKER*r+a+N&cTBpu z^n=L18bj5vk9*0fKQ7M;M^=PG$yrCfR|sMzRMw!E@WLRP|HIyUe>J&n-Q&lKiinDW zf{2QOs1&717g11Y(mRMqFF~r55b2^65d;AtAiahj34};dI-v&$BvL~Qp(cV{ajLC z&k8+=5hNmew~+`+ya(oXc52bDl*;IPfu{SnGZ>q-oMa28Yv^v4ab*4i{VC22IyO=- zHYB#`k_5b^us`3@RRE5!j)y~ps||!`S;EK+N5{&w3431~$GXp_;3G06wGWjul?#UH z^CyUfRWCntOXr(t$u^hB_#bUNCHdmmeLOB%q%Gwbf={B$KdXJ~xneBBlf1wj^d+c1 za|yX77471^{~YM;PCb~p(yLgqtD4d#vLID|dkQtujRjj&>1Mfyn`Mb=%9|6h)jF2p zSGb3_f^u4v)5C-NUtBtK>`-cH&(WRd?4ETfnIn?!g)Isr1uVkDG6@zjf+tYBe5u>w z*7Xt+LG>N0sRN@5cZv9)`ywkznHm@3WFZt;06B-*DvB#Io^aJ4lHo&HBfR!ta?WPk z{#1#>;JQAXYJkNKa{5}ZxOL>_;0^EN9&2;Mi9_U+g}%!)lJHhnbBthh?^G=kCJ`4R z`A+c_Idn@N9A*YP8tmK5ac7t7++iZcs~d=i>qK#8iCjAStDLZoQAeF2JU6tw9$i|7 zphjv)KaCq9e(G+?7x|HZEH+xK)aUzaA9s489$#GCz;0}Y+Nxg{nukqr_+yu|LvK|2 zHQnZR*yxNLDa*$;VJ`b!f})H@JJ?K;mK@0r?*;mWH8svcx8FQdrMk0L=Q7w0J93Jl zRSSYHGQij+%pUGx2*L_mazVE zjCpFr0?{+hJfk@e{*b(ux~ioIaM4Hp=HV;<Y zcQ~aK42mXk9ptrdtQy8C-kl6nYx~x+e|&L?`#ZS5F7s~HZN*C@WCb-k$;yi4c!C7C z;BnqEq&Zo?q@=NX85t7}ikJzP&KC(2Gbl@`z3xbFWk0CZVY>yhCSu0xF$ExS<|I$WClLeIBcu2%=A-xwR?^lh zH){y`zBLy)F$!)%4TaoaaP}SRFM6#tlT(Aa zCcreA(V>BY4~||X0opoHQ&0!_{XmxL#$;#c=rh%9UeKODP^bnyy3c2lK~10)e#l^d@QQGWISW$UE(5|G5lqS{m%GHd#ItkqTL5-nl*^Y+rt}U zDY;-9j0nF!p3b6JTQ^l6^?I{f1qcSe{&(ylj9zA1f5<~G^L0{kah3V|vmMeNbx;ZX&jB-E+ z7)G^vdd{d~6Ht9tcli0S*TUm@#BqrmkSEV|>x&dRSDV_8PZ;%Z5~OXUq0b1za5apO zArHB|Qr@Vj|3^9`G8a z&Ldn(o64TR2*$(AbLKTmqV*<8xWnN**UQ|K+%Sz>$5~n|z8J;T z$JIeyDWQ&xMQMY`xm{o56n;MGohyP_vE6h;tL%Tt9PA?(*hQ(!IPv@ zNsV`pDEBd$B`G1Fak|6oV7L_J-NGolM0tF*Vn?D-uQ6la>zhmaURRvvy~>-Rj;T+a zQ^7C7go-J4Q^|VCjHMeXJ2=`IqxYf$7pL#;Q@cJ_Fj64pEziysI?o*|A+{-zwf#bd z6k~3bM@t(&r?9ZKo4gXtJeZkRm5T8*UfXhWeiOQin|1vZe>~($gPR-p1!K*d-RLzT z>T;DP7KiX%a!u_;K9wm>vt7&MH-EZ=XHj()BXdRc4(pRyVLT=M(ZYT8XoaC#h-t}; zBU=UY*NGaFdmDZmh*WV?jG2G(D7>U^$XnlT*?rgQa_p&^zW~sdbR+y(%k*EdTQ8I} z#Lw(8dTzmj{H*CrN`Rb1aUF4t5TwQFsl~(1D?>ohA8MMMBQZ)QMFp~=?`sUjb|e-H zJ2p1mbka<*e3sKCa?9o}S+R+Y&^v}k%zWlzfNKPTeH)g2L_v2- z&QxTs;3Xn!Ab_Fgw}FESMrxAJa>b_k8(!^~YDPBj*@SPBK+a5@+{>Afpf0gR<#N^s%M}rsTfZ_GUnu*_ z3A5vsf5VF|x+pck9}ij(!8u+ByjX5~BL0^KUm?pni~CB^n;m&1{F=8@JV9qwD{UmE zDnEo&uLZs(Mo}11aq;y#)S&UCRkuu00a|wb{1d8m*zV|DXOe_;MURn@9=SYb;thjqtuRlLa$;Q86KSRnBw5rqA3}{g@y?;Owo`*f=oVN*iCI|hkEHwcYKw8# zq@5$luvD*ZoyEI^5(&}o=)P{X*rLn1!k*QlRsu-@nMp%Thh{jQkKQ^ZA=)yUevYQU z=e>9vwLsBFQI>d}PM{vB~uX1G4A2}SW;6&c>PELrwR^a@X_T>tzVtO(=eBhc9$!dNXo#HIU z`0SCny_knioL@hi@Z)UM-3!}-Wk{uo+{B-_1uh{G)sPOKc z1@h~tvCj^fW=O4X081!R8_x57``QxbiJ#<_D7j?4vcYQb1agZ<^Du7-y~!zl@>^`v zCL3%3RWy7vSfCZ|ZQ4EIu?!F-%W= zHJZM|!nImIFbR9qdRA7X7mF*Fm)LdLH0&bB46bkN9P$;P>> zwE2&v^t1+YX;Y{@c(3Q?L0{-8bX}-7FXO;K7g)Oyq?3SRk{?gMrYWC9 zMwroqwWQ$&B7GA2kx@4S29(eGO%cL}n@%_BTueAZO>`0?7Ofum089XJP|lI(GVNdS z1WGZZdeQ#-P*qSR)3L@1qh^Q+E|T@sLoROl$+xOSurPc~>MeMh#e$RVkF~mV55%Dg z@mRcF>2C8oqPOVPo!Zs6%r?PunKH{reg4_It@uTz7)E<7ev5A+T&J$Q15;nL{VvGp zV4Wu}*Rk!7sIUH|8qDh7p~zyU>QU0>#1_djWIXrq!)2Wmefcj&=#c||$Sp~}tYD-Z z*}u&e9yRDGS1c^#uL!+r`*p=wC+jjMdT^zF!tqmnjE{S+Ruy*3M_Uyj^Dk(+_Y(9<_=bgKM$7d)~{(w|x6C1erm9rD%10^4O5R z-crxdnpuLVkIs-mzGs>GHSo^M8)|HCr}dvl`{@xe8ii5CaRI=nb;xc@`gv;g*(2vic~sw0>df&=irmIPF4k@8|Ae9IcK9)q5)d zkG4n|Vp(D>TeJ}(#uW6`kKXqbXeas-25>eAoi$D)+9(HmeyNtQwy4}ZBH0@C?m$&_ zzZRLRttYpDywq3!il9TAR9?m!VL1-2Ex+0PDP67qk`OHr=rMF9j?1yq4;@e?bp1^# zq=ZsCJQ3bh^kW%aJ4LY_kxOq2fcZ%dJ6>e}eo_Cr{Gzcs>Wij!r0_4uus`;PYkp&% zLFSWSHFq|v#?=RJ0OixIf2^p1yr!4HmmncfT~U{SD4dy?Y78t2edEq#b**@wiIu$3 zK%{1B&aVXABUymCU**vrnBsa7>8yPCzs~Wf}+*L zA&)qfe(iei0=l2&-LC!H(`Z#YY4g6l_a}qae=KCgB4bw8?Q^_}f|2SvJRnPu z`X>o}u(Vh|x$hS)pnHD=Dgh18JeGSpa_O5rpPOql^MzrP{Bes5Pic)BH*U#JYUcW+ z-6IMiX+z4~JpuVjnyJ0;@N}27#J9g}i3kT~lgfWl|E~%7e-c3dwO#+u)%aH*!+-ta z|3PN_|6iy?fBVjK@zp&|xy|^YVw2p3g#{(w!_K3Xz4N)ylA9%8@59Hvu$PNd+W(&+ z>_7kRfAm63A2HrpX=3%9`DoyNvi)^Th|vkvEO$u14gtH#Xx69 za|&Q)cRMJU<~d~4#TQ8#se8Jc>Wy3F*#6x}%s-DEi_1WNL+kgw^m^g)JDk{N9G`l7 zew7NhXZ*2a#|BEwWIUIKwTM`F449IWLK*VIA~l_X;baaD9zVbBBjQmOG%``g+B&sN?uX8m&^DnVA_aw|>{&-d+i&dC?Wf%d+)v7j_w2CIS!c zUAZ26^v(#!32@<;W*tMHonKU3ur48pT3ey7r|j6&b)r59)D+n24S-^f-d zHU6Hhdy1p_%bPjRz}w|Fjz!VaQ$Q=cJl`pXl~HJf@RkQTdfW(fTAHt zr4zEV+LCla5DVqD{69t~194Js3Y_jZI^TQBJ>yn~FP;8~{wm5q07!|#rYU=Sixk49 zaYXqCVRrU#<|MY-nG2wGo(y51;SMiIe1;Vj4I~JfRC*DOkz14RjFG-oPIo~a7+dBU zE@Pbh_;v-$zmnyDN}zjxXPg5x^?2itOv}AzFHaVD52sWpg`ZgH%YGLvM>b6LUC5W7 z&x-RHd)aabyA;5JBuKcz8xY**Q2}&c&0%5b5XMt9$*5GFQ zUop{tW2&A=;A>yBQED1#c1e+NKE}SjzRs4Cyy3lVM6ezQ{mg`*sq{p8heu!?GO^gW z>H|{p;lqcVBG2xfZ032{e5#yx%K0em2M)wljTsm?$U8%9eZ|!&Y*BB@*dZtcZ_g|) zEClu7P&`m9V5EIzOi8Lo{BV z5hEnQ{J!cEETnGEm2Zt2CGRxtqwXKy&e2N3d#R_6i1VvR6(5dcx z`*K5Lz`+xCf1;p&ZK8j}j`uo%PAJNJ;A`A%PkzP9lb1%=IxmA%F$_8hf+^4|462!R z=3-Q!_irO^6r0rRcIX!wjBx2`yDYVGOV2FcUEkj*z|U^Ol8&KU7j>gnlU6+5^|pQ(dc*s>cl&LcM?M7VE91#IPzNw6=#&p*eT$<$ zzCXi5+cv>9PmL^Py`)s^Fe9J*HLj4%xODp()a$dQjpZNH*xfA$Q%eo_Y$%7S5yo< zA-Bzr+l0+dQMBEBU$*a5 zl%zIdgd@;@B+lJ~JZvw}vL<;(^VXoS(8VuxV!Q!~V|^;uD0lsiCw-~%j(!t8G_IHZ zM8;t_z_?1wrB*D%t&8vD2KTAMb)h-XL*@!)7aJjqo$|<3u$Uohorn&y&x2=q;A?iW zdQ2V#4tu;TwnGiQA-MZu@YaV^Ym*hZpz6$xrO~7IB&F&SPI~HjAG4Z5i5e4)+7tPT ztK{zsK0nU3NqAYV1)W9Ym7ZVaMZ#a7ZF$iLM%#Hnspcp0dzCnj_k^&NIi~D*Phm1M z0&MWBHu#oFA(m~VSb~WBD8Ak`OAJN-;icmD>jgh)2lN!y5tJ{H0xRF^Nxp|$FE}6Z z1X7w~^P5wO=OCT8TUx6HZr<$w5yiFHeiL@k9Z8w%RkENj7+9CPI z%L!*4FHlcdITNgBB#xaQo5MQV)cdn6tP2E{4P-Ab-JB4hQa>_xjU;m@=_he0Eu@ZK z;w+FP;}F748_9QDB3nuQ{@Tl+!po@dvod$&ep$|4di@%>!GjcdveoaB;EO?)X>64v zzf2H4UPq%hPb)L1W=h6m?qsB^MU9)a2!U2^-LbJ;OIr9D%sQmV#C;~x1Dy621l8VgouGv>mPtzTVcRkmYI}$*K864I60+hl~>6xvPSfQE2 ze&iIji8Q>+o1@dDowdVjv2N4RcEUQzJAq)+0lxR}2DhcS+t*9-d&&tzdD`5% zJ&@PO7PwBP&8;wRW46u2r$<EYZbs=6&xfoesN9ZQ2zznrm;I#dH!C#F`ZLiR(VOB# z9>)#t+_?sRg+`82CPLa-JmRTjK;h+QP?7ie#K>h*Z{349vSh7rj3)ly4vv5CAA5i1 z(tAzqX7;~M>xIK>5|S{|=uGAQ#|pM93*&DAPwUS|kH?fO3bflDZW zGe%+rjXfNyCsOJ?47S8KT{Hl>l6++Y%JXau9K<#f`%Mq1+%$8YOrx_B#XYuUu_gt*4nabH7vL^*Vh ztrQgMnUfk82EPwP!bWpAB=iJw0q6I2zkqR~?Cg;)>LMlH_Q&Rse|80x{fEjx?Y?wp z?0c=6UHO1Esu{NP$TCZtdk0a<5L}x(Q~?{QQ&g2mU|P?@49w(_-tTLFC)uG}j;k*% zoo=(;fU3{TKI!D=H{ee-&YC#Db-H#Hm z-=W}To?Y6-erQv~NG>10W|M{}n9A>n@lLXxZi6fctUG~V%K@j*Vg&ZjL`ISvOR@M42&LzZl@-1dZi97Hp}0bTQYmq zlk4-v(ZFu(5T+Rdzvlb1mvmlyJw?3b#vHCDZE@1^cL#$80GT!8{({Udm+-aTAo@zU z!twp?GAea~svrUwLaf4U09pPp?{K29g%DS|W>4ke}j@6DGK_w7KFpwZG7E9NshEbqL^x8J1ZvT@_V$0OZU-(?{;et z?m4tT|JCC4jV1)mvtFl9t`GnIrLkD%gF~C$JQqhgjPiSTRGH>Rvm?}VP>?eYjqsLG zVevDG4pW;-r&+WaLwa)=*dGp!a+Y~%qjse^f}aXVXMXf=iczFId2}vc4uGgP7H)HV zT35T+Sd-Wty|^o-N?>T_S6uUa**W0D3317wgc4S|1d_d7J}O5?h2qSuDvYzFG&L{+ zyA`Gt>gyoHm9-$nh5Ej%q!_!6^EeOYc}|<*>ZRz|+3#oHX??NnsyyLiWPajE?beIH zouP1;i2IQ634}Y;NQ&Y%JP?YQcLZ)%p-F~^dnSYdn5D8;>4UKL7V3Piz5i`GSi`x6 z{daG6Z{(}yhkw0Ug=gRXFbmk8QG6EAdO5r`AqyV3wJ=yH?nhoqcS5pE5kIe}Zx8#- z5bIXG;{6{#ek=m5av9z#}CK*p1I>*|+C+#QRe)y6OOZ_m#k*be)g!ZYc| zJ1v@;0=Y3Vt45)%P}EWK?Yi8b-j^-hqk<<*yo-9agP(ku@Pl;_K1ofjt6K**XjmVZ zs&4<9%}jTcuy??pN>1IpG?Cc9>tbFqXNh|wLW>fm$z2Ti=w<(@2365XuL|5znqsnR zw2H8KIGdcSQX+LcpUt^^2l-Xk5q2VYVqmvoDP_mubDEjK^8(?k^0ODZI#}2~2uofC zyg4#H4Wfwat3mgveDm;Rj!QNhLVet`So1{m9g5>Us+WLCW>{3J5)SObOUv02(mruv zOm~P$%+;Idh*9g4KQts;&LFcj;ZgyzVjszDV601ac9}U+{gOlC&F~IN>Ga1 zI9iVKIe=1&KV-eQ2Z0aHsn^Jw{J@3nR9~oP*(I(nUD$|t8UUbM#O9Dm@J~Dd$|4!l zf&OAU6@>AgKEg;zFKZDSfQ~w1<`N;s87?(5$#M$P+5ubNGY8c5W+C8>cM-hLGb89H zU$&kprqbV}_xS#pGAPk%OV{e2quX5v{A@eBW6$~n2w^D!JQMYyoZxLqwe3yL;(Bm` z`-w94rp`xeMmgH|tP}(Y<noJ07!r{z|07g3<(9O>+BE;04{uQ(_A{zBXh2)~_D#hmOpaRk~dM{bO` zTyc5?!w^hL^)>Ua$f3V@b4=RvX|@230ng_Z7vH|~Fk@C$PBYh#ir`%T5}R}--2thb zdKPj!t4G)VYm1tw<&&SP&hc0QG9$t(>UUJkk{_@s(Vza>lo8uF=cg_zCD?no!?O}s z;qJDi;W8zO>%xM99|aAdpV;aJ5)+T?YRYfFpfA}fFh?gQCUS(Vd5P7r?B;4hFGj}0 zN=o#dor&^Cr^ox&)oV`F#_;$8z2Gk(0e9_`>p`DiYOF0z2jPXbA6l`0$#6vy*h!-- z5=1`9u?^ZA;`7-7b9oKqjKKl_r^TOtsQ(`Kzn+AMS#pomIoJ^AVbNgDgg=XnQJ^(fQavd(~UP zYCoe{y&^@9)Od7uE3+JR@WYaz>2*ZtXBMe)KL6= z&DoNq*)Z<|_b9KTjJ=d54%gi}Ny7g5RzGjR&{>Vi*2-+Gs>i1_K0}k>ex~@?SS`GZ zLWGSG!$pF(82vV?vYPm127Oa)gnA{{33+~Sr|A6Pn7~rmPMbCh=VIh*Nxj2EIH@aA z3a`Fc|6O4<7r2OJkG@OQCXUE{kjXwc8x8)hy?H?zXe(++hWqDGePfbkFg{;aD^=8w z(wE7CVRnYjC{4=#$1|Lwrx~>V)3qJo-JN>@Tg^r`^&9&HE*6N^@|&M|L>}ll1PIaG zrZTkTCULUQOOnnDd@HCeiM_El%Wb`}F@1}f`8!-_APVn>L%7mfH&QmKR%d@hfsv#3 zO5G=amAYK5*tHFbGdvPbpGv+?9^2!-8b+}9cE`Q(gF2dW*SK0?hGk!jO4<*v0o{!D zEBn70ps0EyH8aGP=x-=G85?|WcaIkYfH>vxC54fAB~)v?lDC35O#TawAjMlYEzt^ct?E5tgJzIh5IsVH9mDq|v6u7cGdZ;c^;PclkO`$(T&3B2(S9mCP#e z%-)fMt=Oiu9T$aFC2M-cvapr95!Dr<@LC8sTf6IpZkbs4FY@v|ASN$WEGe$jvsP#W zrzYBRYz|gdEQR)t$TlK@?Id$we&+m*w2~+cM`*3IYCr_Nr;~)&yhJ;*T+H7T?D7#Gu2y~k(9-Nx zhaf8rObwrxy-xVZ1dRg)%gjv5S{ZnBishWhy+kuFBVg?>hhI1yUj(Ovjd`c(-!KE%ki)srdjWorXklFeO3~x@2p$1!5M`RG(zLf z)m+2r#E=rdXiC|HvFv(2Xv9s+_liiJZcRyt!?`}#imE2~#dykY!_aeIrif3eopgT9 zhU&E#Ph^e4_XwI!c8$%k*IXCwc;lPhRYT;{SA0eH2!q|C!o1st zMj1lBQS+&EaHA(h{vp{DqM8%{%HhHY%@{d9NDuD{0KS877`dc@ zdt=2{PdXODZOIWoqc-_a2us-3x9j>>=O>tz

57Q8_M74!b5FTlzwK*~kl_pflp|_Cbob1`8KAD#0n~}OlJ0~YQeU=e59IOV z2&Z{pKU2TRJz{4CMXbiYu=u0YvW`0nWN~aOiwBkEqonizrHkO&t;tA}LlrfoIlmVe zb60A1A})DH#Gqox;7bZiqdv)-O^waxAM7Ib<- zpSmc+!`NB|xA#44H~4EMnWrmK9(F8+>v7$okkVX{Xp6d+UD3xr7F%QvI+_oB;Gea7 zyk-8j-z=?GVT%?K=76_5@vklaP7NjL?p9(pgm+GmUqC4v z{~FQ0{>BeX*rXgh`ls07uqUQa&qGi|B&Yn2~RE(L+cnE`@4v`73OI5`kUX{oLMFTy_KTq?U zgX~Nz6sM@s15**)o%lW#b^GPzGL`_SQLtRCYK~O#_{rXC$45uzNIJm%5(4J}EUS}f z^lH~-F97VoG;j1)IJO9&p&h0 zFqioG0@BMPW+U~3Yh;fYh22+R1`UtdlS_f>ygk|ukd<^FJ`7!I-Ac3wkUG*O=`xm= zD&t*%Kp67`Y*~sR##2q?Z%^V9a^ctJol8Nqa`31~J%q6Em5F<5Ky52Ru(J%3=170x9`{ z$mK%C*ruFKk?I9)%*F~sToMk`#WYBxMHv+`O*6R`=5ehP^9xw^K5);E`8Ae)IC4@$9|4yuV(a z=Yj3aXz3@mpI<7UY{mLaJHH1=OzI_nh3WT7FI390KkJH$)Fk2|fT*!Cn*wSF^ukY? zoq`}j2>cpJ1`s)$SQShyXrma9jb4?)(o&Hl^q9MoM?B|x6s4rfO5GQSiuc430MnGU zTx6zdu80F$Mf%I#UdBoXXlQHl@`8;<_KzLVVnKHDZLhZpS2>#*(YM!~V!UTZy4l|x zt{rf?!@H#NKzTT(#xpwLju`%6Hc<8mUEDxi{xW`B_5C@8kG_QWm=cy7^9px-S(JX* zh8t2r@6o$D{bD$oVlAW%^=V@d;4*(gd5Tr`c-6Y-k|oM>!vqvPSYp+2Usz zr!LQaFrns6r@2x*COo%_r{N^=-pCLhXO+ejEvilPHjCwuOEruBe9)qJQTXGTuDlhF zi%6Bsl9VYAgFGp8cfUYtqx$Y6KNf-8HXKZubM9_k>zs8xCt2cn1MB7;QuC!<>vcT8 zk>z*2*Ttxjjh{yP*FDIFglh-a!IevXd44g^4~9QyBWVjWPVRzGm_4Q2@7*2*G>)4|PKa35iK_72q-l=}+VsaccCok=RCs z=7H^2Qgy!Y1+k4McHzG{ghuvgaqfR;aX}prP#j84t3;kV75U5p?qVkL1Q)g_kq*zq zIs0s5%>4w<-A1|1v|q}C^Ue}wSIAb_N)X;$;wRjC#gDRFd{NH#V8fo)%^tE^oyvkG zw)%2W6}El`H(Xc~Ms9ql2Em*Bte~^NosXc!i=V%&^9x2&#@;B{1ODVdyEuR7cz$Sf1i zBA*W10+3sJfE>N0ww1hNjfkH3&YK12Sa`{mQwtSC!)cx`Mtnvxw}wB!MMMimki?_8y6Wz$+Mi#uvF#9i7fDzxwu{%%E`m3K2DrZ=z!i7&t7h_x@l5F zeZVAexnAHVXjTMuT|V3=m_(G!og2X_XT`rXNJzXsc503_N|LuZuK#>ig+<0on}fde z4FA|!S>Fnc`HQfGlcu%~hN=Ggr%%iRhhgJ-MU=zFmf!)g?tJ;5OACVR_PC1vK}`Oc zpW<(d5W)||JRE`^F*Uq}MCA)=SD#51;9+mh@prv>{wumj@o1s;i*4>2FD>}6*7$DI z`Z=e73Q;T6h%2w^Z^V^SR$!2}oasM13K&{dwuSHx~jMOQhf-C?^r%)&Y26Eej4n+H8Dk03Hku3SdLGw(vl1(JY=XzrwxTDL~%CFKV`J%G?XteF8UdqIEoNLyr zwUDL8Xcoj&SZs3a@t7$*JG=d;I%ZKORsTVWA}$oUBcY zNM6aTY>n&_7RlV;g(7YU*5c#ayv<*^qIl$9A_ClAYAvYl%h9T2oYpz?%=GD@Z{rrY zbwZlOmvQ~|r7k*MJee5thL!X9P?m{suQz%j)08pB#+|jz)h(x>fiAhJWu7d-GI9p_ z2hDAMjBFLmb zaB;n}H}IAvy}EawrkrSB+&Bs=F8QHm^|bIa?9oS_s_khyk@>XFY+c zYN278{^ROWnpS$|T9!YG2+2ROUz2Qa!Q2Vc{>$p~<-Ih+cLkj8C*B?!PzN9W?6!;) zf@U)P*s$Noul&m0NiW!L1^&HR)T@^n-_7{>e?5=&8{sLCUu%K-a1W|(9`NxSt*-R9 zW#a^FR|dd3nTt?pek5eBph@+?%t>N-Dt|p-+d2YNvCw7FS1ZrVz?*~8^o{;tkzqh5 zeFG~f=);0g#Sj4M`p#v92cf)hTYy(E-sSXVNIQoU;Ahq}_;%h%zD@0{h_t-kw_Lx| z7k=lSs=u}8OG*9Pw}k*`S%R0?=0rFTK(#8YHnRoSOtDH$pA@}=xbsP2H#0{5*pp6l zilioE8x83*cfRr-p1nwX<4eoW&+i3{DLH#sd8FLBp>?a+1b!In4BZXChvTs14n!-b z1CqP6U*CQAl`C?k4hY{Wnp1ah=5GvE-xBxErdsshFrTB9UjqrIk%5yO$VPQ<-@f%& zDr+gQYKd+*;wz)M)Bf?MXDwiR`u_H8gxM8{a~my!jelW4N0UYQ2i9kn_~@0%>~0%B zR4t(vzz(9|Bh#X7rQE=J{ajt7+Ku_UcV3osB&HIwpip|h+_mW6T`_90cOwI7_V403 z8W?U_tnODW;Q{BJ0nWr{+<>)fVWc8gIM`GKvOwD6fZ>x`>2s@|XjoJR0Ap`QpMq%r`JzaPBEKW$YWT5wPcjWnK_ z_Ii3^Js&bky}2!u2kaO=!_sk+cMVG!>4I!%{nzXLLVRvh(b_QKiu&v5Q>P*QG# zj3zeCZE2c(p8AcmWe=aOYy)%bDa(iUbgCfzj`sEqBnb?|^=(3ju8oN7?$SsGii!=n zo{yq`)lc^iV*usd3l5t4BZ*2 zbN|PZLKXHNm$vt~qTlS6e}QbV$H1ns;spSm;eQ_B`fo8~_W=l#mOYnL>Dzxj;h!(^ zzhFks)jg^+3ea*af5%7vUHqj#-ZMvX0V~>g&N^j82|Yu>U+k;Vc_{E_5Tk;?cVc~_n5IV0Q~=V!T)&^|6TBZ z+c$rO;eR9iPde`3fB7FNWwh~-!)A91X>MvuZwXT!cY-)jA8OH`>rVCaCiR$@!1HV{ z7m3h*VE((jq0gc50dl|8j=c0Sbd!8gw#h%S_a9dN63~}W*K&U^Z;h58a*(w9USq(2 zz~}6aVGCN;;=$U8i(|2bAi``01s-)A&@~Ci3X>j|St3|GLCI@91SF*Ffjh&hUG8EVr*Xauhn>@?Br)4m(Ejc7f->(x)9X)bEK7zM z&jZF9>pEBMCat3#iscrWM$a;4UnfxtG!?g!Tb40AJ*o<|GGcX0>@2cy5mV4w--%+W zMHQ-uHADCt@^KBH#6QXLf9KC{9Ey9$>)oHo%VfM_=2Wpzji~IR4fFmcA(Md*Jm1os z_HSE=gDx?KCJQUKhYUX4BC6fRVvpL!Sya9WCHk%wsp_&xVf<%Iy^_g=a=I2=x7D~! zRyqy~2-^*;%Q~5Oe5~G;@B&e4mkc;vmyg~~GG71EQWL=;xAu{OIp2Gev%PpEd2 zN(a%ld5n>5%V0hsXA}S6YFzTNb%fObvB9EnF>!k)g)h0B>o>>Ck_m8Tp%eFBgJmJ@ z#t|pW;}i1%Hv;RxASvrUW$!C1bWK+x-SZGgLuox%~HG3$U=90O8IEUN2R$z4( zp))DxJ><`g)#f*bVI7|A#CQUq{x+1X4oxy@b{%eDl@|Wyp^9g+UyQF;v{|1FTD>0v zdc(hIYmpHbAb;x)#BZHxZIFs)?B0_xu(@*WJ^E^s*KhXMmeU@K0QrkW(66siBf>Ob8Tub>n&UYqwmUkPLtD8O*Zi}n)ZYaVSCVKpiOS7Hf`Af z(*D$w2nljajYS=e1|V=T95W}V0lFBZg0l3wY=YhDjs=+2`@sdvq1*w>ewBIINw zwiVI|`3tz3DDtudg?5M#K#`=>>QzYyL++D`{U7rj;=WK+JzFE&=p(e3o7B;A8SROZ zN$z6kc*J$WwCJYzx>}BG?WQcNpJSokwq-FHkBV}D3u}!GyHdlIW^sj0Cq%~Kqxr?_ zC4DqX3u*gMoX1j(Mvr-g#UeR1h>%rtVB0$(aRG&qi@g*N{xOP@Gx^AT8qFQ(e>(io z@50A)FZaR!%zdW{tElMV=R`3hn<34H7|)%~_23=JUY8D?Y+rYWa~s#H!y)T~tE>!z zmRHw?;ewo?*`a7Al0+qPMveFtAvV@!hWL3b)xS-|8N6}>xk+;^@q|Z&?Hab2f&*Rz ztc}AI(h~#N!0H9dmQEuj*!@O^1XXwY*C`x zH}d6IA&@?Km!i|>4Lpz~f>Vh}==KXu^YF5Shu|LP#!tw0hAo*e5Qh-Hn@0T=*By6`NYgfE1a-(kVO_=uxC z?cVODAG)6`WiAXpBN_<@?5 zKoYO`vlePDI4Z@!bb6+iefHeBq9GBu13Mk)Uu<3rZw|pmoT?rXt{eyL7U4ouKSbe- zFQiJ!Z9mKjjgxtDvx3JF1;u~aXB$3I#p7VJAYDFgI#o8y8F$`EZr>8F9pX3>D)|7> zTGyxL13{{6SFgv{4E2+$@Mzmlj_s`VV>+vK`W9m1U?s?68^`=7i?bbh;*&as2FrIY z6NAEteGBd9ZKQ*TYn*{2!KdL$Q^)DH<>=eM57>Wr@60++;|0&v*|~lr0!JGw>`Jgt ztmQ|a*o^M^ij?_^LV+tib2PJO-N;)_9p@u(t$k=j!??c+a*O3YDHeH^J)!X-VeDunSkgu$=iH(ur#V@fdH3i8}8(ZW>{8FP>M&alWE9Wb1)Qh?evYQW$5 zbGy!LOXvCV6U{;G=?vT=BNx^8jl_vY5RDnRGJ4JnEK6o99v)f#4YwV}bKjBmbqkBn zS3yiOzYZ)_$q-~^MH z`Kj3xs~}~O%9~AVYRZ;n%j9$X$x01n>C~PnbnkMPR2Z{qM?(GE@*6~x<^xFHie;ma zO)zl>Jp1HCalLo!=*2oY=aey{bx)_~hLCDP!&tw#j!nhi=N%g8oFufTz1MPnOWz>*DZG`{Q%7Y#JWWiAKh>pi ztGOj4&QbktO~+A+yPEwfo4Wl=+T)`ZT}Q_2XuGgAneVfzFkJZq;Y2mf4R)G|YcvA= zRX6;5t}ZNqeiXS=v0_TRZsC2P5@DaOsj5J=OC>%g>NSYsQ(rkDr?Pc@Q zDc-;O4~c67OSaJpQg`;(A(r+bWhHK<2t%5yq!!4zE?f^?$v4oV5V zi1a3e9!Nks0Rn^&AS6t1pFQi$I(z%yv*v2nIv3pi`0~}aKF|A_z1e4fCTfLmwYva0 zOhVXfEUbQSkV8<-E5c6t?aTqy;VPXeEL8n>MCfkR^^aLWQa*3cPBM~-b(b#vCigt! zAw+iVr#XMU-D1fbbQ<(p;T8qVL4MJxF4Ep3@dM8Lp<2yO-#VBz_8buV!S(E;9o~`) zaENnvuE?pAh(7V`Du$mej%70bdCS0vrz$^Enx{TW`6&7eesoxP;I;<^sr3xJj{gW! zI#DO3qc}}fLa5`Q?cx2T(8HLgR~!)W@Wd6&08<9jVQT>Md4Fl`B;Z$4ZB|c+&wn_`P@O;2 z>?CH;6Er!(_w4g(QwkWu+g@$N5s30)V3O*WLF^m(!vwBfF^?)HX_)Ai*CxKW&Bzg3 zY!w>TNpxt&S_0nq){6KhVy3o9D?r~zLQN<#kgaLdp)F*sDec5d$Zz)YMDRfHag33f zEDU2WRjr06ue@xIyEAS#4^9B47BtkQK5LUHt~~M|a3(Nn(R=cx;_fYbW`4_b9f}|B z=M*>?%eY^&7w7+;jf%_R+tHlM9;*4osCNyl#1K$eh_iC7T=gDX&1CW^*l5t43`zqi zBdNA|KY4p>EPJWFJ0UG?bR?Ud+V#O}v!xiPqv_BHsT)0*kvd{e3YV`ejf-HC%$kCW zFZ^Wo=LIT>vhT)(&%VL1&Baf382j4qixcs+PdU7522h-O4OW$U4R?_;2Y7(__&V$n z-um7sVX%4W^Yd5y#YYkQE%EF2>2)W)lV8p-Hzcg2`y+Z4wa2cFYReyO1U(W|IRr^x zRKEKqI?3-{()`t}H|ewE_V@jh_S>+HKQb zvpJqwvpN3kWoC|1JnW=}aot1u_pK|GQ|}h4n2sh7m+qLqUWaWF%7`jZ07lxl1Vku2 zG8_@czE_T>ABK|ByoFyYGT9+_Gv6}cw%i;Q#kwILU5s7tNyVk9S+4-FLDigY<&7<( zr$c>WFeH7Yq%GY!XTUk9;;2r`@o0Dk#Wb&pdmXNcqdTIG(4e&h{KhT2y2*cRBmVfq z#dLjmb{Xcl$#dzK|E_owm@css>2ui?+eNwW4NG~Cmmgx$#`pO1y_&prvPiy9C<62& z1r~;F8gt&_r`^uCCBdPeA=>QhC;0q}I|L_$=Uyrr+*K6|Y?ik>I01nj%Yd^?xJvkDmWvso)_S>j3^f>oJ`75_R?sV^^Qd3laqyF?; z%|{!PlWRtZoDXLJ^?ITM;L#sqNcD<7KBjrG@Z`!#U!yPHx9GGLS%>ZD6Y+)$rSU9U zj6Pr0sfoiIFRi*)hE-f;J$2FKc6bL7iz3EQLJI4u?+gA9$0_^1$XYkZ{YF{ItEM=N zqg~a$z}2T!iG z{|vYOTSP(p16fAUKKkY98YuRvvry&qOOXT_5ARw>uZ5YrAFutvueC4qT5-v!>!}3b zVC^a@Qhe$G_VkG;V+*H60Oa~wcduj65Ys`vS9RMh*O7wqc3$;3ghyV}Q(^#zPgY6> zVWF)rZ>uRuXO33o%+4FbLqbWMOb7F{ku!ERVMj;MBgm_AQV~PN;TNLkbv42$BOH7* z>NZs1(GhNks#BgOxc#u>%Nj_N2X=67ut~Tey^ds4gviX_M@PncAqujamLu|#M*iLB zjgm@Jp}X)PJFg>2L?s%p&DR(kmYz=;EmdBdf`6hgdQSHFcTum%gh>2=*fd6T?Pl#f zhMib-(z$>5Jfnjq^KbknB}*u|!?u6@ACCgpT2B!ll30vN$@&2Cbb9Q1 zb+DaO?CbRgX;S{c=|g4%zuZtCDorYvyM21HKCZ00 zKF*S6gimp$B=>o%S@BV*hkRyz!tJlVJOD`s)&Xv0CzNt}+DKNFI>w@)e=uqrI_-I_ z3Y9ZK;kRT~08A@Q5P`BI?s%qZ9V{emC5RW`phv`D?~=$subErepKa%68=loZZ1^Z> zUjWgOf<0lZGrYpY?78#K{AFx4xP#ZV)~4QDhVtdKJBle0&7_jT7YpM{ z6|4_;OGN}PMwUPUu&q!i@VQwf3*Y${#0L@1`7!~yl7@JpUG^vEu zz;&a`!lNEGDwk2*6iM6CGC{EY0sW!Qliecq1roN}8P1od9-zOw*c3Hp3YnS@02T3~ zGB}CYKKbcPyhYHr9WF+&huiIid4e>^`stRMXT87rF1BpFpojBEk4CtS@u&gI_HT>}-@O&T@0Oyfun2L;RbVmB?m~cVz=gw;O*KY= zr}`M!NMHKmPEd=<*L^Zr<2sT{E4?FtV%_ z14#cSQ2!%r+nmcowrL;z;_0|m8nR;qMx&`6wWdP4I*wLTpU%JteLN-rFgV~lD0#O( zhZ1yD9*sU1owchPI>r^LLP>lwmj5|}{XmLm*ae?bH(d9FAAm_%!k@0XRjURfjj~Q} zn0b`>Zr`2+EeL*o2ZQ|JRo}b97++Yqg*?jS@W{vA+p)Ol)jAcT(^Fkd2Is4A)&(>l!;5=)ypSz08a zfe{4r_65%Y!}j(G2!PdRj^TF_c1G_K*?DXJl^3ruDISBGn&t|-O(DzdGodi(+!nyRm9$ByTV6eUS?4IPB#Z!AM0ri-Q!QZ zv*oAQbmI;RyctE`0~Gft0N_;U39Ug$+Mn$SG(M z&>OjGjGHp+`LbxD`)ys;Lz|^v0xv$DM~v>?-yiUt-_#qqJ?*f1p;Rz(tZZ2f-i#f$ zQA3nQ$Bj#IE^_WF$`j32gS^5=KiIEk!82Tm&-ZKWIPo^jw(LLS2JPYc=iCulQ|eYsba6ngDtUFg zmX1QLniI$jmTe4iZUKcKHY_}7O*`nkkqdMT{3OdcUZ#wiaI^Qyt|5&s{>0x*CCDSr zKsW1FyVoacJYu%oICeah2wL5)?0z=aaCCM-Tlm60`ef~r8bv~G6&)n)|!Lrd)in&O5{CxY9(z1!Re+IP4QY)ZL8QjCAY)g$lM-p^yx0srwh zIgb-#zDgc$ImLIzq`@0=G*~y_Cbe+Tz)!6a^KNKMQ;wqUw}vZS#jRuaB)!t`PU7)6_x?4`pYfi*^?(11 z5%|xo`7cJ`FXYyLF#><_mi`SR@L$-`pZoLwCQ=@XJl4xhmgVQ;Q+0}Oq&NKy&S|FS zR}}O(z555&Dp)_bR+DYaKZH|?T%PKfPP&*|WySED@J+x9IYHc@dK}+yd{mgiQaE2! zmvt?T+dd60tWDiOyS#Iaau}w%Q}^(mVOH%ac~7H!k|#mgi$D<)sU9R|$fK>^x;=!N z+Rh%@Qzc{O@jEEU3M{B4J>0GV${X7>O0|vE%xx`|3J$m(98i8R#QOJ>0iHcpRw}>1 zm=2Y8aPC#&y7SlcXQdIK(bU2L9k)?K;7<|f-aJ&}mQIt9!qcL`Kk8&mV3y{o1wC~> z^UL(}8O$)?MeZ*fvVx6fJ2crFj}wsYOg&VU z5HQ`+)~t5b+ExoQ2WXcEJxMgPZ#n0Fulh#zZN;rsH$D7zRGm*Os^I=x+& z49PBLA9a`>buGxhjR5aH0&+HK6%>tM0BHFcoISHtfi7~R-WOQ@$&r_%W}DIzkB|ZS z)fj+hS1wN07Dj;?IWj2V70nD_F)CeWCGUMXn{$2e$;mD zLZK0pM`KA;&2I7H4%QeKQxK`R{~H!!_+f60-_POf{j)Mx_n z*}U|d@IS>_YMBaFe=zy-4ecJQM7ez~C*hGUDJ1ogwZcENn zV&Gm7R*{KSOL2O!dwnsWSIjODE9=V?Nn~^pOlW*x_;O<3a5BX)J_~izWc}9@r)gU8v2j6E)W=b(3I4qyMMm%zfhW&G~*FdcFBKcujHOS; z6|2Q-B*zbVk{c55q$y(-&WN!b9`@m z#@XscEdoWA#**QywgN_SGX^De1GZ(HzE(M4o}luo4)YYxj=gjJnCsv~4ZU;XJ3h0! zRU0k3Y0!4r!7!P5=JS8sG~xKPfMglReC;^j_rs|n_;Br=?2#nhKFI zafbm04GsEOE{4{gM|k_`_}nPXf9#Q- zma8Y5R0B>>Vif|M;Gmp8P zR$-FhCiX>~vqc+Sj$o|a!YqQp_c6YiK`dL&PbB?|RHp5K^KSyJ2U>Zta?*&K#?YDB z-=WWakHN-te>|h<&5e^{$_jUqN2$D+%%zl=7ZD8G-x>-uO}Jic{5k!6sX=$)>#C8AN0aa_2P|0=WGg^3t%F<8y~F!@bU*rd)&bNata|2IhBd$v~)O`|C&U*id$)yJ3YNtYuY^-M?Wi2Edm8}@GymCxR zo99W#ujW6hl*v^bR-!HE=;Sxo;>K|Z+`8S{7h>o2s1iMZQUcYy1cRO0-mtLo2@ZB5 zeXGSqtsmw1BoEPreQu~>jz*J*U_~IAdHw7`(W6;up=8sHm%eWfx-}ytW)Vi;bLGj6 ziXvge5`Myct&Ca0E+wSGTV4$=8-cTtF-BLPc!$$RgJMFz!%1J1QE!Zt#{X4@hW^YD z`u$3>ho8>2-%Y~Otu&%y_7~>M)+%)<*5aTac}t&X6J{$;V{~elgaQl?QEP1Rr>|U` zim+m~cN|@I@S;n~zjmQi{GHqry&x7h+-bdd%fU#UuBE#M?BZ@Sonb`7_k1lBf3NZB z0*-m34FIjqr`UuyNBN_r{z_wvjVpR^fN3k zRM4-JOT7hNe)6$TD$v}XKqhS#+7*;aE$z>Z;RdA%)-UPvjfCi4ZO>Gsemz*B82Y4n z2u)_paXF&ads+E?zXp|%a@F_oSt>y0mL?^>Ho3K5-p*6zw0|ZdO#(v-;htuYK(F|* zT{^SIyTWbO$&6b~6K((Cn z{#9q}Wr9VRxkbUy?f&7jtXiM>n<98%J33wRRrmDnpbkI2WDz}2#CW895B_ZqQ^=Ss z8teRjB`ZuATkD>z?7K<6mgJdr-Cx}l>+a=Jyq2n{aHuQ+sLFSllQftdtlWhcD0@Hx zG({;!qs4vH)5AN|n5~n|6Z)XpOR$lfr2{gx%aO}hRwoUzziOflEZo>82Pb$tfj*Eo zIg>Le)&{7Y${lHKMv)J$?+Kx&?<) z>o1D0iuU&UDWJnuS3YkoE<}inxIRVl6;;H#z?(y#UWINPYCJTzR$k@FDb4bU%J=;t zWw>RT$X~A5!(R@S&H~up>#j#f`Es5oN^F1}kaJu9r|1ucdWr>fN>h|oW zcOpFEmOkEuX$nd%N3)m0Bj*oS9e25`DQW<%O2Tr6$&Uej8!f!d*A+a+G?UMAoj>rXYpTCKua6V#w)nX~5Bz}$3? z_GyJ#md{2-Pl*rpz9P|gbiX1UA)Aqi2&Z9fZmAGBCmK z=*s&Z$tQEmKR|JTe?%k zxui`uGt83}cgC8v3+GY6JMSt7ji zF4L*LvVGYxVf!?i5Y9RRERL~xi!D2upLxf>8w_8X7SZoQ$kw|+IpS43Zx4TyX}!B= zr{O1dUABv=Z1nYk_D4;92A`J96dZ^$7Yu9fvnV!}NtiMXbiQ$ehpgXU8l0omAZM!^9pc+_&DdMfNNQ)j>C%$z+NY94(P}c z*GDpsGje^@qO-m?0}$R}s*`K%&)M^DZFEk1NcJCm9I}l1JW&%|RuAG9S;K zCwGJW%%nq@+pq-@WlEAr`{{{Rx04=nc}Xk zhD%op{?A$fdTYIm$Y_NFlxf@#u_-_$CB+7YLQK;Kf)SrS#jGr=4p22@0z150{@w$=)wTWm|Q~H*7O%thNy=ho*KCbulIh*k12N+Tv?wwy~F!t`bq`5+{ z;_zB(cauto0&+`D6LKQ+s#?XL3--v zXNpH}EPI7@Pxk^Am-wQ^F|1PDu4BR@-;)}3S}iDyKAEmpUEz)zvCSautm-pIf-5j^ z9C)$hg6k<+M2pR@OY6%@cjA?8D);M{WPB>qPQ%hv!EVb0xvO+ox|7wn@9*EAkH5e% z(g?Yt8?h1S<@He7Ilc-}Hu^I?v6R+LyrVnQMkd@dt0Jn_%gtu}4m1<|1#!0Fr|ICQ z@42|;y=%3TPRmcjEs-QVqbCVaP5&BUEtJg;?L0$rIa zQ432dnDWp!71Q;?V;gBX=2Iz}csulmqPD$_6k`+CbQTSZnJXRII2OSbI$eVUxLq;W z3M=N-RbKrwQnmq=8{ykv^DS?{jwF6n9isc~g_PQdc4rT+c9n#l(xI;o4oZ z2TPVOw^tg1@+04NKOvX}yWtSeLs~CZ*@nMvk$mZj@S>tjAVPKsjM1Z2REKt+QXK z5j}xK0Viv1mA7u`jtvT*>IXzB15Dr6P7GYm^XiXK92dRV-kOgk00n{ zi`w@dH)YDqMHJj&m-fC&Kvqb}m7lCy8b9*BPXVk|RO3UD7grcivhA0J99`?N9UuZT*_Z>4L7?@wnCo2nq_nKq#x>dW8?k4B?K|_8+TfAPLy>saJR{T$i^&mNs@g zdp(Tm{p22VzV{Yg|IoDuy=qOu#wdJ3_S*)*ooliF_D7F=yydeLq>S;flB(v92ppS$8K(oe~T?Oa-$tDIdwxhOiH@F~D2j5srlQbc&%f*(# zp?we(Ltk!$9%OITcmSdxw&58EKagy=%&YIx6TjgFD-w!+V^22klN+F6YTr|B3&%1z zRDRd^VxjA#Rc&!kjN1Fb*1TgzqT^hQpIpv)2mq&5-q?MHsftg+$suRA1k_*r*40FB zs>j(nx_GTx*I70oCTV^uP9n@{xHG_Lv_`hEsne`*$jPEG`HBY(tJac2=_v8>w8tI% zz!#hL+8~J_mQi_ox9am4i90Ye_@Y76Qo(*5T{U_5$-G5HCLU_)#U%^kT!H#SzuzS9 z^8CrJe~B}h3`p^hXvr$%&xOfEW0rqJ9hM-cX?@6K;JSarr_Osv4h=_;8Pe4Mi1Qpp zc4N)SEN0<<#7lNM<|SKmllAmJA!|QArlGTt>DLVZh)~T&hGW)|DbnWui1a-CknH=l zk$L0)-SU3}jW%F^Aptp3SW??v zvmYr0)Hg9XxaZZn*e%ayx51g+(6+Egj{vgda-cmCX}Vb@?A>W=up&9Y>1 zx2)wt*)&6Y?s)aF3TCQpiTF9`-$=fHp=E+!pGuYUQX{vFGCF9izQ2yB99$?C0Tdt5 z&ue=)olxn7juJaseq-hQ0a9r;W+}_b7rAw7XiT+nD{SlCWe!l@IT{Aa@FKX!qFtdFR+gZ+a+|KOJE4;D7ynHW{T=Eo zf9n4q3;*k@@{RmlpxHGC zt!508zcD`ll!2+LzwX}B;CgTV|GW$@GVUN=w#vFPUqG7(97 zze&UXYn;{SUoU35hJA(pH~EJ@=IG8zwwahap{g*k+?RhYD|7)f{{MUz{txr`O0K?rFjh)ZIjfk?6OcU*DLiFzP zPV^t0{s&2z7x>38b!*{sljT;0XOfCt0r(#V36jHa^m3KE#T_Pf``FE|e2t1XIX?p) zK7VT@9Y&EWCva=?A!BmBF}&92WBQ@8U+*DzpGjECtE>$iObeHn^{~w_d{xR|4(wH6 z@0oLk?m`No^+4QBpBA#`)f_JT*9Xu%L54)~#WFPzuAFqoLz#34>dHRl-eJ_$oc5Pf z7yDg<<%E(Xv=|!r2DQs`dv!}ky_O=ktAqxtagE3aK0%LG=4waM`bTi-SEfH*YDMng zwhzu7fH!<4O3;Bh5POYJzDEEjfOkBsp{B=T^t&Ma!oXz(#=pM%O4)y$m(&~X6C2*s zjI|l8+_U$B`#0If=1#wYa`&Zm>$PJ(RNgHf5g19mg1vH7T;)n;UAy%Jbo=9B4(3CzH}Cp)S+oK1MTREfOzhdE&^n%gn(YEb zrm7{3arO$RXgI@*V`qy``(~Ii#Y-cJ8?ghTwXf_f z_({PyFP6ZAp3FVN{^HE!R|x}oHiMsjC)dfyq8GxFxqpc{YnJ&#Yl9K86qXX8!n__f z^v?)(a&tRgr=g4_lgj%0kx5KEg(DIrs>R#s*rqk5Z{vrA&9t898r;Ug%z0a_B&jvKJLMik9>2-Zg#CjU>Vq2&56VYZ$aze?P~8 z(K8RPjf=&0EI-Q6@6+N1un1-+GnDj|BjqE%0fBY#h&N*AJxvqT``#xZKU>k_UT@62 zdVb_Zv(2&`hnsM=FCf@VsPMi$x4l7_n-QqIOpNwHn~}5oUQbm2G)ewVB9e;)mXlk1 zkPRg;L%P6^=qQAjxM!hFaWR-_t;CS!aqPVGzF1QyP8z$oq#O~gq+oV46}RM2627h7 z3Vauz3DO38c4ZH)UbGVk(sqk}eyTWGa~j7EKEfuFD(?geV4wx{F7W=YFeiwYzh3)} z2)qJokbWzwM>f&BwhBMGM6@}8mMeC|-SJ}C&^fHjNA?Y_zmGqU&`h@mB1YT8qWb*I zXMN8$OD|pN#iqk1oOe@>iX`+(4A9%)rD7z34+Q-9wds^EFoTOItu|;B{^d-CUQ>L{ zr5s|0vTYKYP>N|BdGjG54?Y0qKX|J)DJYv&T*s8uSoyd#-CW<9vP`|a*8z|6Q>|-i zbZPuq;$jJP_fwDNM~5HTCEp=|Vnlf&;_4JlQ6rd7iP4(zHRyZmvSwL%iNUM>w(9v; zO;bodrH!PW+a<8>`GmG({iCr9*C$_M7GwmAbLy55VNww$sB0R!}v4PRk2ZJu;+ z)uWuD>$Z05I#v8Y7fA`XNfn*J=?ie)9oi=W;-(YSi+5?t{Rlr%EB$SwTZ}sg?^TCk zHTo{ZGYwE0CltS$khU`$p;;!$2$+acQcuv{@(GV8y1rwRYBJMtjm#zJJ-?qs(13Ux zF6o!%vzdF>1Py(@x3`U)(@Zh;uf#Ube!8cT;P$pwe7I#=|5@-#PfKgJOpvnEQ_kg1 zuwG_;IqgHLZ8xFOzt$ZyE)2&SH5~a$F;%|>wl8pdZYEG>f zd3>_jg{fv`*JC}TzB^Si#@ZR4COKVSddP!q+@?S|@^+-?Z0mSmPJy|GwiiR0M=giE z7{sj}PB@M;h{0~+)-Sj+`RglYD@v=+S|Czku2JvDa`^?Po^6Cvzx^6_`11mY{SEh} zypauk`DdM8Pa7VYxF1oG>mqw`7W>&{4XI5t-cM1;4qyLpWnE+S!}Wpa3qsGhP&afy z@}ermy^0~}y%KEu-pO^r&qw>}W^)mkFcHl7a>S#aG3I^BiB8EE5X=EG8POU-DxIe#5DyAr&Tx6qK~6p1 zjU!LQ`$p&8%ePFkLzPT(Hs>7YvW*f}AK~K;ZB$ogB2DL`OFR@U3QRG^=(KCi(}n|k zI$%Pu>2N=LkcdTjO*@>DIo~lunYH|+WdZzPXWObgi4=@jb)yP;6{eX#ohT2@%z0DjqutmLK z7&@qFJyKfCdexlP>cb6JLmBo<0zv5WsJD2KB2Fq3>~X4UpW*<_ zTOTxhrgTACq~mT*!$~I`anZ8*%Jf9Y#N3*aH-a55A-}|qa~(JFLlMx1dkTJNAy`^a z_ni(}g+Uz=e)+}}`VN@mTgQ7ijTAdi81`JSgR|+T&2Gh`L3JPU&&&{^YeLCirQ5C` zw2OD5zHD=t&k~lJCO-48Fd^25**{fF_Em8EL^brK0>M8u9>6v$|78*!urmfc5UlcZ zF20Qn9w@3CEd*9ysGV2WT*s+5aNU%?`k-!!_|;pbYwTt$lV{OOkZQxlxKkV8z=<9^ z&mcz1wda#;@>Q=4g#lMw=4Op_CFW%PvjRvR48vRLOs@$3XCj807x~0Ho<){$WtT1? zt-mcZgCYI*YH^v@apJ0Lz2ccIub?!mtjuP&30Y$a#LtUMHUZNY1N;ycvtGct&Xy;Q&r=Xzsuc58Xt{1z^-}wSlzRyh3u5C$ znNlKBf0#C*E(SdQywvcaaz7mkI3rsmGxtGaI<=5o1f6*funZ6r{MH>qfw)X=G5vR) zWxO8z@*h_5Kex<^320RPLfz3JO=VMvQsb&`<>U8g9frK6hw;%$HB**SVwvHU>GEtD%3Vt(|HcNWSJlY}C z3N8$Iw?B~Pyoec$tHIM!&VTXRPPLzxcYHoNsERx`~k%0ZCmbp8t~1<`Ta( z@6g4tW#SO^v@{`aAtsuBcfe@$Xp9Peuc5`$i(>ytU$nNqi1VeB*v%F>>}D|N+tCy3 zr@Ok#uV`{&_{*6q+Qf}Y0w0E_3hwq&U*xFUU-%6EX^MKr+#5;#fkNz3s=#p718wJ8 zKc(gas?tK^DoQ`}$>3XJ@_}#Dq2s_&4?RCFvdw!0`t0@EnsDp!(B@aMt9d)I=_?Al z4E5Q)P{86USIlX;q6fQm?`L4`Q8KHQIbJ|qOOI1idr0TNKIOL691aH`1a~T$2UY*5 z>2?jTu#JAZQXI3yC(thEo-xIA(caE?Gpw)G?e;A0CeYVBxp*bet{X3{K`CUhTd!iO zw_*y-XaFnBPR!gSlyMKEG$n(py@WX`Y@G|h)j4taQ4d+jm8A>)yq7!cD0a;uhm{9M zNVYFX-NI4%(z~u#O0V9Ox5~)?eQGbs-;wIuk5}0TRn@55Ia|Ye0_CN+XO<2pLpG2v zrfb8n5}mydL4jY#`t|W0y_6>xZK6Iw*88uu@E>6DiQyEydz`1}#(Xe$5C6`0>?c=H zC5MsXK@EDmCy+Bt^Q_l^wpAvAowz)S$y(qS?rLGFaiKdcTM>;j(i^pH$#Pi@a{hh8 z=$@haC8>$X~2`7-&a1mTYlWqoqS5n77SZE6v?2Ia-2|!jQKCfW#7~ zt6cUf$=YY4#bG8r1c%S`Wq~n5H>PV%zTD=`V+yzucxz1IaaFI+MKS?SB2usW52wnL*&|8H5Oqw3sH~2#%+j{-GyicCEmC z)=}8t{NZS|w`xNxmnbHwDKq@#wXgY}Ta!}awS5+Cct1nIz5_>USaem9Xb}GW{Rh+y zy*md@HQGKUVo}oH(1$TgiGy2Eu=arbb7bAtGEL>>-5j4UYs>C3{n@V+B!dGqIOyl4 z8o)4>2J0v!C?95|Pz?0+R7{(b=OM%-u_+?!O`2h}plsFQKV(ySJ2L~cmPHAXytZ%O7%TT| znF6;RBZo5?1?7DkNLVHfjQSegd+8u{-9Jyl)_(?mL#vAzwww(0(k=WLT_#%w^xiB2 z+f@)VcO3|p@7x)pvB~0|HA#|+qADn(@p4egM;D}x;iMqB@uC4iR1?wSIYP1j{Y#-l zj>F)1WOp6LZqh|Ky@Io$as+}!`cIMpkU`2IH+ar zuWEV3ZQ_#C49kHt$vwQiwSscmpj#@u-ir{Uo2Psc@Yhy@5(l}I{jsAj1d-043*~Y8 zQT=We=&~qFnvH7|=^krpJk%h>97K56s-2qWExDxCo`uz;mTs+mv0uV5kuC~e# zFOiX}E+#iMh>V3g<({fU|V`XCFaAY?{|4) zMfUDLqg+~*FBfx}3387&i45xScNixItL^_?x}yK(FXhtdx)dN%bOfehZa&ZT5eteR9=1|OBeK*x?Jm;F=<7cAlrCIO2 zPbv2O=yP83V@Oz0{a4V&4g|ppytqLAD}WT7?X)kstv8zMSC}eiUGozRu;<*YteA`9 z2k$-pX#7TO?AcemtYH8$9%hR3c&+qEb(4K?Q~XIO#}nFnYf7)L+|tu3GaZ2!W~JX* zPX@2^qfMRSlXM}mNxF(V9#6D!YP$`5fkmv>6k8>f6{Hse;}l5q^lelqV=fc*sIezg_W6=c}$qar0`zzuA#9^Ve11 zDCuhb&?_SKuIuoR?0mcIm*Howtlx+Mf^xEa3@!35icA&BAj9dcHD}W1!S0_QJNJ^r zogsC`CJ-aVrIvVMP=I5eE`tCamTc3kY-1Aes}hffw;gRRobOsnUfBVXsdg9_#q+_3 zjZBwTlClxKGG--!T*Vx;Y^dK!-)#FQp%mH1$&*VyNPKluV{hd5#yg%jye~S@0dHKs zIo7A702!n3s-L?DLj4)ph{bkJ%c`bfh{JV4TX;k>w{@UA|97gvoLu9dtjGoN*NNmH zSivc23foHc(U0>~nbywWfAv*q%Tybn}(oYh<) zUbVfa<3)D!HVMiLL^0FQ1aCuF;riujcZ{SfNq2QByL=Mnm>0&_+xQ{0d*8b5QjsPu z`jQbdbEkGWrC*@U%Q;VoyUQfDN}{NAQtIQWrXDy8v}7np2LG*#*3fU)=2d}Zrp5Wa{Utws_yx%B2caHc? zj(L;xv*s;ip)63|EI42>$ETuar$&`UEJ6#eK9ZMT)BZrU0-fn2zH=KzNwe_+0#5}x z4pTtl$MB;ESzD`!uG-xP0>ZK-Q&TR)^5y4@t5!kWq!?`C8?l_#efGK)F0O_W(xXO6 ziiQ8Hi#{1}t|n8|+Z?XJ@*ZUAim=qCOlo)}wqS4gFvwb3_nV$DaU7|qt` zUG;Z8GLFmSXkUexNS&qSe$i}vRysa2RJ(&#wU!oqcKYcHaAku^pnnRcBwA-On1Tcv z_$=T33+xJ&qPi7}9yXH9siJvN^xcxpb%${It@Ce}G9 zV*h}&P@l$L>8@EYTHU(aqf0&`Vqc;U${yjYCoaEv@In-~Cz+JL#U-vc2cYb+k(sP^ zN!MlC&ml5#nur*7wemW;gT`=-S|eOJ!eU^^T+d?53sB!{k^)1VxZIRKM!jMM&+LUS zg!-p|H!B%y@hAjUihKig2cbi-z+qhI;Gjk)_hP5^x=m=kUC6#6Hrk81(>}!~!Uu*F zazl2JD*gEUZNyF;@{64cs9Nc8)Jy<&RS=S#?UQ|yQ}~e`$sWn)z*=pzM+FlemmGFw z#ROl>i3PZTMA(rFNTacyOM;}8IgUDQbihm81xGj+bR-W2Kx00Q zC1@GM+ykvn-slHtH0#z_&W!co`K6AHTYVSn6CQ9p?aFnHq>Fklz(q$ z#U9&Phpe?D4m2mJR#RVea1Y=Y72#jPSd!>!z9dB}#NG%;yS(G~|7L_twreo<(A)dz zPTlHKKKV7rz7!NKuGd4$j23<19Qc6@2fb2fW@FtOg0<@oN(wUYC0WTX-sT;R+pF}p z$c;1&9+(0fD7BjOv#Ou!4Inb66zWu;km%hnUlFHLdmD$@3f+!MuF{_akK`2&Yph%R z6aiUKlD(KDUWND2_W=tKkbuj$l2D4_dXAvvlHN~6F7ybMfxMQiRZhNChY1rbagNOZ ztdJ8B%ny2Ngb;eKGW>Uafc15LMZ(^~PPLH}M8Vkm&F4CeyqpfP^Sv^RzkvrxxBklQ z{V(?3JRIux?H?|YQc?*aON0=Lke!4i`&QN@gc#Y)SdyZ$@B5a0mwlNblzquE_8DX! z%rJ~Gn3-qN=lk6E?>;{1{_}Sn&-2F|N1D0b@9R3R^E%hpd0sYqaaj_ipUvJPh3(T9 z&&hB9IkRkX?`Q}^Kde9T*Ab1A|Bpc#c?msz`OgE{wUUoUR(p{ezL9eBT3B+8MO&r) z`y01WzTqs<`M%mqsk`3)M}q5r7;gSX7mpPG`>9WS|DJgGKhk8s@B+C14V+@+w;?Dn zZJ_t@ulfHYzznGw&i|O(zxcH0eUlt2220Q;rFFsRka;Pa}eJ&e|EOG$@N7!1_QAp)z`qV!QF<0$1}LO}n9nA;D!IVrYA)pK3taQVSEQ z{B#fkw4Zp?=Vw(Ww0VL4WyYK(B?7lFMW=85VE^m}P~3DtfS|`O1^Zl<&YaWUGSAT* zfpe@VO?^FX{+iNZBB_uylw;WB@@jZc-7=Op(5~|#kYOt8b6J}a+$Moz%>a%(_A+2SQtgEB5K<(W*EL-cl z8Kv$7AgP$P^GdUCOj8<2t>iTN`@xL%)R&?|pWva6bm`0lVVbjb4gJTJAdWB|?NLXc z=Oc+mxgSUqdtFMmwaEwOewgYo`h+*|{kwoHeyPJJslL-j)MuA{xU2W$*R+ek%g&2w z_pLVe?i0*&nM574*TcaN@QuGq zK-N!MKM}K9(=o-3q_iI%6iVF^3aU-WR=Cp*X7k>%s=kXsJX`{KH_ z%L`KcEb=v2-mc3_NPR24_zq3~4SPI3pe?0Z#p}RX@8#~@SEFVdQ}5aCq{sWnzh5#% z^b5Zaa*i=v(XI?5bvZ52^IUn;)G3((2+mO>K{wKOKN(bRLcI>6M5 zE4h6%I3OMDSrp#TZ>pdyEI$9cCa}=Bv9oVDt=ZmR5Lj^pV&SPlph)9;N9+kdnj>ofadVn$xuP&sjMhbJbr zURR0+ug1k%DbNtKuPoIKT9e3}4w%T5G0zEI6W6zF(=S%L0xh*F&xxP_NCoMeG>1Ny zG!u-yHdxvV*+T8Aj>o=ehYSrLEl=ockvVo$7oB0t|!_j>)Q_|DGI3xRaj zJZr~rfcwjr`)y4n@i{N?KKMS8W0A&KP^H5w$@g?#!%+*7=}^i^`Eu7(1X`48U+FdG zGs#TTvs2ic2N=1P^9{>CrRmqj>6civhDt)2uYFcxBdCs5^XjUHioFmNL0S1B%CX~P z@qLEVv9TeNLK8)GYiUrBzFmobBEr|#sqo-uagH5x?dY`$g|+z5F;F-pVfUe^%$_i^me-UsRV7o7ynx%r-tN;igtPXq6KN2%f@Xw}~?ChDfFr}P3 z5YFXwUkaSf?TB|U^p5Wgi4yAf)^+GOSPQ$8H9brVogbpQj~jX=BWjTg7tfluQm#X} zo<`iE9uXN=OY|}A1HtnsX0}=PFL*Z2Zd$PHz$IrCPmYd0RU>44b0iF+!geQq;a>40FnDT0Yn)dRo;aRpbm%o z55ib{P&e_`y;>qAAPL=8%H*3m?IQ=S%PQ7w7;g4-W?6QcD?+p}Qfw#g)ft>p7Q!_3 zG%cUft;U7P`nTP05}6U@+_y>CYG=(TNl?YP{CKLxEiRnf}#BEDZTQpmz%|?T0=rCjDsaUBJQL z9@IGeAhO=n?tq_ih3Q}NRZ?y-lOc{*0*9zZQ`6TP?Y4Ys?OnyOAlRw*kJ*XLw4G%l zYjhz`XkuytoGZW60gZ>hQ?}u$ad%BXFD!|!_&4t(1&9*jR7^9 zqW)mac-v;4Z&66{wXrVgs@qWMs%IPLB)FgOo;%J)ru%K_9Nf5CS5!}e8x|QfwUjmq zhw+X;+sSvwVyM>@`79T!NG4C7x@U`?R<*oY_tb68`5J3aQ*LS>HQN1Zw4jXu=)Uf* zqgapi$iAud2+-+n14}1%!>$$cCG5wjF7JF8D}lamY>-Cu**F<$1s|b}aX%Y(oMlLLWaD11 z?J8(BaTwnhpQ%|gEJTT>j#OCqq)KXM1SC#j!cAsMSBN6=hJo3b>(KJc*GZVDckDuM z>ZvzC--|F1IT9aslt*nn^r zvhUHWbc#nzaMk{TEybQV)8IzOFWfX=a+~EE(+>k0tDfW5k{Z}IW!;9;_om!#b=?`7 zp8B428qKoveB#7e9n}X4dLYbM z7~bzQSmau-*Sbd%a)z+qjr+7Vp0UreeCE$b@8ZQ@FpI?Wmce4`$*lq5C6${`)NtAKRBko7o1KgX!A$L;gE?D&vKjDo>)sUAGfu3 zM_X%wjM42Tj>%zgGuX8R7r=H6!WpBF7+<=)Y!GK}`esdg?c1`#DJaQ=_V;>~?)sh8 zJpTaeC_+_=?FO0hon82?@FpF*PoMJYh{34VmKwh5t*1zVxaT&=#W_gANc@NX@ce#m zi3d3v3JmgQIlmC@s1Jm|e+3}-}hI~av; z|1pT%ZCuV-*eVj;vlE%{iAZ09NPm28JI$-n;D7~v>C6JZ=ZTD; z?(0EkQglZdY!U|#UXQN$bUZ%c58_z3PJZD1LMJ|KF(aslE%-@%c6nX5eBCuAEe>KEtN$WNGV){CjleWtSAdH8*6)@sq zDjP!f1-pGEPvyea8nc3`ZNDccHH;HkaS7KY>vr5}4TF5&qFlw3L18SJW5`f_z2Vc{ zLidW-r)d#`Sw&0-GzIr=(v*nT86=fWXLa}#EyZ{=VTv7nzVGl_XUL{WJ&KPrqB)mv z6{1clx=XoCSF3Br-aJB%w)fdcxU>}>zFJrlnpCK&yRD_vcG_+N9QwI*y*NS4@#M_) zmZ-h%a+oy^u@QgTlh^T{vCEMXy~z2E&&Mw6 zb83A_fn486bM9e4Hc-_F|FZb;q4CoEg#|YA8q+OP4pPbBF5K1J#>fuZuq>Ld9w6+a z+ama#+Pj6A=7mL`UV?0I2cS|tPA?kQ%a zqDDVWon`ARx@$aq&^vO?5Q2oJZDs8^4hdMXK6Z+?Jg&1r_ff4~JcNIoRNb?j^3@+Z z6tns9V{yQ?aESeM;xPDGU1N4T-cAhhyvcuLq*YI_VNoQZIAW*inY?% zdPjqMUt@|qU)g>PBOxeiUz)wYG6j34KiW5f`p*4Ea7**#OlOMLyt0MzH$y!`)yPk$ zP^RJ?Vx@+C^ZbR42H1(LrII7$1*HhH{L6sv+~sUbH0!CTG#Y{LOvec{QZYSApbg?% zWJ!Hlgea)0w-%FQ_e)R<`{tGMyyEVB%a1qYoBTX<9bLT^yCqWk-1NROc6vZtSi)mc zqX;WOOt)Y8dywNd8N+W{z8aGR3cCKe!qvZl|LAodC=FmB2~kFSFD}c$50*90bFRt~ zd#&Vb2%_{i;ByixPk!89n<7W+_TAlO!}Z&F9$r)r-N;I>ax7?1^Y$TNn-R6) z6T|y?0=NJqauj{YG5hMz+UDM=qg}F@70WtHTI>|rZ+N=VOL2ty(Axu^eBJlD1IhA) zU!_832vT3jJmLGYBb(RE_(^wxfoFVeb8I5^MmUq)XtU<|-+w+PVrFp^xo(@Le|4Xf zPS9WnB}WlKIbIl$VzuL?5;IfEd?F^bH+hzyxbA76X0WiZk|)E%@2GXqO_TAho>R;9 zNwVyr78}8*%zcBXA)ykSEv8NfEe+VmAhOJNi1p6}OEy1-x-6Tl^8R^mZH^+mgj>_@ zcmE!iPaz)BW|?T(&v;Dy>z_6MU-W1jsR$zRT8DwWuR!s{t#GDy zZ_aWA2ETdu)!X*UrFz~odfJ(Bg?o5yum!*QR+ujZIh}ykcRmhZI-}wzcwoUp+ZH3c zOmn46+LyFBKize{Smg(zo9%EVl4z-gWeQnGCkf3{E^zBq97rT}y84oM8 z&Wz1OMdjH` zPxyPAFdcU>_b)Eg%00q_C5FCZ2{SoKhU3J-T^9d~p#SzSy5EHqp8TKR8Ik0WxjjID zfh2|g?Wh0zpVOJ6gG{3!GJi#s6liG5g-akpj~$}Lax|n!Q7ZcaRF5w0`TO%wyI;O5CV?ILhr_ z8XBqZ)g!%6S9|{IvF|uZ&T+&x-VB9BUunKqSUhc7m#hi9mYg4U&`jIa9lPrwOuG>~ zBu0jd8NYYtFHCz>tDIJL-;M5Gor(dZ`o24tZgcy@5Wbh&*;V);&XSD`=ltx;aklp_ zV#OT=g`qc|6pN9`U5h}~BBP?psaR6ED?9?ctAUy??1OimH4f(6c8h;VlHsVfUf(`$ zf8Tt)B>0Pve((G!?2wBL0AnFGznY2qH@X8zZXU7xb;1@0sr^K)kCw}^wDNB|3Yq%t z8DAH@+5Cp7U)G%3rdg3~B0JR;<@7v<#;`1yJ7SD#5#(UH_i4Im-E!6SRn}L3w;?9g zWb3>hTN}5ilp1QXsVB!L8uL?+wxqh!Y7AY(HyI_A?)zo9zPkq2s2V-b*X#inOp$Lo zq_!Pii?&+GQ=?_QH@i-ZwC@K*IXDYd+*k~XtD}I!9W}va?pH5ww!b_7(%+`5tqm2aE8J}^ ztMaEDW{0K?TqcYCCByI)*TVs8dPDbb_LQrXClc|A&Uj;2;) z&iPckWVjHih1j{}(;5dD`{+gF04HP_aBZ(51)C-5zriKd6kWnx+g*zC=z{B1^OpGE zwH?$ks**8#3sSx?RcTw~U0e15ac$;7(p>|Pce6gadHm*-J1SNZlk`v{{+dLS@9dS9 z_mE^O+;XxK!unxQSYG#+mXhQ8kdkD99_fBVQYQ7S`iC}}f;SUVvRR?78>4zdh2>;H z91+C*0n3HL*L>NIe(_*@eER5~*7&)FVN?VIN?QD4cDy%EoKYA{u^a~5OXrIq(ui9N zMRE<7MHMvug!ML|*N6?O&PhpAY6~SQrBO3%7gt^PA251PcQ|7y{qA^ZrB8Jx6!ARD z8%27B^ijHZqXz0s(mV{QlQ~d$>{H}r)bUaw_IED)Y~Kft3$gNpan*Lny^{V_4djr% z(cR((_}2c7pc@f>4pAm<18W=*WOQwML&h#S`nt@5T)NCt*272G2mmJ*c289Uus;0= zqw;<&yvPaiP^dQ2F;pX-z5^Mn+2o_!G+MN?mOzY>3t1JS=1@bFQElZFUTpqhd>zVUZ=y45DY7+rolb{hn1mmYIK)xJvJ_(T0X6RKmF6$7?;l-xI%_bV=zN z)yYZ^?;efR9O&8WZ4rjfN*CPNiD{&X4x5{?vtjS|M|CK}vVdPZVAty``Wl_T7xSdJ z-D#U;r?3Tj=b+dhcha)@`2G9hL4D% zKt1$zT}|9j_#<6)P0faU9#jw)8xw?j>lFHefD)K zSr>{dSrh9XWdU(84?Wl|O&8Klu|O*Qq(J9YvGUNE`vA+!Th%LOg@P9wPjz(L;{CYu zYV-Fg@4cmacHGU>7v+B)#x#He^~Ia}27N3F?dZ6i4V^Dc_+~+I?ll1L$KEAR*41((h`R;d0nM z`{4&9oUtnK6X?t_TA>J(`x3G9L$L8X*0$pjD*kOp5p%yiBQ_fijoFMODT06pa&O6b z30J~}zqk`N7F)C~Z}!Qf8;xzIe;s6RDD$q2f;2BUu4WbYojUGv} zJ1qPlF$lMigiB`!>iW!vD_y5Ksa4!b^s(k+KKGHnfoAjSgnE+Y%mCu7*h)Oa(p`Zn zwy?W0@Y2|(rlC`~2qwY-Mios&0!_1Le9-V1qq{-i2}O7#^77NoANuGNGskSQgJid7 z<{WC^`q{=FAEM|Z4FH0Ly~4J@Wb5#SjnXtL$y_{rmF>9W;*a1wvU+@sI7JKGe+$=Y zRcELSUj)i69gH8LFk8mi1x3Di-^+?F%V$OVkL89hBA5L*&DUbho&m_wg=5~E372u+ zyR_(Mj4qvdlZu43TAQvBLs^4Z+gpaPgP9@RLXs$xzxBegCYzqk(eXe`%N9&o(BI4U z2P3W%YknP7P79$3xur*5d!Jl#ni_(*azHQE7}ORc2k;iFWvj$y;o0KTz@l4ThkS`f z*#LKDM#3;CXE~gy(_@Xmbh}yX4Qdx!aL9Xs$%~V|IA?a@SXnOb z_8Z)FVIx9PPuE}ZawpL%#6;Aw;Nd~z!bbC96-jEJMXq|~X+|*%+0Jjwz2Ac;ZPLU_ zzVO*HbVfaGJCtvV+Y9RXLVuhkcTf6=A%gN2Uym|fce+XDHPLA7eg(-Ov3t*UIzJa1 zZm8Qt+~#G(4JO~gVqeV$4G{;x$yxL$b0*-1L%B*>OOz|Kcu26>BGuMoFTYbHVevYw`B2CWj5R3L}IID2l zZrKo-Kl}Q>?5HS`5Od@hNim53hy?in&$`g` zhV=Q@uV8!7=f~al!~RD8ceuKs`dXMI2g!&I|1j07bi7@qM{0#girCYM3VbS|CK0cC zPSBb9c%>Yq_DhBloT_E|jZcx@V*geB^QYs7Kn;#;kV!EOKKDIR43dT@lX3d^A)g#?B*F;XJEgrBc->-cx5R2(@Sk<*0wU18EndQLnS zIo2LOL3Wn(v$G4dcWJ~}R!Or`0iK)PKTar|BM$2TC$$UW-&Ft#K17+*xPDx0WY^D-U3lF@S{Z{0h!f!YqQzC?CB zp^kR<0z_VQi*-4BVqzkQuz(2pe;lg`7gZ`Qm=65-aY)NF&@gB>sZ>vciKYzg{MQsHC7Y(UokLCf*6V>^9 zud59Dqom8&=cV49zt02uyZP6Cm9pL6={Lf0#EC{DDfL&5^<#e#Fk}A+;%1mW`cVCN zc|iKs-{^PzI5mTzt7{pnFfC@7s`jE_zd}=b_-o8+iiGT`=TTBWe z%bl*_#xGe)CCYx`m^92k=ie^*>!(bUDP{sWjUj3>1{c9T1^AaIfXe<6x>NX_kPNxg>u z|6l*t(ft1cP5j$#Z9%pLOt}@iU8Ag8uyZ;>CXiJRRMmrpuZ}M@Xb4| z%Of`np6apEF9RRM>zh?fom~*%CG$FWqoEG4ZCx-1_S$O~9yM4P7ye}ZH#6=GDZ1yL z;V2ZZqy@+K@Ci+9kfY6y z%a|*@Z+rpx_z>T#9F=B}=yoesfLTnfMIlmBWh~mduTn?IZ$PZexccdk#w)J8YR3h` z3fJ`Yn>TfM9>%vbVh%ChkF?n}l4a^N(S{3Z3aQG@MvnZdnqPL9+@65N46_73OX`n0 z80&8t>!y~9Xq)nFiQgHt<#R{|4HROVEn?m4ue|$r(W8=b!vD}{InBn#hAj@{H{ySa z()T7Hfz@Cb9rwlEVbNr7h!7vB-(fuFLokO71R(-g?R>ke;yY3V6Sd$M=3)1NO_Dr| znJAcWl-JCceG#wiR1YpdpI9U?@}96rQEbXYed7)?MPOB>BTlD^K+P!Q7FjuWnB3m| z)g5~KwxB6L4IH21U1XOyaUhxKsk-Pr_o>F4TT>%VfSEeZOgtnueL4Gix#p70ZEbpQ zHr`iXS?06Ni#nrEtJl_zv|SN%G$C;*oE*GjTKqUmu-KYZa20rup3%kEZdhH< z*$wiurugtN8oQ!m-VKa>lzMt%h)cXEgk`?AUiiWb7is^`)xx`kFIdHV5hC zHf6DSYgyRQU}oDFW4C9Oe@@yWo`t6CsXb@pdYUxX;EB8g-sS2; zYfGJ&+TD2T!A#8Ag`OJz0oJX_SA+Xp=!J7V`Y3D6v+tpb*=o@%)HgNf^lMPEPf6)= zVMCd_(YXYX=4d1@#t7h}NY^=IZon>dxva0=$^g+g2$EKp+1&K32F_+il~z?8EuZd? z+hE94^~qxr3%sNJ@~3-y@)gJ&Gt3708fDh`jWjAcNJ3ACB=jD--bu`mN%Uz|D@&ql@}qk^X@4Pp^dYJ@$LbgcSJdQ^VcIDn*u*F z75Y7J%_sQUdE!p;Vm^7mXq!oQTJ7?pMwte!dqCQDe%lRvfEypK@Lfhl3{l%OWFDry-IS~$yaIzicJD|TzIZ>FrJY?reHTeDA;1a#Dzx-CDi6-@Dpmu2 z&{qbN5^k`)7e?xb1eXq1r!UMlU5}PYvO0^vM z)Usz#6R#Hr3#x%(0f2}i7v?T_fbGz|HqQiw`222o#oSEcp^pY?v1;eM?P#I?UUh6C z@X8g{RLRvS+ZbB$2%$*nkCOH+{r3k&@@z*I!>-^YZwuYjp?_(p}!C0yB zhF_Z)uQMW@TfI^<&RUt7x|&C=KJkyQ`SjV%Rbne;+TMs@NXOseRycJ*inUChX(i7a2rdDwP^ulKVJN4KFjIeB+=VUQD!S)9+kgO@<%H*sAsu4tt$|Qn=6b z$Hbth@>l8w7%OtO!sj~D9RvY^A#hW(hILw;-G*en_2we7kP0%a2>+QC1g3Z{(0*>Q z1eWq$k-ojCGSS6)`9hPaBQlB3Ag8lI1}E%39c*_GfUy&m&z&BGomDwy(LURgy;5Sh z=)-g6Zm^wT^Hov3h9?ST@T`|THt61wi73GNL=@}9R@Bsl$eS zvjXY}4(fz1FYjG<_#9FEGT?DD(e^dv+0ObycSbm8lj0x(C%j+4HOdJ4eqOZWU}fbR zDkqBAFP%u3M88Z}MACW%mD!g|qQ;*_B<(Cg65v8Of#FvOQyB-4zW1?4o zEER1(hA!JC@Sl<_bOsO7JRnp2$lwrNKS0!=FSHoiFtqL<2>(Q+4UJP>+Q6?{`OL6t zV+Cp+T=JRm%|s@DlE%m1dErsUPpP_^T&Xx^*xPx*_w1c?GKbyVFT&-f3v+KjV-Ro+ zD0UPaUKk3*N~@LX=+c65KfQ6Ig4L=Xj3VA|s?MLKuf3Hn6y9rc*}3nj@MdnNv#%8Y zY*mlO^9gV+dM7M=YzZtjl$~edhm`fQ?nfsWRjt2Hoc8s)tSg$2ni+3QKZh?x+z+5p z`VceLQ)cf`U#OM|K5RH}a4$*`XyY;AaiEIt;fyv9t@p6q*zZhW7L2e~Hs0+4%eP;U z)xax%XXUZLN)H11T1+dPb{{7;zN$37GcTjKPhGF!!gNroaKhD*Y`}(ySJOhhLFOEKwTR^G&a*IXIjD{cN?O* zR+xM5YB53JcG#L5?gX!=OWJ}Die=8bvwl;O5srG{QdyPbdt0J6a?7wPXsg>v5k03RNs8Uz-Uzi}c>6c~n$n zT_q@HIktqjR!iQmUF91|B|meUCK#78fq9g8@1A(MFRXR>MfV!=;(nxh17d070p@F} zETK)-o13GQKv`y)&n0-%Tg|1ukR7pRX%9`JOeNM$cq{7RrYMH6d}C(j%0YpJ z2csYHgzdFPE?0HJ+nKHrqDWik6WT6)8qoPr>GioQ&!?p-e~jNKcn#dQp5`7yWQQ2c&NuyOqjVA9KO}y zi%5Gsi2Y`#2;cwOWr;G>nQOkY4$P=qx!*iz3GHNxbP}g4+iVC-0mxF5xYwV+VA0aX7CXW zW}^EiCGtLYcS3hqva*IfzR}Yk3gV{J!^i!YcYKZGAUA1klzjcY+BS$ELYJ+j+Qb-MJrNv+{up&!5q286C()c3HVw63c4j2} zD2g0F0E9$M4!@R`a4060nIm^zgkFp1HiSuO^h+pgT%nJOb&Ol}Aoime%Ubv5tln+G zRiQy|4{^e~s}D7CW{Mr111|bPHkk6aD`qu(k3m{}u`H`fCCZd_^G2&fd_(6N^09%K$G1JykfbEOa@32V-?3cWcys#H^WAl3x|*g6wp#XH~h_dyQCU?SSs5zGiB zGgd=L5|S8n_#|od`abqmT>XHwz&Y^;2*y|DK-6YDD$0mGJxfKr?)I2%krK0PG*5cM zMm6*#p9zwIIzGTbR1p)%mJ4iKn}z6&3M32ZS__04+%|51+@N8EsEKavLA8`A>(sKM zZx-Dv6L{j#X^gs(0i>g;|Gox++?kx0({V4S=8;ZkvYJ;A?G7ZEz1Y3VK`Uf6wnOFj`ids;f>y|b^C zjK{j!{D>)IB2tw>zz>Vgn2W)_j2qDN3uzrv%u1u(4i<@y|wyWoHfa>?$4EaH? z_dRLmAJQc%@m(g29U|AXPbg1Mn@_G-%tEUuP(;gI@S)jGX413*A~R0}eE%|m8wkR& zQK8LZzX&NSo2|G7>{IvMQTcS6;1gxSD201un@c0=jd^Z8c2amruCeIgDPN@fs&C$o zf#~P=cITG!YuN3o!YM@3qrLb!WeCP*#kr;ua_*C)zLp#9e*os%CCl^qA1=ld9`vt4 z+cG`z>E{;Nh~8?gWVrI%W^5ynU<8++()Ykpo`_l_4w4Ul+2)H81)A?}TH$@mJfcMr zfrO(-YsqY#Hwl1Do)_mTz6PB_D?o>hf}E`7t1WRw!oJowLb|kFhG@e3RZ+3cRt4wN zr3aoqUh~Y6mc22gM#y5&*GgeH`%Do;4|sB;E#0$CqCa^Je&%(OnP)H}HjR5AM4#r= z1CaP~j7Z4X`{Xee=AY})hl}Q&7oZ2#zC~d}U-TEwa^&eC2ErCapw(*@)$`n)|qpOVaACb_+QhWOjliQGsr+W>0>6`IPXIvZW?=R?q)7^iaSl zTou|=T(pXcDGHQfBYnajS7){&r9#S$HzMRz)Mqx+np9fWZuj)+HOtXvHItB2N-{r0 z^ksg~)`Qwl(J6zdO|q!o$?Y#NYwPB!6@{hdSe+`nu^fQKmm>oh*0(L*N58tiblP-qkR>H^nD2GVpg!u2+A`~yfM>rLF90D z{Jg@bfTs?1Y{@cKUtzqhR!!q}k=|P9bqw>ao}xe25TYEKSx-yeLLucL(PD_7XO@5@ z^l9-|T53u-Y+nYjqF)3S&}7{_XlM)jRJ?s^`rh>nx^CQDMtw7iZH=Y zg{0oSaoeLtc2uta>isE!yZdRx$!I&){S`b&9@gw?AN2LJ*Nk3%>HQ}8d{!9N2g*;h z$}?=zHs^dJ0;=Bs&U^vkAEAn9iF&86O_?-iBl~!+OuQekAtz6O^7=+?0Nz^;Y46ALRqd!h$QM zG|7)LU)HYQ)Cs2_QH^ic5F$RbUHY`P454|%dkAG?>{ z%T{|!|M&&4i(cEPWZ*p|^~lSI9#*wL&&5m2b9BSPu|P_V?mu07uhmB}eL^--UiMZ9 zO(VE)oe`B5E)S3W&_r_m*+-uXTYy2GndcTgdeZgoeR+Z{u2y8P6;=huvsmx>7cjm} zkYU7_bi1>fn`2@HotBq($@(176^IE!laYC8(3y~nJWi_aWxZe9zn!x(uT47Tg|R_5 zA$Xf#_lQmClxyxH`E^{vRDf8ON8z+&M%Xr*#9qA5m?w6iEXyl}bOCf}i#;qeFp8Cp z<&hEfWg#GZ{i~YWo)8`m341o-j|aauMKq~@oEG;80|JtX*LNgCK@7tO6B1RgD2eAI zHJjADK%E_{{*EJqfceG+O+*rd%9N9lBD9rLxA;L(7Ax~j!H^5_tk+~(O96*ga?c*; zkT9QPA|wakXH}$U;MQ7U%{$3@m2Bjqsp1n;+O%Qsdz|B85MgMWJT2*CK@*Wc!{vF> zwRL+nQY5ZNg@3F&u&;3hH6@5i)++R+H93WGgas7}i}YXJTk*qIF65rA?Xfk`Bz)~3 zz0c?H`Jv4C9m)M?L2}N@Z&6iq%)_V5pdF2X(Npx1h5L*9GrE=36-d*N7TxPeD@@M3CGwko}ys_smQV>X~AiD zzODJQ>c$Ei#;~;REpI7abV=9{*1WD`h>1wg2X-<;_LBp5+(V6{F8w6Osz#GSciM^{ zDT88YkhD!PdkxsG10h*nA(bG08X<+UPzJJHZB8S$TX*EG1VKDv;=gZEgb-5@7%g#EOX(9U_iyjMYAk#;Q}XHPp3fb)m` z_<%KtbEqWHVY<#5&`i!YG$Oqa-nbpXGd?h_SMHn^;$whC8uJL|ay zQ}ijy$ZV9^k?HM%eIYYDyOy+)f|w?_k)uisb0vJ<8jr0s`W0JTM0wkNIEe4S_j}#^ z&c|K%5*GB%-KC>Tr-o^LhAHrK~S+W>9Zq=J;`gC62>AiC zG+??OcA-Ve{c$uH+&2jOxdRO2y-~+8=*E!Gx?~AqU1D_Z|L&8cHpQ*e>?orOh`7#W zzufb{29$E~2i0P$Vs1syo}f`lpopK{$3jo%<=16DuATPzN?ofKKhH&gXv?fHi`(9C zn+{N%!BgHAZY;#rQ7#7}>42&2kaOo|U6Y^Ow*A~YRrslD`o898gZ4%b!hVJ!7-NQ0 zX2E9+tU%yMGDc9fU6B$pp9~%e50XSkLF@cwG~U%pECevkJuhaOYh5)pC2Woe{1B;K z|5@S@zO5c|dlGgPB{R|mlW;40=cewdQ7J%@gQYt?38q}=-0wLRDG$GVopf$T zo_oFBMXxi1a!1AzWM1XKPLO#O zGY^Z%&-BTepOk2h31RCYw;}XPKl_DY*@*-qV4{d#I61wT^_tf8yh}gtZj>xVHf6_p z-&t1mLdeKaHULG}1?N$08LU(f39%~;efH;i{jLeXY1RWWBN@1#W~S82Uew|pfIK< z-$$HQULHQ;he7~5NfA@I@f2!_zZ&1Z8hFES&*5R8aT%~9{L7NEX2n&x^VO606CECq zqO=>g8;YZuutSFeAFjnU7`8TWOXo4Rx8np0yT5~;@NUW&Zuh2VEho~*q`!8!EIa^_ zyoLI%YA1+k9Y;C8^tyCs`y^LEwwSdq*4WHBIAj$zEt7~ft8%G)HEwpp*)_1rHhxhi zBzi@BQ0m@#z<%wb1_lu9YmzggUaPjmtl7N|wabKAA!f4sTR6{$m(QFk6Cn5HhjFwL z1s>JI9l!h$OAR&2=p|hozeS5wzt-8&_^oh-q+WynQLmH=I%mgqCAd9D_2O!}Tt!Vb zyH_#=guogUAd9w-s3@=K+)gssxu+24GB7Fdm$K+hI`kiC-+Dr7^#R!Fo)<$u`pwGc zuXsBp_a4kk<95~n*%}@ER=r#j{dRIrXVX2V)?u)npT-MK+xi(V-re)PxH6{3U{cD8 zwIe*UXD{+vY2tRnnvBDxk#t)quM&-hw}D9mQP*`^km5)6o# zTdqZGNHuN_re3awgmKpsXqJuTiaJbqMCp;DoUhQ2l=Y&IfNB4u)KUqbct| zueai;1B}PCl$HCG3$s`9WxsJQp(5PsOxZJ(r%#yhR0@$_ z^~*fRW@BDerI)+xk6l`p`g~5?Wmxl?kHV(^r_}VW@gQq8f0xV9U|;7d2A>t29($Sc zYbRg1wp_}I&t$7zk@AvDb4h%{!%%n>F>wJP6lt&_^(dM4bCyW{wv02;rDCwYbjgkt zXI$*HfFBfmfPID z!NzIxOZb>x@aEQiTv}OwB(TpC#Mhp3<2@aPmmMpDfpc4Ht!;P`6O$~oCRn1OXF3|} z-W90th0c2#{CTc;vW2O&e*HG5H2I(c!bJ4&@V@9F*mrds?u!f84|k75i7)nmB`UcF zd`>(orxIyYZhOp`G1MWtF>daQ8}1*f)5t8wzbKI2p47?9%Xt_`6|Jn&dV}-Zoq(&n zFm_#(uhGtI=RO@%lCs$MLv>de^Ng1UtCxerLIQWH)n2tvw!Sipo2hx{`tq`B6Kyu4 z?=>lGLLSN>?4YeErRf^zZlDD1iz_N+X15X3jAubeyXfB2%x;Zr#<_5JjbQb{P4PNb z#GipDos*cJgHTvvTsQ%c*4q;tCipCHITF%FoWz!_ov0_Y4rlwOa!i!3Q+pxYuwO1l zp7aQb_AU8*GV?dv>d-^{`82w0xNJy;&@Kt7SxZ6Db2JGCyk>XQ;b z$Gi)gt)^J36?JynYgYP*V3FYm`~lP;A4G})UI;I(Q2hFG0LUNHV<>~n3&hkJTEJZCoRaPs z?A1p}X>N|23LA!gD!;w2^}s2)F?%uqp^!ZM)l}oqtXv24)=zBmoNRxoM0`Gc8xjiN zK2l667L5>i$DAT|D(};nHU6343LOAqSgNhk=(C|UCfyWb?^vjuTPNiDf(mt>5F{^e ze|`gn(k|6B+q0{#Cz+wGKGEZwP#DiTK8pbrzs&g&Tw6b;UdZFx*y$li_sd9e0=QBf zuAPCq$cv(4zCEvB(IeaF=!NmZ}p`)JfH`s zNA{c{*4~7p6c(-${v>`>YUH12;uJ5n+q;o@6>a=N%GeE3kM_{EH|FRqJgE&qH!(Oo z<@NKn$Q|RC@$^nwFuSK!+O&DTt13`XXrjTST@wgh6_A|0KxbWB(YEeWq1ERmYuM+; z$|Ozi5KZBiwu-IW)kxuj2(q!utwnAGnZm^)qf+gyc7uhw4+h~$@Z7)&;g_3MLsA`A z2~%e}jSJ_7I-a!UptQ2cLp)T@<`*qRr$5>CMq7WS2f}_uh8b+STcLwyOM_HPJ54&L z-S}cu(h~B3=pwDPlXNdt0?GwY1*|9+y%2!RyIHy0ktIt8&4R+U4WJf;v>$NkY1vp| zqhwwXA{6#C)dq3c={1tFE-`pvoZzLGaBuPqEi3?n^+A7ctw)C-AgrsjYmN`2Q&{m< zKQtTEM1;P%)N=U>O(Y3b+Vr3Qf7pA^u%^~+4Ri@878Dhg1qi692uKm6S4BakN)Z7G zAWc9B0-=SFg#}bPNbkK9=_O4>rS}qgkxn3iKnNj(+{s#ZpS{o7XL``-@J8c!TJ~$_7HhUaz2mHSjc|2 zhy&5NOS$c1`LmSrQAWe8ab45L;BmG#>@OQH)CgF z7Ug-q2JN%UUzricin8$gZ{UJ!qoPj=TLs)@?QoRThY`EIHE%!gk*O{>f=vz5DH>1p zi&w3xQ9uA>HiR}s@DUP=_zA}XYEf1uhY7R6Rnhg`sNX#p?&2tefDv)o9a;`wf{*Xd z7!rn?+O%IPG`gO+M`U!x#X2Q3+9EfD*`lN~C;iRX%fGq2y{3wqSf zdx`zz8XxKuIjkG*kfsfHsV7gEz;IBuNFaMn#7JknVJP=zKYPl!@X1$&Jl$ByF-MJ! zBDQ>aJUi!4W8p3honnT2Mo-g2eTw-=D^pp%D^piCC%@5@*NJD+|0!boZ&!f==3m(6 z*^Pfkd_Oi<>ZN%J9C(kDyiP7WC2bjH)8rg8KAM#}X4@2J;q=X0*%lTx(Ap7cuTybF z{gI%_Jtye-wHV$N|6SvJ*9Kde&u{4K&$YH!<6i%acIW2=nav|ag+@j1v-an7-8p|- zTCS|^V#uc^(3*aJ_<)|tV)@sK;}#>0FoSiAD7iMs6-r(>*-FE=-J6i?UI_P$T2)RE z3zLdQPR%RpK}M&LnnecWeyOWy1F!+4q3`O7yS}nfHkL!U2f>kF%BL$X9x3Zr5??S? zaD~j1i)AHC4NA~ntyl~Va-Iid2?{zE*p*|TG%xtmjz_sx4%Tx>1Rtaj?r%&FT6pkUj(vOwT#hPBYI`+33$y14coSG;1P;k%AD7ttX8^2bYjJ^hh7*GFfRa;Qb zWF6=qhECwt-wZ*{C(-fJWvo`+wo5U zrc=ouoGs@4nghcpisH_T$D(ldZF|PacC$~sog!XxW#`SmNc_3PJV=r(Jomrnk^njR zBS6Y=fd^p8zg{``j9S?F7NCAo8>ad08wA>x^MPJU9dur`Gp_tdjH$N~Z2S5gYsTzq z;L%-MOz$_@G3gNen^fj+fj+>k(28xCIl6af6URH@N9jlruIx)w!(-Mzt|f7 zhL%&16E)}67Hhw3>~a0k{eMVQ|J&9C^s)uMz&(eQ1^#Psf35m|@DNbQKL5|B|Me^S z&zk(B?&6<&=Ra%m|Hn0Pn*KT08e=z9Vp{S1`|%MhoN*cb+9pEziGt_Sr8lhXagVb# zc>6p&B>(kz{Bu+M^Qr)JV0Gw#^;L7~`I#i`JoizgEONd*-Xz4#n=oz)@|{2LI9B6Q zUBDju&;RwmUj?cIy*$9a2mHVEi*lgz%HZ`-?-9=%*q0-c-cf&-aQZKM2uO;L&Xp$X z0B(68^1iY*eW^D)rf98KlV8-)(a`__QkEyw&E^Eqce@;v$59|eEgskShBddU%IMLf zN48TKScNwcG=hfKo;!bD9#7u31;t#~dA_r2n=#D#@0;LX-yzWKI`HHZ`an`EC+KEe zzBj;n^W1)MsWVAB#%pc#A%3VdwL6SQ)@umA*1)?&U4;CGb;gN}RM>_1Z+6O7_>qCm zWWJT>E?l^-tg4KjbABL@mGn1}(LW@#MnFX#>hPn#-gaWlf^}&Fw2N7Rg{$uSw6?WH z$LK0N)RmtGRqLb&Zynysf)dIgwTsWk=&3|q(~4_pixo+|yhfJT_Dlb41(d}E-M(7% zfAm^Xy9TsVGf!v@sw7w+vM{z7)kB7 z;P)7R)m*q*TE;QnjHI}B`|y4vPNK(-jYGJuUAxwGk>t0ui`^$9NWj^Y_vpmKR!w3L zlUR@2&G&sLH3nO@C6V7%}`ZqKwqPESBV~Sj?_~PT7-V$Cs ze%7$DHaX{u4hHY=sGUQqO{u|(<|Q=Dqg+s?kmoqk{K>SSTz$jDBeyAc7A;+G;{H&n`8=I674JO-Gr1rRx{1djB82jU znW)lW^d;4La(RNsh{%z!r0WcN2q^k|->i490I%Kf=8rSzAMGEf*x9y+Cd_XfZoqvG z;Poi69b!Kg8-i>5tjkRQqZTdf5N@oS!@?jQf@rhO{w{9(Cy3WB&wVzQ7iPbijzHE5?!C9+dB`kz6I+jps%K$R_jNP89(w zfP|y`M3z{qzh#@&?`vxae!1vKVt{Xm4g42Q>cK%FnEL_Db!y4tYQbBtK#oFofyN78 z0+~}K_Eq<1Rqqii?K`Lf4m9>yRArc|&{m~JYQgD-aqTAcf&Q6$Yf*T+xy|0IJ<1Qi zQZSOvt>=~pZq)VHQ1Tvj;{}@H@S>c`B}{m&&@X217HSK7_RSP?9Ijq^~sEA_lpWP(q@j&orvp-6vOF+6pq|GKYHqsLRFZ& zQsH@L5YJ`RdYTS+YCU6uc#?0VoV12MJ`l;y!%zWrVV%p0O8q3}1jtqo5)FA+)XAht z^G)l7@yFr?d{kZ$y|z8qYnv7&C@I6Ue-{)1-sdUc@h=<&e2;G zA%d%LE_W#<;x}%%waM-8%;tJ5b{%vXSnkaZzU?w>j^(qN;tNtWL+w3~g6ix~s1;^7KYx=V<##e(lk7LiV5Y zYrmbKtO8Bp)b=Twu9x_K4X{;WDHT$j}gYb1h9iM}IzUce?W8#^zsQ|5gj{tmSvBk^nwduOA!Qp<`x$XbxRdB zDnC+RKH(R9m_#jFgmwTa0KsF4=@V0O`upY2QB~D^AJ=P5_F|^`6%B@LHc4|1KQdU) ztE!9MY^-y5!4DQ~UpOuSw(tr+5W7cm zSG+hvQn-Yjetjb4%d>8v(Qm7uqRB?5?3COl3a_>gTzo=c_eZ&YfY^-@44k;KEt)S2 zg!N4HYw?@7zNNrhg!i@p0lp@c)U8NVa_r9wt7PQqB+mhO#*>Kw-<##{^55(_Le6(* zqOM6Q*CLb%7gkX0hE1rc3*HG7_Pi-!oUXJw)!A5_8WkY!JE7(GD(zfx{mlHAfYuea zvN;)Jn;)F6(RxD{9!)4)wxMwm@v)QgtZkvH7MD$nEWxivKlByCsx;ADzpcPxmSdgy zZP-n*-Z3kU=(b{W`>y)F<+rA} zHTr(;LHm$ubbr_KHBN{lzm)ji598tizAKg;7X@t`XzEv=-S$cv?=zjaMV5H@#7onW z3+8HLGx^-K-q4~!A+OFgZfiNStxBXgo>C-38sZ_9e%%oM7^JW}7Nw%>4!zT|f#EH4+O@&AHuY=DW z#|&QJZ{wt1WBL7E1*u=$u5){B1zHq`Prp&`;Pt6S z(2SGtsnBd|pMAcjo%kUD9Nb#GiO_diQ7rBn+@9lTuM?B`Mdh%X-2t3SI#39oG`-DC zJ;kfg0s!MRmIc3XA7!BRECohh8I*+Y`{%RL`f|1Ivn~~)l4QYR4ylkh!~H)FF<%uF zY(BPzW$Z%*=Wxn%>F|Bu*7kOfuHx>;T!DKs(&D~)&LEN_xN!Zm5~(}S$w}+cE+BH52w^Dgr{CZfF?jg9T?*P$u2e$+9H(QsccPe;MrKi4aH}O zw`wY&iO}P6{A&$K9(iMddl{Mzt%IzfsP@py6U_7E2A%zl9SKMCg}s@;?9g}56Ja*8 zT*zUI+_q#KNaIvpC%nMA=XPs)Py58>ZTc54>e!q);I9G-_<$jlq~Vm{d55*^Wxp0! zxUxoAb`hwt@LD^I(9=6AAOh0 z-}&lRjn|V9*!;WNyp|C!bFs;*mHgaie7;=Tej0^@(;C>6yOUfmzigJnt0bsARj$jr z71VlGx>Wti>tN=+E5a9Az=Vw9NzCLA21H0awXboW!Go2LMYDTYd)!OvkmV%3lXPUHwDRWw&MA=0r;Aw4n$F^8{asx77KCg zOiK(Afk;a!=-cD10*BHJi9VY^$7AF5PP35C1AHP%zuOe1vJ{k^koLQ+G z8+gUol6@Djl1(78LEr#VsZ~U_wj3t7!Um=Fjyl>G_QEXh~j^aeLW8xw7yr@O+faP_L=xCH@TSzi&(x=md1X1Wz3KD{fv<15GLN zhT^Fc#0I>WpajBPc9i4UNgRC=N^AuJwPiN*KjE>O-aKhbVq0Mj*EEBlwoKRSz60o* zLO8|aH2Glz$Mzu)5KTKDSxJrSdN{?A%x(^gY~H8HK>x-?L^~S3qi<&K8sp%=3T?C8 z3USWOJy*m~XoE*^|GupAGWb0Ji8Zl2OKeqql)b~gk|m4P8brF)jf)6ZFJJr5g|&$@ zc@{zNmryQ+JtpZrzjA*iNYLZp7CxAf9*N5-=MNI*`HJMCI@bWEtYmNYX#LA9hQ#;I zZj_Ms_Iq9hrQ0k-S#3V#y~AaUu9zr}waj(n_vpL9!wn|%+f+44Tl}Ut3nCw8$u)|8 zcg|JllN8)HnQf(@+qpJB1J=0cbd-`lh904{A^3Q2l&-kOkJLs)9Agmu2|D%lNT`k% z6*JfKc-D9w`*6RY?0fq0%M}wZ`^zb1=yCeegXRAF%K8<~rF$L=Hl)wDZo>`wukH-4 ztHNk`b1AZ4O=Y@?#M4B>b?#0tPU2Ay^vDyY=FzEZ5PgDpfItM@MBH)ghWhb=&kT5g z&u67oW$j)N$j2crrF5D7Trq3dz_~;3EZeH-z_5)flkD3{h`dC7_34m{B8g#Fupj(B z{BrmU8elW*wEto=yfNOqpYUmTg-Bdr{i#;+_z2Q#?JVyny<{1kEjKbDWxeoO8qc2h z+NiN>!}9e-e^XOaAV`7&^#$;@PeQtSRAuOP3ji^T0fk#|n%=y^)-A84o@+MArS}#ypT+P_h?Sl=?u*s1`V8eCY)-%kKg9b`fH4 z^n@H4#B3b#iua;s_yYnsQwd6~Cw-P>+pDf{`~JYOP*Y%M0n)k*kFeApKFS0g++wnL z-G72DNkZ%TDM>!I;bOlY?_=8;6u(wYt*IT#hSQC$`pJ5}kozv}skfE)!z^#^{YjYpfRC67U> zuTW=0pG^~8{f~pPM+l**KLc)$xlBLBBL^G?PDt9k$YDiUK3yMWZpNo}NPZnnvON8F zNwEWBEaM|U!H8P@;}q`?+eE}3Imz7;0pGLXl6TM9TIy{o1cn4*UB+YtFEQ4@aFO;n z(c(|VE93Q*QnqN7^fVI{0fDm@Rx($}kz{}!AYy2`+iPPc*8=xarHs`^df9Fa+PN_F zgUEc>$3}TBm-$u~KY5rwRWvyQG&hwT3xsH2LIm9fbo6&A?l>QhrsP8zz8H6yjQY$~ zz6A@S!A_1yB$^7FJl~&7a%kC4my&qpM z${c0oQm+;yt)KdMtm7nYE#z80#bv+Dy{yA**L>MlTH2$`!+WuLq4@Ha-jLocmL?~( z^6H`J*GhvNjJD?SrtdG|UYFp#1zb*;E!SIo?rOXQl^fHspH^A3)8st!vi2eByp}*g{+aFG4tFhOVqYlWo^FZ@_?sN}5R zeVQCtP>JMPT|U3@RT+w1s&Av%zx}%MMG}8Obev6wEG#u%)gE~V8+D#TEc_&7@Kw4t z*7%4XIe1aF{X?4Y%vhW1WKmEqC8CyjNxD+AMehf-X^7o#3vxcIX1(p%X3}UtEmpZk zv#z#y<&cYi&DW)SeEW|ZB}P^+^Y;fG(TUnS2BWKo>205;VG=Dc+^?+OaliUfR9s># zz{<8hRy?x*(c}PqMaXvLsjd_rInrk8kSbK~V*Wr&`Ym+D8YSHId+ep_12tV2k-wuf z7^5~6HglWF{4eDT-a@_VOhKv33n}e41tz^^N(@TW|BIFWSDN@w5;^eEL9X%v(2?UH z-q{9B9BND*1mx{)0S*UF>{u>ajKnDqADjapsu8F`8-{V6XlNC!9sjBHTTk698;2G@ zi^(@!^%=ZLhtkGIyIk2*yIYOWcMUq#ok zfG4@8^_M5%jl@%bk^w*$$uDIey0tQ>wMAF*SM2ERPObdqGpx{Ars7x#PeIxgJNu`o6DZ}m1rnPn_z1M&z0V)KU6-NMRbSt(f_SSKH?=GHx&n*f?GN4_n)rEVpaF{sFTceE$F$>h3;u7tMk?=A67 zFPCBv?Gv0!AjU?!tg}l{n;-1uXOzYM_LjP&dy%U9AHFCmm9RMZDRW}2{%D8tb5;1d z>YMq|e6sh-pP0_}J0aRiXPvtpiajtPLwjQ1X_!K@M6YsJr=kz1dJC_g{S-C*bNFu> zocu|{#{xaVz<2%v(T`b4yOYbGQ4ZZ{?l=qYhd|Vw3qt#KDNOL}&qk=msqW3N>*`}1 z`>zY#ys5psvemPtlPm*i`;z6iiBm+D{TM;L3-sUqI5i6a`_uK+?ptn0 zF0=-{-_~EY-*E`?YX~^@Mj5S+a_eS0!?BiMTQ5%gy>M3z(>-h|IlHp$dXkA~uT~^G zzSoiL?hrA@1cEMYt2G|GAO`qe^3jNaW)-Y&`q^`5DuwFZUt7Cpsi~Bkx+TEi13^3U z$>+r?>G!?GCaW!m{1XNF7h%F7`^3YhbE@&r&v80D^|y)mqG@CFW_(6!ZZH{nSSB8Q z8uf!TDZZ(4I9wXbxq$%}x#wAYCAz$pY{O`5|Jz~zXWA(6<3V`&`mgYEAP~?#((;3& zvDAfRfcXdTivczOCV11b);0C!v$~#RbDRK?JLSKr^T-5OVW;H~;5Wg+_^Zk{BQE6Hr)(wRML?}?|Iz9d|o{O6k5j_S(mhcAF0*d42V9&Uq=96K& z>ulRwmp2xwWYq7WEhR5!z_hsn{ZUpsF%E;{#29-0Sf^V*MkUI+!uGpMv|YEIn3K;I z&*1t}2xMMByz-*A#S*jw@_uexLAI)vT;oD)Yg0>DrF7Kr*R}BOzdrs!@kg3F@j7+7 zUni=*fAAT}l(*rbx$-0bExRLVKjR$;OVixFK>s~f)#LM~(m8ugKgc_aA1yKFdUV&R z^n`5(!b^X#NubdKM%v`alyv7)9-+Zr?w5V1L_H z42aeT_SYWzXkA%y?fH20O@aEPivL2H>x>a3WkQWWO+{Kd~^8&4v>D`psoF@3!A z_O~NhJ!)TA&Q3~Kic3{)cXf4LSCiTEQoSZsi7TmIP^_dcCRYD1O+h}319WK|A3&Ez zUq=E0`(=V-erjI&{#L#MV{da1NSVkBjJCJ68JU?0JJ{}#=G!NF_BOj!aR6&-1Ok-- zNT`cNw2dh*zIYD0=bsssi&dMkaoA!gOb!?GqDAjK&?@clh%(k+{y zxSOVD2a6-rRJ^#?^~tkoa6{bId#UKL(BIOO?K21@9TPBX-@bl#p{Vue#dAxtp!T%i zvl0dy=!Y`Q2?2(#`Y+`dkuA+C&8Ox}lB+w!u>uC8d%SrjabZu=RJErX^xt%g3>>!< zg4a1(rW=-gDftk9s1DzYqvYdJmWP`x7@k0}m5oe$T(^F=h@fxtiR<`H=n+5KerbYp z+?DJ$8``Le)MQ#-WvMxGr!aHjFpKzMe)1lYySGVej(!Kxzf~uH0-}R~H3Ps{HPR$S z{cFu#~ZG0jX=7>$;6ha9t zs>kjUVM`A>8GgF^0k~%>+sV_?L%A;bVh9-iJ`)xW1118X?{PryT>M3+!9Y6DSsk2t zVDua-@a%JX3d>h5+!_zNULuwV5LuQ*Ov*f)CN*Bo8r23Ou+q%2G)fpVRa(6_{s`TycZ>-)F6B}aX z_n$sOLZG*k%;9el0Zi24GvA|j#T%9b!i1OdxAR2KFTlU^qqBu%!*P2L0@tU`*r%>N z#z1N~4rdXB&O3J;rCkm@vn{}vl4-f!Eq%u^s3Q5@8xZ{cQcA+52W;NCL(+5A9D}C83|0Rcr6G zG`!sFTF(PHdTUX&NBv#5Pk!?W1R8t|>5sc*e|68z;VOzN7p#$@w_f4pQG&?ps@G)J zy;X?fI*-{Ibhy1r;KHnsq-W8l3X08&wh>h(*t<4frHUU_q{fsGgcB$KgcHd{PZCU7 zkI?LS-JJNz!KT~+cLG{g*GwDcG^VtUF3_f{h#&CYD;_G_^bMeuU?(Q4mOwIP`(4Vy z5V6Kfz{=O!W?p}$Uoetc)Peo+b*nuf@bWIis%eY3JIPHCmwy@z8o>0_FN*y6+E1RurTj6Kcm!)+>#8vS$#C3i zziu|%qsb>fg`-AM0H4~!_|9qRiHo#s@GN}vC}jqnsRuhu(sdC5T|_k6ECxB3HKofn z+H?lKsGBT0nKbMYnf7rk6x>On0}|RmhjFoQ@(B`=5r!(0m*Kn{mr!5} zR0%qQi#j#QGJn2!p=j*`HH9sYtiC^?;0p9GrD`BBZXuweH- zYQgR(!+;eex>2+1H1yh0K|nzt8@JnJeARE?sUbY%c+dmO?m@h60)g?(7elvXt$~R{ z&ne02Q9z?&>kxNEAl14znuH(0cpyo;C;Qj=-x|>9+%3r?xAHuB3YxPyCGS!8Gt5!6aIj(Vf@TSx$SDnK?tfi9-+vdyLLew<3rBr=5M z?vBWV`W?PNVx*Vj0^4eiUp;K)ScNdA#d*=Uu-Go--B zC|zgF?v=23RJJZ>Xz1#9YBJ)nH@W{46n%!UFEN2pA@gJ%B6fsv850pc-}o1tjO1>U z`6Fu4^YlXdA}GS;T2h&c!5!`Q;JjE_=LAa*P?OR!l-9K2N6fr@tG`a9QS03PnI-Ws zNr7+K?Ofj~EeoRTS^U;A_tZLl$N{MnmzB(4LsQGGAzP*&?PCc%KF&+yw$b`_u~k+}rQ?_=bvnKE3!{Vk z9Qesc7OVi)qDOR~2pfRlhjoIz%$8*FytaSStKd)l;&wIw*54g~^_tV0?KC*IU^lxIN2{IVb(P6R^4a65Jri6bDjo~k@{K6?TNFo~Vk5E= zvw>&{O|$E@RA%XA40LNYfAH-HhzmgvY@p}~7`wT?ruKTf_Gm4b z?rlyvym%+I2HlA}pWsC}Su4c|%(O3}x1_8$ZGGg*O?S{(W>qmBBhP3{>0pTOSQ(V2 zX6+$y1n=)OgFl4Mm0){1m?ZjA4}XDUN*24Pun+2=Z>}oShI#$k_|6b7EESitgYwg# zjjNA%O$nU;M#YyZs~QkXZy4d_?4sq*p?+NLs`IK)!NM}k-9mf|7f|b3(lPt4X(Qw7 zQh0_%0;f{kgp|bo`)$Z(MI#V_(a;ySFh<-8SYYbyG@J5c{HCk5Aoa*$YH@bks*o z(IzPa*_!OBP(uCg3_ED@Bv^8 zvIIu1$#@_47yRP=HDGb}lSf{WCEBn0K--1}I1)3IPdSngcD2O&L{Pg%4W5oLHAl55 z1%Ede{SoEar9O+4QDEgL7|lL zk{-11Zyshntv3DT_>M+ggtXRSHg@szZdQtSoPY7fyVU`0t#sB60VdBD;#1F%yYjQL z?ppe9yj$o_M*tjG4=Oo}RVu(PXoZb|nVb>xtkEUovW>I^p!+#EY@2!Pn%S>_i~3W*XExLy1fWT)3IaG05s}&Lp<@%N zQKSQPny%ao3uI;B;RMnfCzPL(1+cHkew-?)MZkS1K7z6g@Pn=xs(q^8N+IDKxeIu{ z(w%MP9jFBSK%Pf%NPS!h7mF?W4`nOKus5i-bGaxMJHnTr;(Y3{`t} ztAhWbU;MXDm|v`c(JJ5x_k+$LI$lsf4plajR)CDM!dM`^0JP1r$*bVm1BghrR2iG9 zX64WCkN0nGZb}2lOMcO1w5m0=D4;d^8o~F&>zxO72U%IgRC#Vp6`F zYnh;JdcbRY8~Ga>$8HlQc!*U?KNS7oz;L#>@((5lTg( z5h$1QPKC3U{u+X|PlNj%YsROl8 z)Pd?MlTbJ%uTt0@EjYc(!KaCN#lsX+YdQNQR|Q?Jrufn6rv5Bv=l)Jg17vGg-{ubH ze|W$D{^O|w%=+%2^do14Kp<~!J)GeHA!1H3p$$(JiYorGX2(RG8U$a$E_aSq5gNO* zUUq8BjdgN%X<#3Ogq@}1f8veKEIF4+g5^xYgvXY?U1lDT46~Hc=S>eji5SoOsd<-D z(|ZzYNNjHiwiWIS;fucy+G;VzV|5?9)&$qI@12U@4G0bcr)8zZ&-op88ZR1Xqa8Q0 z*VEOv@g;^VT#r6tYS)sEM5DP?e9_F zOui>oozh^wQ|S>)ADo%*RS-)B0^81_{>{^D%~Je62Kkg1_@NpoooC^DeBn$I>vB#! z!h|RN@d{SGe*vs>3EMKYJXe#P%y~ywXN>bsG*aWyFNPnf?fzNY0pu2#9#&4Qgn?i5 zu0PPfA-&&un|yItrL!!H4{4tNn@qKrR>wJ_Gt3a>pqE}Mw%pL;XI!56lc6znjv+9J z?>Ygw=XCodv7|wX{ZL3;o9{Lk#OZuPPA5^XFP`IT)3A8GvBRX&my)YQm;w7-?nG>C zQOTpvLH;)V2Ft8wD*hF?jOUumG>k3Bzi~nTf|BH30Ep;<@?Yef9goTKn7d;)r#L=Y z(|^-~g4Jj~x%SdPrSP#=ny#FRSJ?7|;z#oQYq(Q0DYr-r>{{j%{AuuxsRP9XnKlu- z#zWKL1Ufi6BML2;2G3~X>~py)#WiZXqP%t;9}@F_9J(6tCzKCILa>X zvG`+S4OTnKG9qU4Zg#xDA`%{R%1WfV{zYQV&3!ebOo>!JH)}suAe>lMBGqL~>vxYm z?^a;+uvggIiLwSy&*4S943Qbz2{Iqt9=Ir<=+wVWbsAF=*tK}kl!Dx4hS4WAN73cq zo+fAipttBMLpti22QGIhR|pqCYV)9@Rn78F6N@*iZ-wu76Dpp&4DXbN57%oX6ShiW zWnFE)o^{~{xkZrB(Ilv2>dKQ@tO+47Tes(-vODu-NDjJ!yf9+Q@8^{=$0*QUEKo0I zGbTz>pyk8>%54hrRXxzjPklFlh@bcbV9#VxaDQboFpy3ljJwg?AdHro5?a{b=ckQw_q0^GQL`85*9R3v{%g9QhU{RYj0FmxSG(ZS-pH` zN{j22ZrerL9}Vg0{IJJYd{k#sruo_iH^g-xqZ%1V*{*)UCiJ?Q{Wq_@iblujRHx)| zN=}zjW$7wyVii+f)Zmd-od(MRa~93E3k-UaUzVcgM_TUSiKb38+^dzP;F4>RmbCGC z;Y4d=!}y7H`XnN7FFe<5J!WdxFSfXbp?se=)!T9BmqE};?SsJd@_`33TfJUS@D%50 zVThe=F7PhMES=h<9AJQ=79`~>GV2zJ~h zkBc#v^kL(~s3z1Ry9+B4`M9_#-vAhgo8jUSt(dz3&P$kQy9*mzZ*y5V9KsEXd;bJC z@^%#)!PBB;UOo3C9j`bQazs;kH^ndId1s3i$abd%)uKONT!}8MOijF((M3`0-a;1y z#Y<_VNS3@=U1 zncxaOJiP7QRU$O*QrN*0RIpJ?Y!>o}8^tQ=u6=bG&dl=`ao6GHEP6QqXlrMbrBV$ueTb8iV#O@O4vs+M{L_hHUD~ z$;ulR)Ddeoe@apBH990m$^@>FSLA>>iuWDT zz+ZP-n%~B>Ys=O5a}peq3cu^g8ipvQC#(;aNKfuk83wMpFVI^g@@6&4%{`~4X9{&^ zMPlBMmlI@w_Fv;M+jmAFBq2MRR?R10bPj9_CKj%Zy;YxC;Vs@mq>qbLK0{Jkks20x z=ih3y3LdxWY*-Q@is+l(_E2rFQWcY6LZOxpi(-3|Wh}SfJNG-astUeXyC<&A&hljj z6q~$EiKpdFd4t^K0thcsr_Cc_V?`soHznx1m*&xaXft1vI4cp|Y50f4ukalBafW-T zKj}zp=LVBEwRoV0A$AeB=cp;^QWeE0c@0kY7Yhf-4NJM$kcoVO5{vrB|l&5P!@ng^(FOY~*E zO8W%WUw5l-s;cB03TTO4_2;{5T*o+aQ6ZW0e#eddb*b91@pio{6jHP~WTBJ!x&Nwj zA>s_F#!_JO^#kxwI50+A0It@$q8cJ%{$ z7WA=>)a6ck`br2|?l^uiPOnU6P#V6mpxIBXBs6NKPwOT@G?_dJU2kyP3Gly+&nn;(^uXy9v=Cu zdwqzh(}9PH;?F{wa`u&r(f-HT-DsOcZhD=XvGk+H&8< zt1w@0&$dIdT@oYy%XKs9%*vn;yXT6 z{6-pd@hUPsfR*1QRR-(RcM~Detaxo$oG54h?{V?JFe&N>)9MIE4q&o9vXv#!D=|mB z7syOnFL9MgJhh(!ns+%DA>bP_F8(*W3YM-i4ZGam>}=V}uYyL&#zMocFXX=61%}y{ zOzmD-RtrG;wr2G}Td&v)`xQ@ed&jI7Z9H2HvCyh^YXMiw8nnnZjH_0RQ%5l}wE9ra z=VNxO3MqbXx>E;rU*kng>E$)V+u}mDN$ox~_R%wmql}N{5Q96IZ9+76;^Te%alw1} zTVPUhxk8?C&~}39g$g}IEtjt`T*LHGZ&6*#82Y#5!$0fl4WB!xJ*c_+>q)Mxz|7Cd z*9Wa>`(DZ>Ug{Bx*}Aqsznibav#M*ECb7k4^83w7Vjv2ReueDbHd^S-kh$|4exQ86 z^VsN4M(sY*0^G5G=+vA|J~d)F3i<_;FU0z#+UGlX0zLpL%E&cUndYkW{{#I4wz^Ad zefGxUx?eiX;;4%E!y_c)YrAuO__0*gi9R|9BmPn$zjn(LMh8&VjsGb$ar`dMj z_$9e|Q3=@S?P>q88fwT;v3k(j3GF%))5IMoDRSO2Bv`4({CClyd3(tTS-C7p19`pR=t`w=s>Z@aSJB%3iYd&!E z)**HIU$PTc2kgYk0X9rpyUxM#qfB;RkzC*4n(e|7lxAINl?Y>>n>TM#aWn6@{WJZU zpN*BLho=jX<p0JAS`#M%?( z%{=^zNx6ZZf7X?s{p&P)ogQ8aV(l0hqBa(PW;Wy)TTo(zD$KKlv}(`NNAO@g(p@mL zL?03(w&K}p>g4qCaFdtwIrq9Gt3%F)458Jo~@O_4X_#<2>7G$6;jKGJ10E0ipp2Wn;zpMN3PhVU~`KXo%^H7 z1_03UHY)gj-$WQ!@|chMDPGKYgLKx|;bOK;w}f+?qHGg2A^xn2r1-UjJLFzH6kf=j zT=Hb{Co;`?sQve2sI2qJVcfJcVq4!W%LZkoYN>h~F6;)A#kk^F;`>TRRpiFqmq=~& zVG;)O36WMhFRRR>(02d_HovZGanJ8=)tWdrXZ4tL<|lKC>#h^R5Fdw~sef`8la^Nt zU1)yamv(Z-Z~RL0dJ>q=JK4bb*B1N{8X$WJw4I$jNT|Cg-PL07L{9Y?fYXH&XV|qB zMHVBnA@0pJt`DAJAYnsFDvuOl%&+M)7+wh+U+9qDCE|E^M>*Dzmgd`5Fqw(4OwTEW z@80x@FXPTvQB@W3ym{x#OTALD)ZCix@F&er?7#UK*AIy&6o+y6&r}=QjH~U-ltO!O z!643}wfE`E2@70K(XqLCT_J}QJ3cL`9@G6W=`&oaKozt%s;(Ct%tPyFEfnr_xt(6! zR*{pYmXX0P9A}Iu$vvv{!HxM|Cmz07KuN0U*q=VMgOPnQ%hw~M?9r(_Q3{U7TCY%a zu;54bDpq+h#2F}uK%hy^&(YnPPa@)eciO>hHRt73K|KV2hv4pwwh=ogIH4r|esmoM zBF^31d^ddG0fdZm%1rcvBcPWXp&a!!Etbgit{1zj9v+<@=Y_24((U(eFMEdTc5Px$ z8H;r&H-9Zx=yHYUij#gFXmUxmpx z#wYD|xp;1#BV)d?lrPM(`@!z#DA|C{IlHp+pJutkp@Y|+uRzYIP^Hzhn-f?73o^5c;Jq)ZpCVkV|ZAYk?rh1Y3+$OXfQCivXw;5L zQ&vheLR22#w-ULicP+U&0A!P^&hvD#eb?LdiQh* zoiV?@?-4&eQnI$oB!0DOpxj<4IHoBAHht}ri0fb??&MKDJN}hqh9%8xZ)&iP*Qe%n z|E%I7iv}L|^qA$Z2?wo%<>LR7a3I7vuc&y`8zl34L>gAsH4 z9RH}1ZYhQ=oTu4TaokieV67>p6a7lJN(H@JJpVZp5EgFV!ne0~IITw|4qj5g*Vo61 zEtoz3x+d(Qx2WPwa6~<(iN^YFA_h0IJO(6{24NYjw?MVrh(nDI*INTtWeiv0XA_=J z`6NJxH}`g&3&$!IZ*$4&IHd91bk>VccNuy`Jeyc^+5d8*Lx0DWX>kq@*wChxJ=ac) zwidr6rsw7{3CV`5YOOTGYOlLXiF%&Ay0Tv2+c=eREJ{sHe!uHl8U!-ZZ1(@K_nuKr zVBP+(B8XB45gCxCj36K)y%&|D(xgjQkzNHt4~U8=(p02(q?e5J7EqBQ9Rdk80qF@O zKoUX%ByV7zXWe_(Gcxzff35e!{SX%mIXV06v(GuZ{Py1dOSJZi*y^1;@b8SCBPWoG8cF6(=X8ov4XA*)bm>(=zCC+Dd8`5GehRdEEu z*0O3F6X23?*C4@T)J8l*M~Gwq_FHmXCS|0)MTmQE5XQ>O@%`J?=QbujPY20A?c@9S zv0%L@QvSkYR7u%by)Wb@_JJ z48pyB{{!fInxd{RV_PEiUtEu~5>C*p9g!ySFVZvwB8FE@JQ|IUEd16&RCJsPsC?+2 zN@sXXr7!oftJLV=IJ7vJsXEFx^iB4OIx@4kc&6x5oxhHaGhAA~nBW>QOuF4sch(dM zxyV>s&|_a!DAgTrzJhHjFQwd=KAzC%sKZ5P94(qnL%=n1w646i{Hfnsi#I^i+?p3s zUzsjvK=Nle2Do$R1AcrcSImcbaTC9+viM(Nr~fL9_kVx=@1V^8@#No}_&+)MPfq+F zPyXNW%_xbDI|qZ)5et+xQ4_rBR_V&K^G>z~<;!Srt~d4%W`mUumt+KX>#F;enISO;F){dm^mEO{%JLiF)<^9^^gDb$eH%aH#T(EhIz z^Vd%T=2VtT9r^uTV2lr=S3f!~e1uKFh@(-W>-Hr?be;mj!px=5;-cw3ptOE{2A$mN zHER&uM0DeoD6gEV`U$Ep`4(I0l`}oa`^dJ{?Tz_)@B3O&iqKM>{k5&~Pt~Kcc>(nv z@+-P&16HL#yQ=LeD`qnfi;-sWUaybk(8=k#-Hj+wcv@c7!Jf#_d2#E8dvDe43u2s_ zxP83B_l@Awx^<5`?{Rp8WW*gy0DCq7)lMAD+o1|PVbkI#o~E3#x@YmqiOa`{J(Yyz zE4vyP!bN)GRA(MaH4ZJh3S5@%aR4_a0Rux80j+r}rBhLRiR(FX}ys3=spFsl+}33E2#~uArnG z>)ncX6w}Hkns17kSB)fBE?f3`6xIyL>{n)t+c-xB@0f?ReN|a_x006?%;$@u1eY{1 zN+Oazrjk>g`-$K>uSZ;p?UBsZvF`Ox&!rHyEm27RWrUW`d|1g+NmF65r`AXUJ(!#)JYR(1$ zg&UH*jo&TPU;}`?%A96LhZuW-f^ILabcE6^;Ngvz+;~~o1U;D=U0VnDVL|%A!oKEt zPAano9p4`1`qiTJA^2~v;qPeB2v!Orh`A-uYwm$dF{p?PtiImMd{T4jjmeF{ye+Hx z$FBqRi@qn*Ndw>#=mZmUZhUkT_tuNKsVTcqz@KleLw~+Fn-d*l#vRsmzw(CJcWUca z6;`bp@3AX^8P4U1Ah49ENdc&_qjDP2!3J4&9i!XWk4Cm`)Ja=GB*abTC)OkZdQyVq z2#fu{Q85g1vGFG0VbsD|xG(Tg^`@ z4z_Q%T_-&f1C!IS=U!vi$}Jg-)|fDo47^nx?N6tF@Rz)`YA=NWB|KUi9)GgZL5Yu> zSTK!!UtP!qJ$Da9A-d-9tCDMW><>8=PVT6wu#O0QfR_yG7KFIt+_!Yn=+Tenu4HVa z1A+Fl98FFRH(J}d*1VSmuUa(?Kd2Z5M@Yl`?%hZPK`@uYnEBNJ1+P@kH$@la&~^Cx zPjX`s^a#nK3PV!7$#1`WW+OWe%Rx3T{Iz|gjuuY6AkN?Q-Jdt7pyj?IJXW4pu;Hd* zF68Qa0M%JNLrey`#baDWx-!^h@i4&=hxU=k+?irHwZw^xQcp0o5T3Im6rHvYE5GQm zcPhY{8_SBYD}~O6&=yM|n(wg>T`VikEZfEm>-bekK^|prRm1vC8u+!e(FstUzE`Vt z7h8X;p8Fci4fA}{+*GhfpU(Du-u*gICySKvY?ipc84kn^=dO;;k_DPk`a=8sY&=8> z>6nNo4VOY@Gp$f1_R`3Zdkv8xGoCK5?Sj0+R!Lb0=V~;+(7n4tqld6y@&o-KiU!#( zYe)qQz5(n9ZKQIYT#hw|F-Z@!TgK9~8$ z;qUq0{){6_JRytx_d_1pTzIPW&By#;WBIF0kBpW2F;pU%c1&mAN@G}Dz#bHo|P)HSupgRYlDxM*RHI)g=Oq~L-M=j zG!a}}Cac-O{Hfcr>s-zyVVi1A2Py-RT(_GZUTNbJ0vE(?oFdygRNNzLOEDoY2lqyWKu`8R`c zc0{YEQ11x;qL_g^X$i5hXPZ3$`!}ED3pO4|&^B_UCN>Yh92w1J={b$K&`r@S zNb%b=;AMFF2|MKDxX%rvHBQ7~vnjaa0KV5NZ5rq>2;XiNT$a zj@tz`Fd4fm$4b~1c4NTSCi$rHZpHSTvy0iAG>RZ`v8%CuZn(s=Z1y4BYH=(HV+nk$ z9zl4m>DO&cb967?ZAw`QQR}6aC=43pkpn01AbP@0KCxVKkl~3psR6nmt#$p4riVu+ z)TRqj&Ip8ozfyz=pmWC<`|UeWG^{60>kBdU-9le~&sGl;J@xrFdbpy!=>nqL})?*S0HBRKu?P z`KlHBxLcWw%I}jBoHp+a z?PJ=T74lk9c>P~d@c;P9^{9mV4XV3~nui14yl%fhzF{RCU7RwgQuJ|KX;E}qebyh> zyl)bc@j|HoBEA6bHh$Ser_?l}E!6GmW_h#*xg$E%W#YrTS6JEoBHh~s!2^sm6jEQ% zKmfgW_u0h)&(OTbfAHX|6n(QTx?Ekq)I}lP+Mmq@`F>O4hk!d;#{u`-}x#de<3lf1VO-8++|xn%XaI&5=VeAp*t-r(`Q+i06x~9CiX7M}$A!y%c zHeL5~BM|qq-x+86P>3mX?F5K-WqmQ6a~i*n2g=U#nvk=boB~dkd+*J51!j31<3ZDy zIxKL~5dZJHmp7kUErRv*fUHe)V7#R?u-{*w7p{C?su|wQQ5&){{@eM}Zj#DEtruOP zP7$+;a10BWFkuFN?cwLrr{0x;hpwcHgW6m!j?{ziOP-6@?$aE?_V#2Fnz+X8ixa$K zu#G26K~mnmA&?cv4?wfuGm96!!n#!qu5j*htyE>sg*Dmd2HJs>|`N?X!}ebM$#Z?BlvZxLg^_ub_!p# zRuu6Sfkp54WuSWIfi$eBMQFJ85rD-6aRkE3ZtIlJQ27g*vIuQVO$rVM|#kAv;I(1YhBr?hK5C0b)?pN&Y7*}fMtj+aI}s_imj z9ULCIzMAL3E@W8+K2&5T&8YH#PDs0}Y!fKP@`s>S7qx8{h>?2DqC-^WP5k;JIU_SA2N!#BO)0 zwKd39Sv8O;Q+LZcCV6#8K0e`9Db*+#r5XjO7sVu%KbU$^Tlwee+2s@EYa}#v(v*3* zintoWM7YC^oB2ahpj$lt^ak~ zo`5p^JZJmjY%fO1;kA>n=t3ALbLVY36x{sAYE_dW2s0v=?->fvr1|2)B^DNYxQ6se)0@BU<2&G?<(y8t;{i zbP|t>JA%*}aBj@Zr(LbNyY(fT$orqz-|+G9@;g!ZJ^4q(jB|O(6=gSEX^IGZvGK@B zb!P+}vOXfG_n^7|Wnr3A?KUcq0KJ2y*2a1vI ziJ`rIZDvP9KLQ`lyb0n&qsEh$mS>&@y3_;9mgX{zjjA;bRd+rWJ%DkPUAHeN(ubZw z$jpwQVj#};oIAk~ci{(Su>CfrmI(E%h%HwCfbb`^?G{2GsV3yoR`a5~U*Rfv8(BV7 znV%w@7SNCV9mH!dpuUE265q9<^j+W}ZFX{{yFe}M*;en{$AxSvG0WEo?CR3Tq-Iew zM|PTitaF0ZO;YwnchB{_rgvUTv6U-XNyuE8-m`7QSBC0DaVFpfuFcnt)*)^jY`=2H zFYtXPKt;?}5K&xl>W=;QRnhUytaZ{~`iq_-QX{QYF5yCX$a5-jV3|QvoX~K@&a24u z-_!!vA>M95IlBkjRnNqabAu)wCeF6prD|L}+ASPTG58o!zpru9{pTm%{QLpbl!SDp zn3<>F`?eti?MeO39P!3644QFnA)4t)BAH=J`&+L^C0Ms$Vngs;g-{C&hSa<}Dm zqoY%*9CDZHZ`qh07y_eL#y=)*AEzyD9?~9ql$ZAQKa`>W7?}9}%O&<63kwU3{@pK1 zZ>W#_BhF)l`d>awfh$zmejE3HfBoMax&P03!f$Qc5wtQU>ke&{U0hx!xs~lLKYuG> z7-XDdK}p^WZ98hc_unY`n_87FhfN;Z_HGJbI*t#<|MfKwbEv`u45QsvV>%A@{O^f& z4tvja>-_)b%R9nKUv3SSxyg#AM&pu^)c{3n$K z9fTJeZI4t_ai{u|-t&hPMjDp3Pj0*T&N69f;A-}1x%W#OfsS3ilfi>z7n>0-w?tN*n;?wBu+_ zAB6#9;{&TI+I-hcKfY&JL@CFDh8RKOiQaO=JX24FfBrs=xf6^EkM^H>T8oL5ucR~eDWW8=5wDe(}q;i&%_J#e+$emf=67Uu5S-j(HHQIZF^5F zHc%<(Pl?v+car`$Fbeg^7g@Tn-+M4aH{ebB^n2eR7^A%I|9F6oDpmZCe*kO>6HPLa zVYcWCj>m*M|9$CKYt_ z#Qpb?chR8UolQ;5s{z9t|0vieB5!Nuex)|QdQ7DYOQnlnl=U}QizuC_{Tp5)# zfwK2>w;S>NZ#XSMJ=|0eIY>AeevBReuc=)x59iWQD_AMPo8%8SWs#Vh@xRy<5eA-h z8>JhLs*zzaf$t#4#4`WQVD8Klkt!xo`Nrt?EXQOb|BI~X=hVNB+|S$O@nil+ax`90 zOOXgCdi$_m;r-{0W1*w+hlY52UU8ZGAL))fO)XYqD1eybyQg#t3AWRN7EwKJIgqrdgoN_&Dh+4*Ii8MDkaD{w%Cu?QavkED{UaVK}ZuM*w$NcmQ_Ms^MjjVv|l1@q{T z{|Ao zGYFgO%>O=BfBSenY-i-bX@rA_>xA-H$O*y4g050q35;5- z@`n^|#QTAdrw}i4xaamcL+k+FL$Fx%1oM*b@uI>~awM-Ofpad`z|_YWf(jowwjRTY z$X8U{9aXaa%)S!>$)ygtIJS{1eLP`@zDq-a9H)f!NAOv&F&^&5JFkcgmk z)&7rr^FO}IXO-%?WAEW_HYDWvI);|xFz-QiuCpPYv*?zR3*zH>9b0aDU=Q9kWt*G~ z+HHL4UEBZoj{h-3bjH!5=Xd&xVR-axW!zges0CR7-uB$VZybe_+q;q^oY?SrQs>`y zz~A#wAo%D&F6Lag$LA9{Yuz@gqbuLEvFxv6DO^8fRK&$%Usq#u(V}X&%jbR$thixH zMjkQ&!&0kcW#26IqA;3b%!xbqO7A9Dr*BY}kyGE$5h>-yT)j%ocWn&|!h4{gkdP*rJJ(Y`9vE9fbAjNLULLc=S$1#?)cQ zmSW^*vJEo*a;nzvT+KP%5O@7=?{l9Cs)$qfRgN`O$!@iwTz$+Lm6_czvc|bsRvPi! zew8tBlgx>B%$lf4iC1qXN5`J)ksmHD3dtaodw?Mpipvr2hRi)>PjyT`$*ELx#v5Va z8~%-PU*Wd6D)LZ;&Se2oXW|O3<2t_L;W{ETyvUA()UQ)Kcr>e2Vp|LTez64)Pb$Z| zxcmkh^M6UklwkOU2rda~spQ1)on-^t;bx&i+o_qSiR4fm-PVhp-tp%7^=@35ABpw) zSTBM##=fcu$r`!fC-G8eC zD9}=aB2<0$Yd2}Q=~K*mS<(|~f<7H@Xug5^hJviD3DiB1nqpyB^m8)_Z@ZUOSs;z1 zG@o5WA!_ZYfPtGI_}jD?+0EtdH?STQ4)&CV=kyao=2Ju^Pk7=-qa6Uq@Llh4@xYR=;rarIhu+M*zbNY_czEcCSo1D1 znr@6*P;Bz!+SKaThP5+bQMW_c|<@6r_t4dtR(l{_Hp)th54L%e1JPEi(O3P@UxG5kHkVY^=ZEcOw;3&*7N} zDM;?F^V>5fkEf8TU24c+=Z5q;mAl2AX)zHEYeUPt1_MQ2km6WDX;W8HiUY|MvVUT_ zO=@G^HD4~+Q;!SMKBT97k&0F-U07YvQ?{LI#5Yk=$=+n&8j*2L{eZA4N|2(AczAcc zJPP_&*_9BOSD#g_AMaKww-F{m^ZUvGs-X$y*(Qr{?!g%-iRy?`gP4JKkm;B<)2&yp z1CvWzz)H)VpW|!&p6L2X={^bzlQsMqoTe6$0*$D* z(z@7Yloq^el{03$;$JntL{q%7>{u?*_P`UpAzyZ*C5_S!4o!f3HrQ7uC$C0HdYm|+ z)^u0%rs<;#aaXuo9>w{}iJ0USN-ZVjOUP*ok1?p*$D~#utv4)gkKyWiE{n=}>~<~- z$4s`JuPYU=WpTXbknxTQlA6WdJ_O(g?PZ4=Ec*|sf>2uz2tfPjq4{822zjebEyr+H z+YQ=WXC=E0Y!XG`&hi=#nKe!xboN@v27d%RO+9CBaNikHSfPSysEbN#FLo-kFLPa= z1xiVT*m4w-!qqHYMU=9WUHKBU-QYc@=yt~(Ip96$8;mWGp}b)8Rgt~L!R1Y2JW4-H zhsBkmZlb~ht97qjW)9=sFYmo4@2QxbZ^E_gjd5O%itj+lj7o++(-gpfI=%n?yp(tx zJ)FJar%T(QlJeLvpPzix=z^>OvFa^`DRmX7!F1xv-ls?YfMD-LFngFP_&g0ZGku-C{6R(E?^{57P*7FHmETKFM}ws+if zy|`hwzbRvK(LPA~gZ!e~D&vRq5f-LoxwPT%SWD+{9fCm&#^3bmTbqaz%l$7qZ{xNm z0D~eJUWf+aiNl!7s#k2ay~x^x((((4S4WJ}Ty)~;^VfVXshWkV9Sr(?11Z^-_w-4K;^)*3u(i$&W!v1_ zcQ3BEd^d3_o40ln-Kw*r-G)zFZ8ls!6)fU_5sI7KE-HvM3aq@3KxG!xOOxBQ9N^ej zTY(Kh_nCcJ+?MWQjbFN7gu1^u4fq`Q%|QMpG0geCSJpYR6&66ej9?EXtLziM+8AfB zt*rO9sr4Q7wX1+Vw}TZlpvt&1;dg-KDR&bHLFp7JU8pr1%?xrxrEFX_vA2-zpIJDY zT40rNW6#d}&;8CAPFdxpSS6TOiF8_3HAkaz z9T9!dt5n1#$tp4eUbujL-tWGId)|MAZX5lIW7}1%A+bg!`W$pfssJk?`Q>_URrrf^ zm%dl$4SCrwbh+M>m)LC@GDndleH@>p=q%_49!BY+#+?e?a zXePI1RoNS_=R%R2Z*MpPDFteh2UD1}gq8Es)?Y2S{ic0~7==Fz4#d*L`Qgx1(59W~ zsscLPGX!^fT1&)ANyV;4MMCYR>uQgXQc6;VcuQ+Bom&gxD&p@|`V)~c)b2-AiQ6rX z=YA`aSo|R;yvU&{@>yj|fYCzVtl+%F>iWoSrA^!Pf{GA}!289?r@pNZ-h>UNL6@DT=pe2S@y5fVpSmB|f?8?-xwXUEN{nOaST`#n}K-*(PfS zUVE&Z*`=@Z=sM9PY}XLIN67e->=pXJ+tzCUi{|=_7R9Vz>J;D264u}wcaJ0mY#E%& z`S8A?Kpkq5u~R>XfJ!)vh|4}5W&$(}{xBGSWg+AeC;J|}{JVGtdRQ)%PQ zKroxOAN%Mui&yirIT;L!BrSI)hd^a*!%LrA=QQiRo%SDvUMU#s4Y_&Qv7u|Gsf$aF zfb{-`f)8#gVO~1T${6bM@-jg#OaE*I?Zw4lqw5~xZVg@CdnP!Bcq<>-IG!RjRjX{k zdr*`Vc-}fa!UM?gWPu7nq1id`Rw+0MvZCm4E32lwP{paUL!Ikt`e$ zWFu%FC?^-bq{qB5M`C@)b+X;R`s^(4$rb>s{pdgyMUzLKuwBo!9Cf0`QgGFtYqmpL zi_&yzx$xOumINKGTT6`)`B%;_QEG+))d}I7t>PwbHFv9sWn;I+AVV6ZmGT-a^d0VHmLnW&kWC!V6*_FT3)Xz14c}QqI8_%Bkb!&F^!YX-M@FO-Z zEd=<&4~gHySmm|Y7A()o7I{XPBy7N+gx8PtfA%}S(c2@XW($(!S16czq8V4^WSYZ&lBMf zn;RqdPe_mM-yFK*S1#hp50X2%qoh;b#X|h>cse~74xXHPkPF_M3Crm`v$#>P017cL z=a1hJ>ufcZ>^m^-d=WCxs_^JX$eyRujYgzMr@BXm7reIVfdpHoV$pZXZ1H-t5eeX- zV~gg@C&@03MqFUqxAXm4@9Q9(23Y1t3K+ijV6eqe?2Hgy(X!;CsHw-{DWZ*a z4v9pzO^{?OU<}fpZK1Jk*u_k5g4+Sb%24;yW1X3*o)eLuxwle&~Bq2&b<8kREWvWz1gI!SrtHc z-5JCsOTOqn*4Scaf_R5_dbx)&>2G+h-8lVXKig@F6skf|t;MMVC1La?0uji9D5Mhc z&vDJ}3(D2ed`;NX01v7Le3GnP6Q8;nRwAu}k;jIsa+ug#W>4-8ARaHD#0U2P!&)z} zcx|K_APz2f4qJXWkC5m!%fPWtuDX2HmaO`^R^3o zdM#DeM7oM@IYEuKg?e{JhH*x>46g1fTda;t+YfQZX6Q8eIkoo6nP7r0Jsfpr5jI8R zZuokGrR(jPQO35waGjW|!uH^0-=Q{|Q^C@=!t>LR;VFufvv$^Xa1>aAXM!b#TwZB- z*4^3lp%@~iH9l2#X0QJa%YyCSvPR1gZ1w%KaJeSNB%Cc zoi_#b=NK2s{st7K5ItdI>HVt8Vy6wO)f9_yiwBA?x6BEE zS)~c~PRzs;n#4d3E{4$JtAP~_YFi@R+-qt{dUOBJU&uhDJ3v}DNLwU(qIzL*|J!oTIwf+M`6(D9##ROTvN z5izc$gS#lLtdq-XYO9S2QG}M&khh3vDFw)d{bbi5qzLTdgV0+ZfnPQhi=RDgXq*+x z&kVz-`+`lNIxZj6j44jig>9JR{9wtgLBJ?IwF{5oUR)wUFBoBJtxjz?l`V?`>NYLf z*Q@DU@)Vzym;KD~vHW|mp({=l+m$pu8ZfrvZdYW$tD0LEVN)8+uaNM4kO$-l9m6`+ z7+UhT?_6Q_bcFYdx=DNb8Cp_$W)!5|;BYyI7RS6`%P%3H%aaIoB>_G>zldiv(jJ-Y zx9g#mBi2-akNh5 zJE)$nmw0P_U1lT1J$bpf(aF3KX;~SrFm>|117oOi1KC@@y+L0j&lg9oV6*c2I6ADS zuRf?O3mhdi#q32(R|J9{**|ft4_{*Z_O^8b@U1~vHY~30+O10xyc5VYh4mq)dm*9o zTp^T?(RDLhQeSz6HpBZdol#61H@Z2kyE9Y@#~mK8b8-@au>H_1!9_*}>=2(6WQk&M z*ZeM^%Vl!mV3GYtaq1c_MX?yt0JFak8D{*Gd%zwHGo863=%fc_ZWrymc+q^1accYh z`9Mf{JYa?$n(=PJs7>%QV{=8%LAHjX!YQJkJqU_tZ6XU5sg^l*DDV2OjiHy2N@TI_ zHl1^Nt6}BdtC@gJ+q!m%5gt|uih{X<$EmKHK(8G1$mIpfuheetoR}4LZ%^}z_yTeA zZ>{6t=usY$LbdS^Kg&o~(C*u-*z+pa`Af|(MF910<}9bBIcBF7LZ1@0PgVI1@djDI z5IL(PEdfmA9OK_d%4y>cqaR_zDzP$u?9z(LB+3gevJadg`o^4i!P+1rUQO5QCUqAZ zQlI2o16ZC0S`n8r25-QO$hyn&I9m>C+`2iZA^^u&xJNS;$otPSy2)Ze=RuBj0kbZ$a$i}>pK5E2GRcIjG;5DUHtGB^jeO&&Y8Hs#uIzbLWau1^Jg9@zj@F$Im~&kM z7YtO&b!)4aKl<#c?~+{^J7!wABxh1;B z+ko{qT6epZ-ZTLb+8hZ;g2f(`E}andS#v4#&4bb zWo^}?Lum4ex){Vfpm=IQL zNk68?J0)lIWR}DLawmuSl52M`Qx%AQpSFi{{F@Qm(cQA!01J!ez)@wB)1qBZG14Ca zD+)JMOOrc?wt1UX_B%7Vck6oq5sNUVkWEU|!hYMtZ2xw?b+e zFyTar&V`P`yzBQbMeZv@WPe(+Yu1Gtzd@ldCrS+7cFd3ie}TBO80|ZBaNzwA(!Onz zrSx(S1bZ0a`BMW%`w!W-Tk03%B;0z{+!y`7PJh1?VN9qOdR^mL%3leMK-)M^FA(aA z(w4)UL(@b3`e~OWh5!ci_A?rAH6#M$pOd2otft#m6P}FF)EljSqZ+1D+!F7+4}9Cz z+Rz_fPiQgB(F;UF+5Og#9FwD>V+62uF61BY!xjfWCuqRBw1-9}BH^J=SQi(B z4e`lKjT3w4ZqB7J_1_ixBZm!JBA+M$Y46snMLYgbxH@ec2pyp+9X(fY`Np2%k6bp|ERE~J?RP}Rf=vYy4;?9_g9#)Bxh)l$qLajyPs731gW5M# z%E}fWZ?lQ(zxuHL@fn*tzdmAZX7eU9_k^KmI_cFG+OMJ+E)S^0fy$j? zU)d_#ydZ_%b`(pr_n;y2EmuH)RpFPr@T2ffg+>iH5p_*~kY1|0D2Svqh zux5E#%BRq=TGY?o3Z6jiwK}}abPJ8u`#0}5f*y`;R$^pPf=9#f?jAJ zu(F=1_(6`d{Gd7$OG9mK7AbLK;c) z;Er9fnu)k>XpYp!-Dpl(5&%|vF59<4;!(&GV}4a1dv94*T+WUMBt;%RdJd9upaxTn zz+IHrW8~jh_FJ6!>KU@%HV{wIZe&$?tlekWw8GF0v~>#*YIRS(>0WSNznp~QoAsW3fFY%rZ>6J9u>8mXtCeyDz zj+cDL(VJq?ex2GS>|4wNUs@rJ+vM%N6B{BMRqOuJ?QOw|MLSnmO(Z-S%SP~%X-X+e zOiLXo?W;2?w>#n6{bOh-;zM29id<_wRgb&YuPSN|~MK6xoRO&msboB@W6raGUWdWcH zMp-z$tNPz7g8!Oa!|})qWwDIanZ0>kLx6u#{`K^ou$-x5 zgq$iWW%WlR#>1bx0-LDwrHDyH9SqK=4~qk^rDm#oW2r|)f$rh-itbsgo{*<#G`{4J!G3Zv>V8`9tLhafQiZ}KTs z$1^LbQ7AX0}dxagA109pX8&&(MpJhm&DIlQ8zIcEGxrw>{4p?IW3LQtGI(f48*Zp{F=(gIjN{V+>tIS^b zAi$3Jw;F8~e~8c@OI5DYUy|9q($5x&$5XDbTMx;{R%i0dyItUN*%3V3`;CPf1|zr zWOXcEUy8YSWUGzi z(hpkr@_6z?1~5bo_H5e1t-WxvsC=h_uS%>u`C8?#VgS@9z>0dZsktjC^=A*!`%$s{ zwax@K9d_%0wS0TcT{^Vl3T|A7{z+Vp_XJw0&fTiGzvZ@o{qiSAlZV@C1K|t$r3M|B z`;_Oii-vW>M)Z&km{-6x))g_kGkgg zSqH=tLG{~9#1Q?NcImpOKbiF5js_UGHKHG5UlkcRTPcwKr@&uu9G#)cAw? z4OP!=Xw3N+@TtR_D^m1mIrffxP$X=ahnKSHm*oR! zwe+tIpKPqM)FJ0rOG)7temIbvt7RX7O)*FpfSaZ4DPj)!v$gV0mU+;E3w~|#+qktF z^*l7=We-*mYDt%cT=C!ePF^1}nrbMGzrx~X%U9YX6sgl+%&TjzUG+p=SWwZ-Reh<% z4qN1Q-=g=90d&OMaCN=Cu$lSt_%bQE%%VpI=}Mn~ED;gxt}TNOahJJHC&zf4ZwwFZ zFhnCj5sptp^0jKGWJEsE>}hrGhEr4Zn#q?|R(H=bF31#Gf4B@%0;t?|#(u+L(^qO2 zv#(eo8}q?(;Awk&C4NQq%9v64RqNp3HKp+VT1CF1Wut+97m^LHdXNVFdy}M(yhTox zN>__MZiMM5HYovScGG1yD#cr!cn|vhDTuQ2WqpRAnr}u!gx<2?C@Wd-KOA$QF#qm{ZVK0>AM1n5FRX~JmDL(HFvg89rD%#R*$M4M7udA!%ze$%D-3@WpB_5YV zwtsYI9ORr0r+=q`o{U(lY3CKI){5)r-u5h8r6LkAda&2d`U+D=*cDwz&Xx;5E*J~{ z;T^7TLaihgmUTA-wZ+%V8JMG9*7(x(o-dAcQ#?abgY0*G6{p5*zn=*yoHwoHgN=s` zjl@q1)=s?aFcKGX)u5K|B>w;p`l(O?#``5rI5u*`GV0Kr?OT}vL4(-vwV9tHs*+Md z5z4m3ndG3-(<;rQ`0~1C3gC^G%R0DC1`%H&kE*7qbsA}YBc;gP=uK9k7ggB%v&-N5 z_dofGhOE*iv+av%NHtVXi<`R4NG4PhQ^8-t`&74fE)iqKtHU~?Oeu~IMD9IDxZ(2)R?5VD%-s~t3`pr-hD85oc$QCI?pcpwau2&LtBw05)r>==MkLME0*G2N26Ek z8t2^}^2xftY^7fGP!suX9lTX;o9*R+1f~ru+@H(Vta+3FUwc;?mUOnp8?!8(u1#u8 z+#Gc**D-1kO&ymu&D7KsbGOFHjg)ag5=6qX#mZev%q=ZbP+UPp zF%|RvwYhVj=RS|zulGZI-~&A8{LlOT-{qX&yBwu|98-4+jWtRFG)E5GC*J7F z21lo-KCAuZnyost$Xx>#IDPQUpvdoRneK_#5#Xbji&g>hEZ?<#QJmE`G5dTNVp{5l z>4D8u^9I5`VGs>Fz2mWt_+JQzc<>;NSUx@|j7J++|DJ+Ie`BODJ{TGaiz@UPav9#2I8fO<8epDrJ zywEg~3mW~!ko)}2aG8};p_{MnL`i{h9tjoQ7R;(4J!}7iw)DBYRI>~&OG69or4|RY zrIBiSIDL0yI^&1q*ad{_=XNk`*r=%vleqg* zFBK!yk|*ZewCJDkKIg}WFj3Ejr;fD1vx|x^ui1H7nN#2LWR;b0E3woso)yL9%oIPb z5Yp7gUsui=7Vd!V_eql}9IWINm3s~CU7WG9T0x2|dn?7P*E!oZ-9e#anHfXVa}qU0 z6Cd?Q!cxL>vX*XsY7}Q3Mu-b6Jj6pgJS3Q_Z3jytZaC>lCa?Jey%1focW{^Ek{B|h zq|;+hBaZXB!%?klF!w;HFi-gV<^~t^>DWlZhkaEU3*2bL@E5!e5x(K`)TW+y_l*21 z$-=)cIN;uQR--{bTX}f>EayNSl7lVq#7!6S9LW9)L5#jp@eWd`s(l70xw3VS&2iNe!vHNWV%p5||BQ&AO7IVlLI*hQHHpjcC~j;pjb$4O8t`e46P zi6y5*-9_zk;!E+#6IAmHs?tnS7u>Y7)X4RpI3Xt<6S%it?UJ^<8;d9POK_8&79C)VX{Q5?{G`HEyRCTI6P)s{N#a(23X zR)u5vp`fakSPdEai@Oais`o3^G^UJP9SkRVmT`yBD&D_RvzPXJGxcs;_^vIwwP5pN zv4_e-Br~mp%ASBJmRdQ_WmK%DjhG3~k&T+A)KzN}2Po}}LzlN6Y^c0KkdbDlIo-#< zJak5M9(18xDJ)#E6)nc65<)NTAvfQw{;uM2wI<9<-yS{exJ;;~ggBV$!NO*BX?O6d z4fnP1Ok^2Jd+5kj3p6q$r6+7wiwFI2dq}CB08?tP#c#u$guOk73Ld2#kQBtvc_~) z+Tv55QlX1;Ej1#K>x)0`N;ni#DK_>(yWM))66jTK$S3*;dK1yM&Zp)7@~PCLY>Y_A zV8WvNZGpoJ-+S~MA9UEClSpJ=j~*`M2SfCyu{u_;#w^6$w^}_EgOhax!p;!mrl!f1mztjp*pn90=72 z3r9E#bluCQ=fd*Yf$(Etj}4zydLDT<+@6vQCVx*)=sG5|aFwOz&$I#8G!yd`Ix*AT zUwY=iM`>U<(-mv5>U$kERIxMo9u;^gYI=+_KJB}MP-^TH5 zU>_Dm;)Sa3;jb^OU+PtV&$*0~8$o`9uKO{b;VWj?*XQ;(nRyQmzjLQ(FWZjoeuv{@ zwlC-2a$m4d_w!jXlPY0f@fuEgO2l1@=3T8VXD=01^_kz}s^zxhFkzS6%Dw#>=XILj zw)Q4-;}eNpMqS4UIR%y&_JIf2_==WhX)Co(unbiHZ?ZH)$6`=zeuUyrR4_&(A3yHP%W7{9h$j_xJD43=FhEDp(g68vb=MDs#vfm1#_YZqHbAgq1FVW8JA z0O!n|dbOj+B;%yWGWuD{hn}0{nKavvWXdiUWNuE)d&9a#;;0B|N>=+ursnl+iv57) zuD76^nv?p;=3R%c=c9R0$~^jg@aU>z;A18+jAAZGLGmP7IfaAy3Ny`0F%Ta{kf;04 zWj=#YGRfMWTA{jj{moEC_H}ARGK%dsU#N$aY}THM;!StB<)S+_a;i}b7s!rlX!a_9 zXs~p_Xizt5Euv5Ac+5rS?l!V_TGE($KiY&ATT||HZaoyD^f|2&A_VQ)b!Y=qk{c&o zk`wvIhHjv~D5sw9&{7P5T+F(4MXJh$9{1i9(v_JfyXgwWs^9L@fvV=JR{10#jS+7qHG|s_G^V4kX>!AX}&4kkwvp zgsJ1Thf`#M#bsePxJk=z;&F9Z^?stQ0}L3res8`AJHGt*<(G&A^uTpI^?#b$kQ~Gl`p}mu~NQ^)Gxjz}g;y`^6^TZC^!EvF9Y8LTHP@O zZuSDrtCfk~(`X&6%w}$0X*>~@Uy^<$ogTZEj_CcKTlS@+DAZLl=*}(;5zLLPSFqzN z6k6wQECYuFE68V(1T*bARW6c+PAqK37>=mz|D3pAcd>dm%k4nsa`FXFAWKSDk%ik+ zFk4cXE$e|>eQ<{VAr|xo@y6wT6l7nd)YdVLU7NBY_u<7QkjQxetKEy)7d6u}-NQ92 zN93JYE0AGO3&;X;p2KeHxbJZK@Vj2FP0tuv47F4gd&aHq0Nmt5Xr#fiSET_HZ!Z?t zuDX~I!u!~)>+{pHMC0qA3mqKoT=)%Lc#dJ2^p8o-FFYUlq)cNh8eO|+bPJ6v{G6@UXU_6a+{ZW0ne@cCzxoIb`D1aY<1B80w8 z2N&mR0Re!XF*~}o5R(YtYXN(oi!6g-KDk#~l18mCU1xfaW`1sbVyV6gjf;;@OiVlj zToG56@Z(8fI)xzUgt!n@1J2VC68419YuBoXTE31WC?^>^NBQ)mq-Sz?L97w=f}dWZ zoy`Y7oRkv5O>7oR1qSOmhQd8($`5R<#D5Ep)uL!&-lU?UBD}z^=o}*S z>CSnMs}sG?^N&AN^z@t(%d%@Is{iW+ZPZ@dS`#+796U3Sf3d{%sf7(PM Date: Fri, 16 Apr 2021 12:44:25 +0100 Subject: [PATCH 38/60] Fixed Unit Tests & Prettier Commands --- .prettierignore | 5 + CHANGELOG.md | 10 +- README.md | 202 +++++++++++++++++++-------------------- THIRD_PARTY_NOTICE.md | 5 - lib/setup.js | 25 +++-- lib/utils/getInputs.js | 12 +-- lib/utils/installCLI.js | 26 +++-- lib/utils/runCommand.js | 10 +- tests/getInput.test.js | 39 ++++---- tests/helpers.test.js | 34 +++---- tests/runCommand.test.js | 42 ++++---- 11 files changed, 210 insertions(+), 200 deletions(-) create mode 100644 .prettierignore delete mode 100644 THIRD_PARTY_NOTICE.md diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..7293f65 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,5 @@ +node_modules +coverage +dist +examples +.github diff --git a/CHANGELOG.md b/CHANGELOG.md index 33073df..1178f02 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ # Changelog + All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), @@ -7,10 +8,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [2.0.0](https://github.com/EliLillyCo/edat-services-github/releases/tag/v2.0.0) ### Added -- GitHub Action is now written in JavaScript. -- Unit Tests (90% Coverage). -- User can now specify any command they need to run. + +- GitHub Action is now written in JavaScript. +- Unit Tests (90% Coverage). +- User can now specify any command they need to run. ### Removed -- The default functionality to run a command. +- The default functionality to run a command. diff --git a/README.md b/README.md index 3ece086..8c27a05 100644 --- a/README.md +++ b/README.md @@ -1,102 +1,100 @@ -# GitHub Action for CloudFormation Linter - -This Action for [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) enables arbitrary actions for interacting with CloudFormation Linter to validate CloudFormation yaml/json templates against the CloudFormation spec and additional checks. Includes checking valid values for resource properties and best practices. - -The actions primary purpose is to set the [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) to the runners $PATH so you can access the linter throughout the workflow, and use in a way that suits your application. There is a way to run a [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) command in this workflow though if you like. - -## Usage - -There are multiple ways to consume this GitHub Action. - -The recommended approach would be to to use this action to add the [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) to the runners $PATH and run commands throughout the rest of the workflow. An example of that can be found below: - -```yaml -name: Lint CloudFormation Templates - -on: [push] - -jobs: - cloudformation-linter: - - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Setup Cloud Formation Linter with Latest Version - uses: scottbrenner/cfn-lint-action@v2 - - - name: Print the Cloud Formation Linter Version & run Linter. - run: | - cfn-lint --version - cfn-lint -t ./template.yml -``` - -Within the `run |` section, you specify the required Cloud Formation Linter commands. - -However, if you would rather run the Cloud Cloud Formation Linter commands within this action. That is also possible. An example of that can be found below: - -```yaml -name: Lint CloudFormation Templates - -on: [push] - -jobs: - cloudformation-linter: - - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Testing with CFN Lint Version & Command - uses: ./ - with: - command: cfn-lint -t ./template.yml -``` - -Further, you can configure this action to download a specific version of the [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/), as well as the Python interpreter. See the table below for all the `INPUTS` this action can take. - -| Input Name | Input Description | Default Value | Required? | -|------------ |---------------------------------------------------- |----------------------------------------------------------- |----------- | -| version | The Lilly JWT | Latest Version of CFN PyPi Package | false | -| python | Python Version | Defaults to `python` on Windows, and `python3` otherwise. | false | -| command | Cloud Formation Linter Command to Run Afer Install | N/A | false | - -This GitHub Action does not directly output any values. - -## How to use the Cloud Formation Linter? - -See [Cloud Formation Linter Usage](https://github.com/aws-cloudformation/cfn-python-lint#basic-usage) for full usage details. - -## Upgrading from Version 1? - -The main difference between Version 1 and Version 2 is the fact Version 2 by default doesn't run any linting commands. The primary purpose of this action is now to provide the underlying [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) package and enable you to run your commands. To do this, follow the steps below: - -#### Step One - -Change the action in your Workflow to be: - -``` -- name: Setup Cloud Formation Linter with Latest Version - uses: scottbrenner/cfn-lint-action@v2 -``` - -#### Step Two - -Below the above include the following: - -``` -- name: Print the Cloud Formation Linter Version & run Linter. - run: | - cfn-lint --version - cfn-lint -t ./**/*.yaml -``` - -This should give you the same experience as before. - -## License - -Please see the [LICENSE](https://github.com/ScottBrenner/cfn-lint-action/blob/master/LICENSE). +# GitHub Action for CloudFormation Linter + +This Action for [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) enables arbitrary actions for interacting with CloudFormation Linter to validate CloudFormation yaml/json templates against the CloudFormation spec and additional checks. Includes checking valid values for resource properties and best practices. + +The actions primary purpose is to set the [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) to the runners $PATH so you can access the linter throughout the workflow, and use in a way that suits your application. There is a way to run a [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) command in this workflow though if you like. + +## Usage + +There are multiple ways to consume this GitHub Action. + +The recommended approach would be to to use this action to add the [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) to the runners $PATH and run commands throughout the rest of the workflow. An example of that can be found below: + +```yaml +name: Lint CloudFormation Templates + +on: [push] + +jobs: + cloudformation-linter: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup Cloud Formation Linter with Latest Version + uses: scottbrenner/cfn-lint-action@v2 + + - name: Print the Cloud Formation Linter Version & run Linter. + run: | + cfn-lint --version + cfn-lint -t ./template.yml +``` + +Within the `run |` section, you specify the required Cloud Formation Linter commands. + +However, if you would rather run the Cloud Cloud Formation Linter commands within this action. That is also possible. An example of that can be found below: + +```yaml +name: Lint CloudFormation Templates + +on: [push] + +jobs: + cloudformation-linter: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Testing with CFN Lint Version & Command + uses: ./ + with: + command: cfn-lint -t ./template.yml +``` + +Further, you can configure this action to download a specific version of the [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/), as well as the Python interpreter. See the table below for all the `INPUTS` this action can take. + +| Input Name | Input Description | Default Value | Required? | +| ---------- | -------------------------------------------------- | --------------------------------------------------------- | --------- | +| version | The Lilly JWT | Latest Version of CFN PyPi Package | false | +| python | Python Version | Defaults to `python` on Windows, and `python3` otherwise. | false | +| command | Cloud Formation Linter Command to Run Afer Install | N/A | false | + +This GitHub Action does not directly output any values. + +## How to use the Cloud Formation Linter? + +See [Cloud Formation Linter Usage](https://github.com/aws-cloudformation/cfn-python-lint#basic-usage) for full usage details. + +## Upgrading from Version 1? + +The main difference between Version 1 and Version 2 is the fact Version 2 by default doesn't run any linting commands. The primary purpose of this action is now to provide the underlying [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) package and enable you to run your commands. To do this, follow the steps below: + +#### Step One + +Change the action in your Workflow to be: + +``` +- name: Setup Cloud Formation Linter with Latest Version + uses: scottbrenner/cfn-lint-action@v2 +``` + +#### Step Two + +Below the above include the following: + +``` +- name: Print the Cloud Formation Linter Version & run Linter. + run: | + cfn-lint --version + cfn-lint -t ./**/*.yaml +``` + +This should give you the same experience as before. + +## License + +Please see the [LICENSE](https://github.com/ScottBrenner/cfn-lint-action/blob/master/LICENSE). diff --git a/THIRD_PARTY_NOTICE.md b/THIRD_PARTY_NOTICE.md deleted file mode 100644 index 958e547..0000000 --- a/THIRD_PARTY_NOTICE.md +++ /dev/null @@ -1,5 +0,0 @@ -# Third Party Notices and Information - -Container images built with this project include third party materials. - -Notwithstanding any other terms, you may reverse engineer this software to the extent required to debug changes to any libraries licensed under the GNU Lesser General Public License for your own use. diff --git a/lib/setup.js b/lib/setup.js index c6e116c..0aadedc 100644 --- a/lib/setup.js +++ b/lib/setup.js @@ -1,42 +1,41 @@ const core = require("@actions/core"); -const { getInputs } = require('./utils/getInputs.js') -const { installCLI } = require('./utils/installCLI.js') -const { runCommand } = require('./utils/runCommand.js') +const { getInputs } = require("./utils/getInputs.js"); +const { installCLI } = require("./utils/installCLI.js"); +const { runCommand } = require("./utils/runCommand.js"); async function setup() { - - let inputs; let binPath; + let inputs; + let binPath; try { inputs = await getInputs(); - } catch (error){ - core.error(error.message) + } catch (error) { + core.error(error.message); throw error; } try { binPath = await installCLI(inputs); - } catch (error){ - core.error(error.message) + } catch (error) { + core.error(error.message); throw error; } core.addPath(binPath); - if(!inputs.command){ + if (!inputs.command) { return; } try { await runCommand(inputs); - } catch (error){ - core.error(error.message) + } catch (error) { + core.error(error.message); throw error; } return; - } module.exports = setup; diff --git a/lib/utils/getInputs.js b/lib/utils/getInputs.js index c4465d9..089c06c 100644 --- a/lib/utils/getInputs.js +++ b/lib/utils/getInputs.js @@ -1,20 +1,20 @@ const core = require("@actions/core"); -const { getInput } = require('./getInput.js'); -const { isWindows } = require('./helpers.js'); +const { getInput } = require("./getInput.js"); +const { isWindows } = require("./helpers.js"); module.exports = { getInputs: () => { - // python3 isn't standard on Windows + // python3 isn't standard on Windows const defaultPython = isWindows() ? "python" : "python3"; try { const version = getInput("version", /^[\d.*]+$/, "0.*"); const command = getInput("command", /^cfn-lint\s || null/, null); const python = getInput("python", /^.+$/, defaultPython); - return { version, command, python } - } catch(e){ - core.error('Failed to Collect Inputs'); + return { version, command, python }; + } catch (e) { + core.error("Failed to Collect Inputs"); throw e; } }, diff --git a/lib/utils/installCLI.js b/lib/utils/installCLI.js index 25ca820..58eeaa5 100644 --- a/lib/utils/installCLI.js +++ b/lib/utils/installCLI.js @@ -3,8 +3,7 @@ const path = require("path"); const exec = require("@actions/exec"); -const { mkdirTemp, createPythonVenv, isWindows} = require('./helpers.js'); - +const { mkdirTemp, createPythonVenv, isWindows } = require("./helpers.js"); module.exports = { installCLI: async ({ python, version }) => { @@ -24,17 +23,32 @@ module.exports = { // Ensure installation tooling is up-to-date across platforms await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "pip"]); // setuptools and wheel needed for source and binary distributions - await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "setuptools", "wheel" ]); + await exec.exec(pythonPath, [ + "-m", + "pip", + "install", + "--upgrade", + "setuptools", + "wheel", + ]); // Install latest compatible version - await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", `cfn-lint==${version}` ]); + await exec.exec(pythonPath, [ + "-m", + "pip", + "install", + "--upgrade", + `cfn-lint==${version}`, + ]); // Symlink from separate directory so only CFN LINT CLI is added to PATH const symlinkPath = path.join(tempPath, "bin"); fs.mkdirSync(symlinkPath); const cfnLint = isWindows() ? "cfn-lint.exe" : "cfn-lint"; - fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); + fs.symlinkSync( + path.join(binPath, cfnLint), + path.join(symlinkPath, cfnLint) + ); return symlinkPath; }, - }; diff --git a/lib/utils/runCommand.js b/lib/utils/runCommand.js index 7efaafe..0df142a 100644 --- a/lib/utils/runCommand.js +++ b/lib/utils/runCommand.js @@ -3,12 +3,14 @@ const core = require("@actions/core"); module.exports = { runCommand: async ({ command }) => { - try{ - const response = await exec.exec(command) + try { + const response = await exec.exec(command); core.info(`Ran command: ${command}. Response is: ${response}`); return response; - } catch(e){ - core.error(`Error running command: ${command}. Returned error is: ${e.message}`); + } catch (e) { + core.error( + `Error running command: ${command}. Returned error is: ${e.message}` + ); throw e; } }, diff --git a/tests/getInput.test.js b/tests/getInput.test.js index e36af79..127603e 100644 --- a/tests/getInput.test.js +++ b/tests/getInput.test.js @@ -1,56 +1,51 @@ const core = require("@actions/core"); -const { getInput } = require('../lib/utils/getInput.js'); - - -describe('getInput Test', () => { - - it('Returns Valid Value', async () => { +const { getInput } = require("../lib/utils/getInput.js"); +describe("getInput Test", () => { + it("Returns Valid Value", async () => { const name = "version"; const pattern = /^[\d.*]+$/; const defaultValue = "0.*"; - const expectedReturnValue = '0.44.4'; + const expectedReturnValue = "0.44.4"; - jest.spyOn(core, 'getInput').mockImplementation(() => { + jest.spyOn(core, "getInput").mockImplementation(() => { return expectedReturnValue; }); const userInputs = await getInput(name, pattern, defaultValue); - expect(userInputs).toStrictEqual('0.44.4'); + expect(userInputs).toStrictEqual("0.44.4"); }); - it('Handles Unsuccessul Value', async () => { - + it("Handles Unsuccessul Value", async () => { const name = "version"; const pattern = /^[\d.*]+$/; const defaultValue = "0.*"; - const expectedReturnValue = 'bbgerbgreiugbreiugbire'; + const expectedReturnValue = "bbgerbgreiugbreiugbire"; - jest.spyOn(core, 'getInput').mockImplementation(() => { + jest.spyOn(core, "getInput").mockImplementation(() => { return expectedReturnValue; }); - try{ + try { await getInput(name, pattern, defaultValue); - } catch(e){ - expect(e.message).toStrictEqual(`${name} doesn't match ${pattern}`) + } catch (e) { + expect(e.message).toStrictEqual(`${name} doesn't match ${pattern}`); } }); - it('Handles Default Value', async () => { - + it("Handles Default Value", async () => { const name = "version"; const pattern = /^[\d.*]+$/; const defaultValue = "0.*"; const expectedReturnValue = undefined; - jest.spyOn(core, 'getInput').mockImplementation(() => { + jest.spyOn(core, "getInput").mockImplementation(() => { return expectedReturnValue; }); - try{ + try { await getInput(name, pattern, defaultValue); - } catch(e){ - expect(e.message).toStrictEqual('0.*') + } catch (e) { + expect(e.message).toStrictEqual("0.*"); } }); }); diff --git a/tests/helpers.test.js b/tests/helpers.test.js index 57408e0..6c0c6a3 100644 --- a/tests/helpers.test.js +++ b/tests/helpers.test.js @@ -5,40 +5,42 @@ const os = require("os"); const exec = require("@actions/exec"); const io = require("@actions/io"); -const { isWindows, mkdirTemp, createPythonVenv } = require('../lib/utils/helpers.js'); - -describe('helpers Test', () => { - - it('Returns Valid OS for Linux', async () => { - jest.spyOn(os, "platform").mockReturnValue('linux'); +const { + isWindows, + mkdirTemp, + createPythonVenv, +} = require("../lib/utils/helpers.js"); + +describe("helpers Test", () => { + it("Returns Valid OS for Linux", async () => { + jest.spyOn(os, "platform").mockReturnValue("linux"); const res = await isWindows(); expect(res).toStrictEqual(false); }); - it('Returns Valid OS for MacOS', async () => { - jest.spyOn(os, "platform").mockReturnValue('darwin'); + it("Returns Valid OS for MacOS", async () => { + jest.spyOn(os, "platform").mockReturnValue("darwin"); const res = await isWindows(); expect(res).toStrictEqual(false); }); - it('Returns Valid OS for Windows', async () => { - jest.spyOn(os, "platform").mockReturnValue('win32'); + it("Returns Valid OS for Windows", async () => { + jest.spyOn(os, "platform").mockReturnValue("win32"); const res = await isWindows(); expect(res).toStrictEqual(true); }); - it('Temporary Directory Contains String(s)', async () => { - jest.spyOn(os, "platform").mockReturnValue('linux'); + it("Temporary Directory Contains String(s)", async () => { + jest.spyOn(os, "platform").mockReturnValue("linux"); const res = await mkdirTemp(); expect(res).toMatch(/setup-cfn-lint-/); }); - it('Ensures Exec & IO which get called', async () => { - const python = '3.7.0'; - const venvPath = '/path/.venv'; + it("Ensures Exec & IO which get called", async () => { + const python = "3.7.0"; + const venvPath = "/path/.venv"; await createPythonVenv(python, venvPath); expect(exec.exec).toHaveBeenCalledTimes(2); expect(io.which).toHaveBeenCalledTimes(1); }); - }); diff --git a/tests/runCommand.test.js b/tests/runCommand.test.js index 633a122..2212fda 100644 --- a/tests/runCommand.test.js +++ b/tests/runCommand.test.js @@ -1,45 +1,43 @@ const exec = require("@actions/exec"); const core = require("@actions/core"); -const { runCommand } = require('../lib/utils/runCommand.js'); +const { runCommand } = require("../lib/utils/runCommand.js"); -describe('runCommand Test', () => { +describe("runCommand Test", () => { + it("Successfully handles passed CFN-Lint Command", async () => { + const command = { command: "cfn-lint -t ./template.yml" }; + const expectedReturnValue = ""; - it('Successfully handles passed CFN-Lint Command', async () => { - - const command = { command: 'cfn-lint -t ./template.yml' }; - const expectedReturnValue = '' - - jest.spyOn(exec, 'exec').mockImplementation(() => { + jest.spyOn(exec, "exec").mockImplementation(() => { return expectedReturnValue; }); - const log = jest.spyOn(core, 'info'); + const log = jest.spyOn(core, "info"); const res = await runCommand(command); - expect(res).toStrictEqual(''); + expect(res).toStrictEqual(""); expect(log).toHaveBeenCalledTimes(1); }); - it('Successfully handles failure CFN-Lint Command', async () => { - - const command = { command: 'cfn-lint -t ./template.yml' }; - const expectedReturnValue = new Error('You have Errors in your Cloud Formation'); + it("Successfully handles failure CFN-Lint Command", async () => { + const command = { command: "cfn-lint -t ./template.yml" }; + const expectedReturnValue = new Error( + "You have Errors in your Cloud Formation" + ); - jest.spyOn(exec, 'exec').mockImplementation(() => { + jest.spyOn(exec, "exec").mockImplementation(() => { throw expectedReturnValue; }); - const log = jest.spyOn(core, 'error'); + const log = jest.spyOn(core, "error"); - try{ + try { await runCommand(command); - } catch(e){ - expect(e.message).toStrictEqual('You have Errors in your Cloud Formation'); + } catch (e) { + expect(e.message).toStrictEqual( + "You have Errors in your Cloud Formation" + ); expect(log).toHaveBeenCalledTimes(1); } - - }); - }); From 0091d3b2e38cc2a14c7030ad53be80ce4db3ff06 Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Sun, 18 Apr 2021 11:35:25 +0100 Subject: [PATCH 39/60] Update .github/dependabot.yml Co-authored-by: Scott Brenner --- .github/dependabot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 0a8d896..ab6ff68 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,7 +11,7 @@ updates: schedule: interval: "weekly" - # Enable version updates for Docker + # Enable version updates for npm - package-ecosystem: "npm" # Look for a `Dockerfile` in the `root` directory directory: "/" From f395dbd2036af851b6909cea5a2b60d06fec7864 Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Sun, 18 Apr 2021 11:35:37 +0100 Subject: [PATCH 40/60] Update .github/dependabot.yml Co-authored-by: Scott Brenner --- .github/dependabot.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index ab6ff68..80895e3 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -13,7 +13,6 @@ updates: # Enable version updates for npm - package-ecosystem: "npm" - # Look for a `Dockerfile` in the `root` directory directory: "/" # Check for updates once a week schedule: From 74ad61a39a2a26008b804d2fbe3e2488d61a7b3c Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Sun, 18 Apr 2021 11:41:03 +0100 Subject: [PATCH 41/60] Update README.md Co-authored-by: Scott Brenner --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8c27a05..c672e04 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Further, you can configure this action to download a specific version of the [Cl | Input Name | Input Description | Default Value | Required? | | ---------- | -------------------------------------------------- | --------------------------------------------------------- | --------- | -| version | The Lilly JWT | Latest Version of CFN PyPi Package | false | +| version | Version of CFN PyPi Package | Latest Version of CFN PyPi Package | false | | python | Python Version | Defaults to `python` on Windows, and `python3` otherwise. | false | | command | Cloud Formation Linter Command to Run Afer Install | N/A | false | From 0a81557953c05257cf1d5d6c4db53b3b3ee4a811 Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Sun, 18 Apr 2021 11:41:40 +0100 Subject: [PATCH 42/60] Update examples/template.yml Co-authored-by: Scott Brenner --- examples/template.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/template.yml b/examples/template.yml index 6fa3ac6..e58fb81 100644 --- a/examples/template.yml +++ b/examples/template.yml @@ -1,3 +1,4 @@ +# https://github.com/awslabs/aws-cloudformation-templates/blob/master/community/services/Lambda/LambdaSample.yaml AWSTemplateFormatVersion: '2010-09-09' Description: Template for Lambda Sample. Parameters: From fae9c0cb87d92dede771ce3c936692ef8aadabcb Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Sun, 18 Apr 2021 11:50:11 +0100 Subject: [PATCH 43/60] Change URL within CHANGELOG based on feedback --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1178f02..08d5f8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [2.0.0](https://github.com/EliLillyCo/edat-services-github/releases/tag/v2.0.0) +## [2.0.0](https://github.com/ScottBrenner/cfn-lint-action/releases/tag/v2.0.0) ### Added From 3f7bcf2a677ca701b6415283a7e8bac87006754f Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Sun, 18 Apr 2021 12:05:59 +0100 Subject: [PATCH 44/60] Fixing Prettier Issues --- README.md | 2 +- package.json | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index c672e04..181b50d 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Further, you can configure this action to download a specific version of the [Cl | Input Name | Input Description | Default Value | Required? | | ---------- | -------------------------------------------------- | --------------------------------------------------------- | --------- | -| version | Version of CFN PyPi Package | Latest Version of CFN PyPi Package | false | +| version | Version of CFN PyPi Package | Latest Version of CFN PyPi Package | false | | python | Python Version | Defaults to `python` on Windows, and `python3` otherwise. | false | | command | Cloud Formation Linter Command to Run Afer Install | N/A | false | diff --git a/package.json b/package.json index 4d3f0b8..b99b97e 100644 --- a/package.json +++ b/package.json @@ -23,4 +23,3 @@ "prettier": "2.2.1" } } - From 8ed902ec3905fca6fbeb98ebe484b537dbed0dfe Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Sun, 18 Apr 2021 12:09:18 +0100 Subject: [PATCH 45/60] Adding Pre-Commit Hooks --- .husky/.gitignore | 1 + .husky/pre-commit | 4 + dist/index.js | 69 +++-- package-lock.json | 686 ++++++++++++++++++++++++++++++++++++++++++++++ package.json | 9 +- 5 files changed, 741 insertions(+), 28 deletions(-) create mode 100644 .husky/.gitignore create mode 100755 .husky/pre-commit diff --git a/.husky/.gitignore b/.husky/.gitignore new file mode 100644 index 0000000..31354ec --- /dev/null +++ b/.husky/.gitignore @@ -0,0 +1 @@ +_ diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..36af219 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npx lint-staged diff --git a/dist/index.js b/dist/index.js index 1233895..bd9eef8 100644 --- a/dist/index.js +++ b/dist/index.js @@ -25,43 +25,42 @@ const setup = __nccwpck_require__(391); const core = __nccwpck_require__(186); -const { getInputs } = __nccwpck_require__(515) -const { installCLI } = __nccwpck_require__(298) -const { runCommand } = __nccwpck_require__(771) +const { getInputs } = __nccwpck_require__(515); +const { installCLI } = __nccwpck_require__(298); +const { runCommand } = __nccwpck_require__(771); async function setup() { - - let inputs; let binPath; + let inputs; + let binPath; try { inputs = await getInputs(); - } catch (error){ - core.error(error.message) + } catch (error) { + core.error(error.message); throw error; } try { binPath = await installCLI(inputs); - } catch (error){ - core.error(error.message) + } catch (error) { + core.error(error.message); throw error; } core.addPath(binPath); - if(!inputs.command){ + if (!inputs.command) { return; } try { await runCommand(inputs); - } catch (error){ - core.error(error.message) + } catch (error) { + core.error(error.message); throw error; } return; - } module.exports = setup; @@ -97,16 +96,16 @@ const { isWindows } = __nccwpck_require__(604); module.exports = { getInputs: () => { - // python3 isn't standard on Windows + // python3 isn't standard on Windows const defaultPython = isWindows() ? "python" : "python3"; try { const version = getInput("version", /^[\d.*]+$/, "0.*"); const command = getInput("command", /^cfn-lint\s || null/, null); const python = getInput("python", /^.+$/, defaultPython); - return { version, command, python } - } catch(e){ - core.error('Failed to Collect Inputs'); + return { version, command, python }; + } catch (e) { + core.error("Failed to Collect Inputs"); throw e; } }, @@ -151,8 +150,7 @@ const path = __nccwpck_require__(622); const exec = __nccwpck_require__(514); -const { mkdirTemp, createPythonVenv, isWindows} = __nccwpck_require__(604); - +const { mkdirTemp, createPythonVenv, isWindows } = __nccwpck_require__(604); module.exports = { installCLI: async ({ python, version }) => { @@ -172,19 +170,34 @@ module.exports = { // Ensure installation tooling is up-to-date across platforms await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "pip"]); // setuptools and wheel needed for source and binary distributions - await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", "setuptools", "wheel" ]); + await exec.exec(pythonPath, [ + "-m", + "pip", + "install", + "--upgrade", + "setuptools", + "wheel", + ]); // Install latest compatible version - await exec.exec(pythonPath, ["-m", "pip", "install", "--upgrade", `cfn-lint==${version}` ]); + await exec.exec(pythonPath, [ + "-m", + "pip", + "install", + "--upgrade", + `cfn-lint==${version}`, + ]); // Symlink from separate directory so only CFN LINT CLI is added to PATH const symlinkPath = path.join(tempPath, "bin"); fs.mkdirSync(symlinkPath); const cfnLint = isWindows() ? "cfn-lint.exe" : "cfn-lint"; - fs.symlinkSync(path.join(binPath, cfnLint), path.join(symlinkPath, cfnLint)); + fs.symlinkSync( + path.join(binPath, cfnLint), + path.join(symlinkPath, cfnLint) + ); return symlinkPath; }, - }; @@ -198,12 +211,14 @@ const core = __nccwpck_require__(186); module.exports = { runCommand: async ({ command }) => { - try{ - const response = await exec.exec(command) + try { + const response = await exec.exec(command); core.info(`Ran command: ${command}. Response is: ${response}`); return response; - } catch(e){ - core.error(`Error running command: ${command}. Returned error is: ${e.message}`); + } catch (e) { + core.error( + `Error running command: ${command}. Returned error is: ${e.message}` + ); throw e; } }, diff --git a/package-lock.json b/package-lock.json index 946ff28..f60789f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,9 @@ "devDependencies": { "@vercel/ncc": "^0.27.0", "eslint": "^7.20.0", + "husky": "^6.0.0", "jest": "^26.6.3", + "lint-staged": "^10.5.4", "prettier": "2.2.1" } }, @@ -1010,6 +1012,12 @@ "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "dev": true }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, "node_modules/@types/prettier": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", @@ -1092,6 +1100,19 @@ "node": ">=0.4.0" } }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1708,6 +1729,57 @@ "node": ">=0.10.0" } }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -1784,6 +1856,15 @@ "node": ">= 0.8" } }, + "node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -1820,6 +1901,22 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1925,6 +2022,12 @@ "node": ">=0.10" } }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, "node_modules/deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -2672,6 +2775,30 @@ "bser": "2.1.1" } }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/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": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -2836,6 +2963,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -3105,6 +3238,18 @@ "node": ">=8.12.0" } }, + "node_modules/husky": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz", + "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -3167,6 +3312,15 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3360,6 +3514,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true, + "engines": { + "node": ">=0.10.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", @@ -3378,6 +3541,15 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", @@ -3405,6 +3577,18 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -4276,6 +4460,75 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "node_modules/lint-staged": { + "version": "10.5.4", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.4.tgz", + "integrity": "sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "commander": "^6.2.0", + "cosmiconfig": "^7.0.0", + "debug": "^4.2.0", + "dedent": "^0.7.0", + "enquirer": "^2.3.6", + "execa": "^4.1.0", + "listr2": "^3.2.2", + "log-symbols": "^4.0.0", + "micromatch": "^4.0.2", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "^3.3.0" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/listr2": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.6.3.tgz", + "integrity": "sha512-YJMIY4z/Tosa/8N5YcCfcLBR5RlcJNt9vB+2ip5o1cbyxcLqKEN87lCEN7TMuq+UNMPqO93HP5wv1PrTZjs7nQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "figures": "^3.2.0", + "indent-string": "^4.0.0", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rxjs": "^6.6.7", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + } + }, + "node_modules/listr2/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/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -4312,6 +4565,40 @@ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -4789,6 +5076,21 @@ "node": ">=8" } }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "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", @@ -4876,6 +5178,15 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, + "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/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -4918,6 +5229,15 @@ "node": ">=8" } }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "dependencies": { + "semver-compare": "^1.0.0" + } + }, "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -5298,6 +5618,19 @@ "deprecated": "https://github.com/lydell/resolve-url#deprecated", "dev": true }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -5331,6 +5664,18 @@ "node": "6.* || >= 7.*" } }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -5672,6 +6017,12 @@ "node": ">=10" } }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -6207,6 +6558,15 @@ "node": ">=0.10.0" } }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -6234,6 +6594,20 @@ "node": ">=8" } }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -6400,6 +6774,12 @@ "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", "dev": true }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, "node_modules/tmpl": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", @@ -6492,6 +6872,12 @@ "node": ">=8" } }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -6896,6 +7282,15 @@ "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": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", @@ -7795,6 +8190,12 @@ "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "dev": true }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, "@types/prettier": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.3.tgz", @@ -7863,6 +8264,16 @@ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -8340,6 +8751,44 @@ } } }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, "cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", @@ -8403,6 +8852,12 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -8436,6 +8891,19 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -8517,6 +8985,12 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", @@ -9106,6 +9580,23 @@ "bser": "2.1.1" } }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + } + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -9230,6 +9721,12 @@ "has-symbols": "^1.0.1" } }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, "get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", @@ -9432,6 +9929,12 @@ "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, + "husky": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz", + "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", + "dev": true + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -9473,6 +9976,12 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -9612,6 +10121,12 @@ "integrity": "sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==", "dev": true }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -9627,6 +10142,12 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, "is-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", @@ -9645,6 +10166,12 @@ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -10332,6 +10859,59 @@ "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", "dev": true }, + "lint-staged": { + "version": "10.5.4", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.5.4.tgz", + "integrity": "sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "commander": "^6.2.0", + "cosmiconfig": "^7.0.0", + "debug": "^4.2.0", + "dedent": "^0.7.0", + "enquirer": "^2.3.6", + "execa": "^4.1.0", + "listr2": "^3.2.2", + "log-symbols": "^4.0.0", + "micromatch": "^4.0.2", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "^3.3.0" + } + }, + "listr2": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.6.3.tgz", + "integrity": "sha512-YJMIY4z/Tosa/8N5YcCfcLBR5RlcJNt9vB+2ip5o1cbyxcLqKEN87lCEN7TMuq+UNMPqO93HP5wv1PrTZjs7nQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "cli-truncate": "^2.1.0", + "figures": "^3.2.0", + "indent-string": "^4.0.0", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rxjs": "^6.6.7", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "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" + } + } + } + }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -10365,6 +10945,28 @@ "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", "dev": true }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + } + }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -10742,6 +11344,15 @@ "p-limit": "^2.2.0" } }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -10805,6 +11416,12 @@ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", "dev": true }, + "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 + }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", @@ -10835,6 +11452,15 @@ "find-up": "^4.0.0" } }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -11123,6 +11749,16 @@ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", @@ -11144,6 +11780,15 @@ "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==", "dev": true }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -11418,6 +12063,12 @@ "lru-cache": "^6.0.0" } }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -11858,6 +12509,12 @@ "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", "dev": true }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -11879,6 +12536,17 @@ "strip-ansi": "^6.0.0" } }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", @@ -12007,6 +12675,12 @@ "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", "dev": true }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, "tmpl": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", @@ -12080,6 +12754,12 @@ "punycode": "^2.1.1" } }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -12405,6 +13085,12 @@ "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": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", diff --git a/package.json b/package.json index b99b97e..f04c16d 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "test": "jest --coverage --verbose && eslint . && prettier --check .", "build": "ncc build index.js --out dist --license licenses.txt", "format": "prettier --write .", - "all": "npm run format && npm test && npm run build" + "all": "npm run format && npm test && npm run build", + "prepare": "husky install" }, "license": "Apache-2.0", "dependencies": { @@ -19,7 +20,13 @@ "devDependencies": { "@vercel/ncc": "^0.27.0", "eslint": "^7.20.0", + "husky": "^6.0.0", "jest": "^26.6.3", + "lint-staged": "^10.5.4", "prettier": "2.2.1" + }, + "lint-staged": { + "*.js": "eslint --cache --fix", + "*.{js,css,md}": "prettier --write" } } From 5f879ceffe61450b27f9c57f501b3fa6e7d42b3e Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Mon, 19 Apr 2021 08:11:41 +0100 Subject: [PATCH 46/60] Update .github/workflows/codeql-analysis.yml Co-authored-by: Scott Brenner --- .github/workflows/codeql-analysis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 9a3de10..ece792f 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -2,9 +2,9 @@ name: "CodeQL" on: push: - branches: [ main, ft/2.0.0 ] + branches: [ main, v* ] pull_request: - branches: [ main, ft/2.0.0 ] + branches: [ main, v* ] schedule: - cron: '38 18 * * 3' From 651f3533008491afc20d146a1fc647aa8b8bec9e Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Mon, 19 Apr 2021 08:11:54 +0100 Subject: [PATCH 47/60] Update README.md Co-authored-by: Scott Brenner --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 181b50d..0fdb506 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ This Action for [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) enables arbitrary actions for interacting with CloudFormation Linter to validate CloudFormation yaml/json templates against the CloudFormation spec and additional checks. Includes checking valid values for resource properties and best practices. -The actions primary purpose is to set the [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) to the runners $PATH so you can access the linter throughout the workflow, and use in a way that suits your application. There is a way to run a [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) command in this workflow though if you like. +The Action's primary purpose is to set the [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) to the runner's $PATH so you can access the linter throughout the workflow, and use in a way that suits your application. There is a way to run a [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) command in this workflow though if you like. ## Usage From 52546eefae03c06156c6a6fb95a2efe9232937f9 Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Mon, 19 Apr 2021 08:12:05 +0100 Subject: [PATCH 48/60] Update README.md Co-authored-by: Scott Brenner --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0fdb506..c26172e 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ jobs: - name: Checkout uses: actions/checkout@v2 - - name: Testing with CFN Lint Version & Command + - name: Testing with CFN Lint Command uses: ./ with: command: cfn-lint -t ./template.yml From ae952bd81f33978852b2b7831d37348100ee43d4 Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Mon, 19 Apr 2021 08:12:20 +0100 Subject: [PATCH 49/60] Update README.md Co-authored-by: Scott Brenner --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c26172e..334f28e 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ See [Cloud Formation Linter Usage](https://github.com/aws-cloudformation/cfn-pyt ## Upgrading from Version 1? -The main difference between Version 1 and Version 2 is the fact Version 2 by default doesn't run any linting commands. The primary purpose of this action is now to provide the underlying [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) package and enable you to run your commands. To do this, follow the steps below: +The main difference between Version 1 and Version 2 is the fact Version 2 by default doesn't run any linting commands. The primary purpose of this action is now to provide the underlying [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) package and enable you to run your commands. To upgrade from Version 1 to Version 2, follow the steps below: #### Step One From 1cc784477282fb175730b6ef184623abd6e67034 Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Mon, 19 Apr 2021 08:12:31 +0100 Subject: [PATCH 50/60] Update package.json Co-authored-by: Scott Brenner --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f04c16d..b2c202d 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "setup-cfn-lint", "version": "0.1.0", "private": true, - "description": "Action to setup Cloud Formation to the the PATH", + "description": "Action to setup CloudFormation to the the PATH", "main": "index.js", "scripts": { "test": "jest --coverage --verbose && eslint . && prettier --check .", From 71f9114e7ac0d80fd7abcb989dcf243b90de9a96 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Mon, 19 Apr 2021 09:21:37 +0100 Subject: [PATCH 51/60] Pushing Changes based on Feedback --- .github/workflows/main.yml | 2 ++ README.md | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 59a7cd2..7f2cd0e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,6 +30,8 @@ jobs: # Step 1 - name: Git Checkout uses: actions/checkout@v2 + with: + path: "cfn-lint-action" # Step 2 - name: Setup Cloud Formation Linter with Latest Version uses: ./ diff --git a/README.md b/README.md index 334f28e..c08faad 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,38 @@ Below the above include the following: This should give you the same experience as before. +## Running Locally + +This is a JavaScript GitHub Action that relies on Node for third party packages. To get this working on your local machine, firstly make sure you have a working [NodeJS](https://nodejs.org/en/) runtime. It is also recommended to use [Act](https://github.com/nektos/act) to test & run actions locally. These instructions assume you have the [GitHub CLI](https://cli.github.com/) installed. + +1. Firstly, [fork](https://cli.github.com/manual/gh_repo_fork) the repository by running: + +``` +gh repo fork ScottBrenner/cfn-lint-action +``` + +2. Install dependencies + +``` +npm install +``` + +3. To run the action locally run the following command + +``` +node index.js +``` + +## Contributing + +This product welcomes contributions the any open source community. Firstly, please raise an issue on the repository, as this will be used to discuss/agree on scope and feature/bug detail. Once agreed, please follow the [Running Locally](#running-locally) steps above to get started on your machine. Branch off `main` following logically branch naming conventions `feature/***` or `bug/***`. When contributing please try and meet these development principles: + +- This software product follows a module architecture, please try and stay consistent to making small, reusable `modules` of code within the `lib/utils` directory. +- Ensure any new code updated the relevant unit tests found within the `tests/` directory. We use [Jest](https://jestjs.io/) for testing. +- Make sure you run `npm run all` before you push any changes to GitHub to ensure all tests, linting and building passes. + +Once you are happy with the changes, please propose a pull request on the repository and the repository maintainers will review as soon as possible. + ## License Please see the [LICENSE](https://github.com/ScottBrenner/cfn-lint-action/blob/master/LICENSE). From 601c72b4c180f2fab79b08c4178ab625f9585ef1 Mon Sep 17 00:00:00 2001 From: NickLiffen Date: Mon, 19 Apr 2021 09:22:52 +0100 Subject: [PATCH 52/60] Removing Temp Directory --- .github/workflows/main.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7f2cd0e..59a7cd2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,8 +30,6 @@ jobs: # Step 1 - name: Git Checkout uses: actions/checkout@v2 - with: - path: "cfn-lint-action" # Step 2 - name: Setup Cloud Formation Linter with Latest Version uses: ./ From d71843d7443cc7df269c51754539adf22e948726 Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Mon, 19 Apr 2021 16:07:16 +0100 Subject: [PATCH 53/60] Update action.yml Co-authored-by: Scott Brenner --- action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yml b/action.yml index af9ca86..3b846ee 100644 --- a/action.yml +++ b/action.yml @@ -11,7 +11,7 @@ inputs: description: "The Python interpreter to use for AWS CFN LINT" required: false command: - description: "The command you would like AWS Cloud Formation Linter to Run" + description: "The command you would like AWS CloudFormation Linter to Run" required: false runs: using: "node12" From d99c6c148632dea5cb574d837d9918020cae9dc4 Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Mon, 19 Apr 2021 16:07:23 +0100 Subject: [PATCH 54/60] Update action.yml Co-authored-by: Scott Brenner --- action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/action.yml b/action.yml index 3b846ee..0771332 100644 --- a/action.yml +++ b/action.yml @@ -5,7 +5,7 @@ branding: color: "orange" inputs: version: - description: "The version of the AWS Cloud Formation Linter you would like to install" + description: "The version of the AWS CloudFormation Linter you would like to install" required: false python: description: "The Python interpreter to use for AWS CFN LINT" From aaec0ff3e4afbc4fc99737f0b73375a3a5b8eaaf Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Mon, 19 Apr 2021 16:07:30 +0100 Subject: [PATCH 55/60] Update README.md Co-authored-by: Scott Brenner --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c08faad..587a587 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ This should give you the same experience as before. ## Running Locally -This is a JavaScript GitHub Action that relies on Node for third party packages. To get this working on your local machine, firstly make sure you have a working [NodeJS](https://nodejs.org/en/) runtime. It is also recommended to use [Act](https://github.com/nektos/act) to test & run actions locally. These instructions assume you have the [GitHub CLI](https://cli.github.com/) installed. +This is a JavaScript GitHub Action that relies on Node for third party packages. To get this working on your local machine, firstly make sure you have a working [NodeJS](https://nodejs.org/en/) runtime. It is also recommended to use [Act](https://github.com/nektos/act) to test & run actions locally. These instructions assume you have the [GitHub CLI](https://cli.github.com/) installed. 1. Firstly, [fork](https://cli.github.com/manual/gh_repo_fork) the repository by running: From 8bed337e201479dabc92779afdf9cff0b4d2a0d9 Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Mon, 19 Apr 2021 16:07:37 +0100 Subject: [PATCH 56/60] Update README.md Co-authored-by: Scott Brenner --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 587a587..59f3d94 100644 --- a/README.md +++ b/README.md @@ -71,7 +71,7 @@ See [Cloud Formation Linter Usage](https://github.com/aws-cloudformation/cfn-pyt ## Upgrading from Version 1? -The main difference between Version 1 and Version 2 is the fact Version 2 by default doesn't run any linting commands. The primary purpose of this action is now to provide the underlying [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) package and enable you to run your commands. To upgrade from Version 1 to Version 2, follow the steps below: +The main difference between Version 1 and Version 2 is the fact that Version 2 by default doesn't run any linting commands. The primary purpose of this action is now to provide the underlying [CloudFormation Linter](https://github.com/aws-cloudformation/cfn-python-lint/) package and enable you to run your commands. To upgrade from Version 1 to Version 2, follow the steps below: #### Step One From 1fa2daa4837b82b8b12987df4af1726e07221caa Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Mon, 19 Apr 2021 16:07:44 +0100 Subject: [PATCH 57/60] Update README.md Co-authored-by: Scott Brenner --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 59f3d94..344afaa 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ Further, you can configure this action to download a specific version of the [Cl This GitHub Action does not directly output any values. -## How to use the Cloud Formation Linter? +## How to use the CloudFormation Linter? See [Cloud Formation Linter Usage](https://github.com/aws-cloudformation/cfn-python-lint#basic-usage) for full usage details. From ebaa16d295efea26532ef9248170c1685c163657 Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Mon, 19 Apr 2021 16:07:49 +0100 Subject: [PATCH 58/60] Update README.md Co-authored-by: Scott Brenner --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 344afaa..ed8bd78 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ jobs: Within the `run |` section, you specify the required Cloud Formation Linter commands. -However, if you would rather run the Cloud Cloud Formation Linter commands within this action. That is also possible. An example of that can be found below: +However, if you would rather run the Cloud CloudFormation Linter commands within this action. That is also possible. An example of that can be found below: ```yaml name: Lint CloudFormation Templates From 72bb42079e86ec4162cac7eb4e26828d19eec6da Mon Sep 17 00:00:00 2001 From: Nick Liffen Date: Mon, 19 Apr 2021 17:00:04 +0100 Subject: [PATCH 59/60] Update README.md Co-authored-by: Scott Brenner --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ed8bd78..e7370ad 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ jobs: Within the `run |` section, you specify the required Cloud Formation Linter commands. -However, if you would rather run the Cloud CloudFormation Linter commands within this action. That is also possible. An example of that can be found below: +However, if you would rather run the CloudFormation Linter commands within this action. That is also possible. An example of that can be found below: ```yaml name: Lint CloudFormation Templates From 836f70f7fef5ad038e3988d51babe5970a004d0d Mon Sep 17 00:00:00 2001 From: Scott Brenner Date: Mon, 19 Apr 2021 09:16:53 -0700 Subject: [PATCH 60/60] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e7370ad..e71090f 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ jobs: uses: actions/checkout@v2 - name: Testing with CFN Lint Command - uses: ./ + uses: scottbrenner/cfn-lint-action@v2 with: command: cfn-lint -t ./template.yml ```